json/json_8hpp_source.html
Niels Lohmann b249e7b7b5
Update
2017-02-25 16:42:29 +01:00

277 lines
1.3 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.14"/>
<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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<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.1.1</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-2017 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> <span class="comment">// all_of, copy, fill, find, for_each, none_of, remove, reverse, transform</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span> <span class="comment">// array</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span> <span class="comment">// assert</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;cctype&gt;</span> <span class="comment">// isdigit</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;ciso646&gt;</span> <span class="comment">// and, not, or</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span> <span class="comment">// isfinite, labs, ldexp, signbit</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">// nullptr_t, ptrdiff_t, size_t</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// int64_t, uint64_t</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// abort, strtod, strtof, strtold, strtoul, strtoll, strtoull</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span> <span class="comment">// strlen</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &lt;forward_list&gt;</span> <span class="comment">// forward_list</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// function, hash, less</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &lt;initializer_list&gt;</span> <span class="comment">// initializer_list</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span> <span class="comment">// setw</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span> <span class="comment">// istream, ostream</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span> <span class="comment">// advance, begin, back_inserter, bidirectional_iterator_tag, distance, end, inserter, iterator, iterator_traits, next, random_access_iterator_tag, reverse_iterator</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span> <span class="comment">// numeric_limits</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &lt;locale&gt;</span> <span class="comment">// locale</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span> <span class="comment">// map</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// addressof, allocator, allocator_traits, unique_ptr</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &lt;numeric&gt;</span> <span class="comment">// accumulate</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span> <span class="comment">// stringstream</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span> <span class="comment">// domain_error, invalid_argument, out_of_range</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// getline, stoi, string, to_string</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span> <span class="comment">// add_pointer, conditional, decay, enable_if, false_type, integral_constant, is_arithmetic, is_base_of, is_const, is_constructible, is_convertible, is_default_constructible, is_enum, is_floating_point, is_integral, is_nothrow_move_assignable, is_nothrow_move_constructible, is_pointer, is_reference, is_same, is_scalar, is_signed, remove_const, remove_cv, remove_pointer, remove_reference, true_type, underlying_type</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// declval, forward, make_pair, move, pair, swap</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// vector</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// exclude unsupported compilers</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor"> #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) &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"> #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) &lt; 40900</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor"> #endif</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;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// disable float-equal warnings on GCC/clang</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic push</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic ignored &quot;-Wfloat-equal&quot;</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// disable documentation warnings on clang</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic push</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic ignored &quot;-Wdocumentation&quot;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// allow for portable deprecation warnings</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED __attribute__((deprecated))</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED __declspec(deprecated)</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">// allow to disable exceptions</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#if not defined(JSON_NOEXCEPTION) || defined(__EXCEPTIONS)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor"> #define JSON_THROW(exception) throw exception</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor"> #define JSON_TRY try</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor"> #define JSON_CATCH(exception) catch(exception)</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor"> #define JSON_THROW(exception) std::abort()</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="preprocessor"> #define JSON_TRY if(true)</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor"> #define JSON_CATCH(exception) if(false)</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="namespacenlohmann.html"> 108</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacenlohmann.html">nlohmann</a></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="keyword">namespace </span>detail</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment">// JSON type enumeration //</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">enum class</span> value_t : uint8_t</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; null, </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; object, </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; array, </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; string, </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; boolean, </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; number_integer, </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; number_unsigned, </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; number_float, </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; discarded </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;};</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt;(<span class="keyword">const</span> value_t lhs, <span class="keyword">const</span> value_t rhs) noexcept</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">static</span> constexpr std::array&lt;uint8_t, 8&gt; order = {{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; 0, <span class="comment">// null</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; 3, <span class="comment">// object</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; 4, <span class="comment">// array</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; 5, <span class="comment">// string</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; 1, <span class="comment">// boolean</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; 2, <span class="comment">// integer</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; 2, <span class="comment">// unsigned</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; 2, <span class="comment">// float</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; };</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// discarded values are not comparable</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (lhs == value_t::discarded or rhs == value_t::discarded)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</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;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; order[static_cast&lt;std::size_t&gt;(rhs)];</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">// helpers //</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">// alias templates to reduce boilerplate</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">bool</span> B, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keyword">using</span> enable_if_t = <span class="keyword">typename</span> std::enable_if&lt;B, T&gt;::type;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword">using</span> uncvref_t = <span class="keyword">typename</span> std::remove_cv&lt;typename std::remove_reference&lt;T&gt;::type&gt;::type;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment">// taken from http://stackoverflow.com/a/26936864/266378</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="keyword">using</span> is_unscoped_enum =</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; std::integral_constant&lt;bool, std::is_convertible&lt;T, int&gt;::value and</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; std::is_enum&lt;T&gt;::value&gt;;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment">Implementation of two C++17 constructs: conjunction, negation. This is needed</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">to avoid evaluating all the traits in a condition</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">For example: not std::is_same&lt;void, T&gt;::value and has_value_type&lt;T&gt;::value</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">will not compile when T = void (on MSVC at least). Whereas</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">conjunction&lt;negation&lt;std::is_same&lt;void, T&gt;&gt;, has_value_type&lt;T&gt;&gt;::value will</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment">stop evaluating if negation&lt;...&gt;::value == false</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">Please note that those constructs must be used with caution, since symbols can</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">become very long quickly (which can slow down compilation and cause MSVC</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">internal compiler errors). Only use it when you have to (see example ahead).</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span>...&gt; <span class="keyword">struct </span>conjunction : std::true_type {};</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> B1&gt; <span class="keyword">struct </span>conjunction&lt;B1&gt; : B1 {};</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class </span>B1, <span class="keyword">class</span>... Bn&gt;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="keyword">struct </span>conjunction&lt;B1, Bn...&gt; : std::conditional&lt;bool(B1::value), conjunction&lt;Bn...&gt;, B1&gt;::type {};</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> B&gt; <span class="keyword">struct </span>negation : std::integral_constant &lt; bool, !B::value &gt; {};</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// dispatch utility (taken from ranges-v3)</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> N&gt; <span class="keyword">struct </span>priority_tag : priority_tag &lt; N - 1 &gt; {};</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>priority_tag&lt;0&gt; {};</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;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// constructors //</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="keyword">template</span>&lt;value_t&gt; <span class="keyword">struct </span>external_constructor;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::boolean&gt;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::boolean_t b) noexcept</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; j.m_type = value_t::boolean;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; j.m_value = b;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;};</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::string&gt;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;{</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">const</span> <span class="keyword">typename</span> BasicJsonType::string_t&amp; s)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; j.m_type = value_t::string;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; j.m_value = s;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;};</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::number_float&gt;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_float_t val) noexcept</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// replace infinity and NAN by null</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (not std::isfinite(val))</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; j = BasicJsonType{};</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; j.m_type = value_t::number_float;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; j.m_value = val;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;};</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::number_unsigned&gt;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;{</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_unsigned_t val) noexcept</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; j.m_type = value_t::number_unsigned;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; j.m_value = val;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; j.assert_invariant();</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="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::number_integer&gt;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_integer_t val) noexcept</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; j.m_type = value_t::number_integer;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; j.m_value = val;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;};</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::array&gt;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">const</span> <span class="keyword">typename</span> BasicJsonType::array_t&amp; arr)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; j.m_type = value_t::array;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; j.m_value = arr;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleArrayType,</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; enable_if_t&lt;not std::is_same&lt;CompatibleArrayType,</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">typename</span> BasicJsonType::array_t&gt;::value,</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">const</span> CompatibleArrayType&amp; arr)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; j.m_type = value_t::array;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; j.m_value.array = j.template create&lt;typename BasicJsonType::array_t&gt;(begin(arr), end(arr));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;};</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="keyword">struct </span>external_constructor&lt;value_t::object&gt;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;{</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">const</span> <span class="keyword">typename</span> BasicJsonType::object_t&amp; obj)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; j.m_type = value_t::object;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; j.m_value = obj;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleObjectType,</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; enable_if_t&lt;not std::is_same&lt;CompatibleObjectType,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">typename</span> BasicJsonType::object_t&gt;::value,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> construct(BasicJsonType&amp; j, <span class="keyword">const</span> CompatibleObjectType&amp; obj)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; j.m_type = value_t::object;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; j.m_value.object = j.template create&lt;typename BasicJsonType::object_t&gt;(begin(obj), end(obj));</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; j.assert_invariant();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;};</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment">// has_/is_ functions //</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="preprocessor">#define NLOHMANN_JSON_HAS_HELPER(type) \</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="preprocessor"> template&lt;typename T&gt; struct has_##type { \</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="preprocessor"> private: \</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="preprocessor"> template&lt;typename U, typename = typename U::type&gt; \</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="preprocessor"> static int detect(U &amp;&amp;); \</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="preprocessor"> static void detect(...); \</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor"> public: \</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="preprocessor"> static constexpr bool value = \</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor"> std::is_integral&lt;decltype(detect(std::declval&lt;T&gt;()))&gt;::value; \</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;NLOHMANN_JSON_HAS_HELPER(mapped_type);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;NLOHMANN_JSON_HAS_HELPER(key_type);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;NLOHMANN_JSON_HAS_HELPER(value_type);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;NLOHMANN_JSON_HAS_HELPER(iterator);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="preprocessor">#undef NLOHMANN_JSON_HAS_HELPER</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">bool</span> B, <span class="keyword">class</span> RealType, <span class="keyword">class</span> CompatibleObjectType&gt;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="keyword">struct </span>is_compatible_object_type_impl : std::false_type {};</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> RealType, <span class="keyword">class</span> CompatibleObjectType&gt;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="keyword">struct </span>is_compatible_object_type_impl&lt;true, RealType, CompatibleObjectType&gt;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;{</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> value =</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; std::is_constructible&lt;<span class="keyword">typename</span> RealType::key_type,</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">typename</span> CompatibleObjectType::key_type&gt;::value and</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; std::is_constructible&lt;<span class="keyword">typename</span> RealType::mapped_type,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">typename</span> CompatibleObjectType::mapped_type&gt;::value;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;};</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> BasicJsonType, <span class="keyword">class</span> CompatibleObjectType&gt;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="keyword">struct </span>is_compatible_object_type</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> constexpr value = is_compatible_object_type_impl &lt;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; conjunction&lt;negation&lt;std::is_same&lt;void, CompatibleObjectType&gt;&gt;,</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; has_mapped_type&lt;CompatibleObjectType&gt;,</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; has_key_type&lt;CompatibleObjectType&gt;&gt;::value,</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">typename</span> BasicJsonType::object_t, CompatibleObjectType &gt;::value;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;};</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="keyword">struct </span>is_basic_json_nested_type</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;{</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> constexpr value = std::is_same&lt;T, typename BasicJsonType::iterator&gt;::value or</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; std::is_same&lt;T, typename BasicJsonType::const_iterator&gt;::value or</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; std::is_same&lt;T, typename BasicJsonType::reverse_iterator&gt;::value or</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; std::is_same&lt;T, typename BasicJsonType::const_reverse_iterator&gt;::value or</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; std::is_same&lt;T, typename BasicJsonType::json_pointer&gt;::value;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;};</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> BasicJsonType, <span class="keyword">class</span> CompatibleArrayType&gt;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="keyword">struct </span>is_compatible_array_type</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;{</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> constexpr value =</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; conjunction&lt;negation&lt;std::is_same&lt;void, CompatibleArrayType&gt;&gt;,</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; negation&lt;is_compatible_object_type&lt;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; BasicJsonType, CompatibleArrayType&gt;&gt;,</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; negation&lt;std::is_constructible&lt;<span class="keyword">typename</span> BasicJsonType::string_t,</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; CompatibleArrayType&gt;&gt;,</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; negation&lt;is_basic_json_nested_type&lt;BasicJsonType, CompatibleArrayType&gt;&gt;,</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; has_value_type&lt;CompatibleArrayType&gt;,</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; has_iterator&lt;CompatibleArrayType&gt;&gt;::value;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;};</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="keyword">struct </span>is_compatible_integer_type_impl : std::false_type {};</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> RealIntegerType, <span class="keyword">typename</span> CompatibleNumberIntegerType&gt;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="keyword">struct </span>is_compatible_integer_type_impl&lt;true, RealIntegerType, CompatibleNumberIntegerType&gt;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// is there an assert somewhere on overflows?</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">using</span> RealLimits = std::numeric_limits&lt;RealIntegerType&gt;;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">using</span> CompatibleLimits = std::numeric_limits&lt;CompatibleNumberIntegerType&gt;;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> value =</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; std::is_constructible&lt;RealIntegerType,</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; CompatibleNumberIntegerType&gt;::value and</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; CompatibleLimits::is_integer and</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; RealLimits::is_signed == CompatibleLimits::is_signed;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;};</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> RealIntegerType, <span class="keyword">typename</span> CompatibleNumberIntegerType&gt;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="keyword">struct </span>is_compatible_integer_type</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> value =</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; is_compatible_integer_type_impl &lt;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; std::is_integral&lt;CompatibleNumberIntegerType&gt;::value and</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; not std::is_same&lt;bool, CompatibleNumberIntegerType&gt;::value,</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; RealIntegerType, CompatibleNumberIntegerType &gt; ::value;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;};</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment">// trait checking if JSONSerializer&lt;T&gt;::from_json(json const&amp;, udt&amp;) exists</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="keyword">struct </span>has_from_json</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;{</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// also check the return type of from_json</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; template&lt;typename U, typename = enable_if_t&lt;std::is_same&lt;void, decltype(uncvref_t&lt;U&gt;::from_json(</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; std::declval&lt;BasicJsonType&gt;(), std::declval&lt;T&amp;&gt;()))&gt;::value&gt;&gt;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> detect(U&amp;&amp;);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> detect(...);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> value = std::is_integral&lt;decltype(</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; detect(std::declval&lt;<span class="keyword">typename</span> BasicJsonType::template json_serializer&lt;T, void&gt;&gt;()))&gt;::value;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;};</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment">// This trait checks if JSONSerializer&lt;T&gt;::from_json(json const&amp;) exists</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// this overload is used for non-default-constructible user-defined-types</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="keyword">struct </span>has_non_default_from_json</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keyword">template</span> &lt;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">typename</span> U,</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">typename</span> = enable_if_t&lt;std::is_same&lt;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; T, decltype(uncvref_t&lt;U&gt;::from_json(std::declval&lt;BasicJsonType&gt;()))&gt;::value &gt;&gt;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> detect(U&amp;&amp;);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> detect(...);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> value = std::is_integral&lt;decltype(detect(</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; std::declval&lt;<span class="keyword">typename</span> BasicJsonType::template json_serializer&lt;T, void&gt;&gt;()))&gt;::value;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;};</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// This trait checks if BasicJsonType::json_serializer&lt;T&gt;::to_json exists</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="keyword">struct </span>has_to_json</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;{</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; template&lt;typename U, typename = decltype(uncvref_t&lt;U&gt;::to_json(</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; std::declval&lt;BasicJsonType&amp;&gt;(), std::declval&lt;T&gt;()))&gt;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> detect(U&amp;&amp;);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> detect(...);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> value = std::is_integral&lt;decltype(detect(</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; std::declval&lt;<span class="keyword">typename</span> BasicJsonType::template json_serializer&lt;T, void&gt;&gt;()))&gt;::value;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;};</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment">// to_json //</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T, enable_if_t&lt;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; std::is_same&lt;T, typename BasicJsonType::boolean_t&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, T b) noexcept</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;{</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; external_constructor&lt;value_t::boolean&gt;::construct(j, b);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;}</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleString,</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; enable_if_t&lt;std::is_constructible&lt;<span class="keyword">typename</span> BasicJsonType::string_t,</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; CompatibleString&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, <span class="keyword">const</span> CompatibleString&amp; s)</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;{</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; external_constructor&lt;value_t::string&gt;::construct(j, s);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;}</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> FloatType,</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; enable_if_t&lt;std::is_floating_point&lt;FloatType&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, FloatType val) noexcept</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;{</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; external_constructor&lt;value_t::number_float&gt;::construct(j, static_cast&lt;typename BasicJsonType::number_float_t&gt;(val));</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;}</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleNumberUnsignedType,</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; enable_if_t&lt;is_compatible_integer_type&lt;<span class="keyword">typename</span> BasicJsonType::number_unsigned_t,</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; CompatibleNumberUnsignedType&gt;::value, <span class="keywordtype">int</span>&gt; = 0 &gt;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, CompatibleNumberUnsignedType val) noexcept</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;{</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; external_constructor&lt;value_t::number_unsigned&gt;::construct(j, static_cast&lt;typename BasicJsonType::number_unsigned_t&gt;(val));</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;}</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleNumberIntegerType,</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; enable_if_t&lt;is_compatible_integer_type&lt;<span class="keyword">typename</span> BasicJsonType::number_integer_t,</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; CompatibleNumberIntegerType&gt;::value, <span class="keywordtype">int</span>&gt; = 0 &gt;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, CompatibleNumberIntegerType val) noexcept</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;{</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; external_constructor&lt;value_t::number_integer&gt;::construct(j, static_cast&lt;typename BasicJsonType::number_integer_t&gt;(val));</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;}</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> UnscopedEnumType,</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; enable_if_t&lt;is_unscoped_enum&lt;UnscopedEnumType&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, UnscopedEnumType e) noexcept</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;{</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; external_constructor&lt;value_t::number_integer&gt;::construct(j, e);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;}</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleArrayType,</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; enable_if_t &lt;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; is_compatible_array_type&lt;BasicJsonType, CompatibleArrayType&gt;::value or</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; std::is_same&lt;typename BasicJsonType::array_t, CompatibleArrayType&gt;::value,</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordtype">int</span> &gt; = 0 &gt;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, <span class="keyword">const</span> CompatibleArrayType&amp; arr)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;{</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; external_constructor&lt;value_t::array&gt;::construct(j, arr);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;}</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleObjectType,</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; enable_if_t&lt;is_compatible_object_type&lt;BasicJsonType, CompatibleObjectType&gt;::value,</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordtype">int</span>&gt; = 0 &gt;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="keywordtype">void</span> to_json(BasicJsonType&amp; j, <span class="keyword">const</span> CompatibleObjectType&amp; arr)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;{</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; external_constructor&lt;value_t::object&gt;::construct(j, arr);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;}</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment">// from_json //</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment">// overloads for basic_json template parameters</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> ArithmeticType,</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; enable_if_t&lt;std::is_arithmetic&lt;ArithmeticType&gt;::value and</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; not std::is_same&lt;ArithmeticType,</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">typename</span> BasicJsonType::boolean_t&gt;::value,</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="keywordtype">void</span> get_arithmetic_value(<span class="keyword">const</span> BasicJsonType&amp; j, ArithmeticType&amp; val)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;{</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">switch</span> (static_cast&lt;value_t&gt;(j))</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; *j.template get_ptr&lt;const typename BasicJsonType::number_unsigned_t*&gt;());</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; *j.template get_ptr&lt;const typename BasicJsonType::number_integer_t*&gt;());</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; *j.template get_ptr&lt;const typename BasicJsonType::number_float_t*&gt;());</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; JSON_THROW(</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; std::domain_error(<span class="stringliteral">&quot;type must be number, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;}</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::boolean_t&amp; b)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (not j.is_boolean())</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be boolean, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; b = *j.template get_ptr&lt;const typename BasicJsonType::boolean_t*&gt;();</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;}</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::string_t&amp; s)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;{</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (not j.is_string())</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be string, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; }</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; s = *j.template get_ptr&lt;const typename BasicJsonType::string_t*&gt;();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;}</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_float_t&amp; val)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;{</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; get_arithmetic_value(j, val);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;}</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_unsigned_t&amp; val)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;{</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; get_arithmetic_value(j, val);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;}</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::number_integer_t&amp; val)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;{</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; get_arithmetic_value(j, val);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;}</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> UnscopedEnumType,</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; enable_if_t&lt;is_unscoped_enum&lt;UnscopedEnumType&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, UnscopedEnumType&amp; e)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;{</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keyword">typename</span> std::underlying_type&lt;UnscopedEnumType&gt;::type val;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; get_arithmetic_value(j, val);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; e = <span class="keyword">static_cast&lt;</span>UnscopedEnumType<span class="keyword">&gt;</span>(val);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType&gt;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, <span class="keyword">typename</span> BasicJsonType::array_t&amp; arr)</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;{</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (not j.is_array())</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; {</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; arr = *j.template get_ptr&lt;const typename BasicJsonType::array_t*&gt;();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;}</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="comment">// forward_list doesn&#39;t have an insert method</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, std::forward_list&lt;T, Allocator&gt;&amp; l)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;{</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="comment">// do not perform the check when user wants to retrieve jsons</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">// (except when it&#39;s null.. ?)</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">if</span> (j.is_null())</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; {</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (not std::is_same&lt;T, BasicJsonType&gt;::value)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (not j.is_array())</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = j.rbegin(), end = j.rend(); it != end; ++it)</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; l.push_front(it-&gt;template get&lt;T&gt;());</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;}</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleArrayType&gt;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="keywordtype">void</span> from_json_array_impl(<span class="keyword">const</span> BasicJsonType&amp; j, CompatibleArrayType&amp; arr, priority_tag&lt;0&gt;)</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;{</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; std::transform(j.begin(), j.end(),</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; std::inserter(arr, end(arr)), [](<span class="keyword">const</span> BasicJsonType &amp; i)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// get&lt;BasicJsonType&gt;() returns *this, this won&#39;t call a from_json</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// method when value_type is BasicJsonType</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> i.template get&lt;typename CompatibleArrayType::value_type&gt;();</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; });</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</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;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleArrayType&gt;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="keyword">auto</span> from_json_array_impl(<span class="keyword">const</span> BasicJsonType&amp; j, CompatibleArrayType&amp; arr, priority_tag&lt;1&gt;)</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;-&gt; decltype(</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; arr.reserve(std::declval&lt;typename CompatibleArrayType::size_type&gt;()),</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; void())</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;{</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; arr.reserve(j.size());</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; std::transform(</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; j.begin(), j.end(), std::inserter(arr, end(arr)), [](<span class="keyword">const</span> BasicJsonType &amp; i)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">// get&lt;BasicJsonType&gt;() returns *this, this won&#39;t call a from_json</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// method when value_type is BasicJsonType</span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">return</span> i.template get&lt;typename CompatibleArrayType::value_type&gt;();</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; });</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;}</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleArrayType,</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; enable_if_t&lt;is_compatible_array_type&lt;BasicJsonType, CompatibleArrayType&gt;::value and</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; not std::is_same&lt;typename BasicJsonType::array_t, CompatibleArrayType&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, CompatibleArrayType&amp; arr)</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;{</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">if</span> (j.is_null())</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</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; <span class="comment">// when T == BasicJsonType, do not check if value_t is correct</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (not std::is_same&lt;typename CompatibleArrayType::value_type, BasicJsonType&gt;::value)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (not j.is_array())</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; from_json_array_impl(j, arr, priority_tag&lt;1&gt; {});</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;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> CompatibleObjectType,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; enable_if_t&lt;is_compatible_object_type&lt;BasicJsonType, CompatibleObjectType&gt;::value, <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, CompatibleObjectType&amp; obj)</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;{</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">if</span> (not j.is_object())</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be object, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; }</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keyword">auto</span> inner_object = j.template get_ptr&lt;const typename BasicJsonType::object_t*&gt;();</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="comment">// we could avoid the assignment, but this might require a for loop, which</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="comment">// might be less efficient than the container constructor for some</span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">// containers (would it?)</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; obj = CompatibleObjectType(begin(*inner_object), end(*inner_object));</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="l00787"></a><span class="lineno"> 787</span>&#160;<span class="comment">// overload for arithmetic types, not chosen for basic_json template arguments</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="comment">// (BooleanType, etc..); note: Is it really necessary to provide explicit</span></div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;<span class="comment">// overloads for boolean_t etc. in case of a custom BooleanType which is not</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="comment">// an arithmetic type?</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> ArithmeticType,</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; enable_if_t &lt;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; std::is_arithmetic&lt;ArithmeticType&gt;::value and</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; not std::is_same&lt;ArithmeticType, typename BasicJsonType::number_unsigned_t&gt;::value and</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; not std::is_same&lt;ArithmeticType, typename BasicJsonType::number_integer_t&gt;::value and</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; not std::is_same&lt;ArithmeticType, typename BasicJsonType::number_float_t&gt;::value and</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; not std::is_same&lt;ArithmeticType, typename BasicJsonType::boolean_t&gt;::value,</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="keywordtype">void</span> from_json(<span class="keyword">const</span> BasicJsonType&amp; j, ArithmeticType&amp; val)</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;{</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">switch</span> (static_cast&lt;value_t&gt;(j))</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; {</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; {</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(*j.template get_ptr&lt;const typename BasicJsonType::number_unsigned_t*&gt;());</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; }</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; {</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(*j.template get_ptr&lt;const typename BasicJsonType::number_integer_t*&gt;());</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(*j.template get_ptr&lt;const typename BasicJsonType::number_float_t*&gt;());</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; val = <span class="keyword">static_cast&lt;</span>ArithmeticType<span class="keyword">&gt;</span>(*j.template get_ptr&lt;const typename BasicJsonType::boolean_t*&gt;());</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; }</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be number, but is &quot;</span> + j.type_name()));</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; }</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;}</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;<span class="keyword">struct </span>to_json_fn</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;{</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keyword">auto</span> call(BasicJsonType&amp; j, T&amp;&amp; val, priority_tag&lt;1&gt;) <span class="keyword">const</span> noexcept(noexcept(to_json(j, std::forward&lt;T&gt;(val))))</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; -&gt; decltype(to_json(j, std::forward&lt;T&gt;(val)), <span class="keywordtype">void</span>())</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">return</span> to_json(j, std::forward&lt;T&gt;(val));</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordtype">void</span> call(BasicJsonType&amp;, T&amp;&amp;, priority_tag&lt;0&gt;) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; {</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; static_assert(<span class="keyword">sizeof</span>(BasicJsonType) == 0,</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="stringliteral">&quot;could not find to_json() method in T&#39;s namespace&quot;</span>);</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordtype">void</span> operator()(BasicJsonType&amp; j, T&amp;&amp; val) <span class="keyword">const</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; noexcept(noexcept(std::declval&lt;to_json_fn&gt;().call(j, std::forward&lt;T&gt;(val), priority_tag&lt;1&gt; {})))</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; <span class="keywordflow">return</span> call(j, std::forward&lt;T&gt;(val), priority_tag&lt;1&gt; {});</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</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;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="keyword">struct </span>from_json_fn</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;{</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keyword">auto</span> call(<span class="keyword">const</span> BasicJsonType&amp; j, T&amp; val, priority_tag&lt;1&gt;) <span class="keyword">const</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; noexcept(noexcept(from_json(j, val)))</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; -&gt; decltype(from_json(j, val), <span class="keywordtype">void</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; <span class="keywordflow">return</span> from_json(j, val);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordtype">void</span> call(<span class="keyword">const</span> BasicJsonType&amp;, T&amp;, priority_tag&lt;0&gt;) <span class="keyword">const</span> noexcept</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; static_assert(<span class="keyword">sizeof</span>(BasicJsonType) == 0,</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="stringliteral">&quot;could not find from_json() method in T&#39;s namespace&quot;</span>);</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;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> BasicJsonType&amp; j, T&amp; val) <span class="keyword">const</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; noexcept(noexcept(std::declval&lt;from_json_fn&gt;().call(j, val, priority_tag&lt;1&gt; {})))</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; {</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> call(j, val, priority_tag&lt;1&gt; {});</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; }</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="comment">// taken from ranges-v3</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;<span class="keyword">struct </span>static_const</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;{</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keyword">static</span> constexpr T value{};</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;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;constexpr T static_const&lt;T&gt;::value;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;} <span class="comment">// namespace detail</span></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="l00896"></a><span class="lineno"><a class="line" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html"> 896</a></span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;{</div><div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a455d0daa616e67bbb74d81cf3ba15e79.html#a455d0daa616e67bbb74d81cf3ba15e79"> 898</a></span>&#160;constexpr <span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a455d0daa616e67bbb74d81cf3ba15e79.html#a455d0daa616e67bbb74d81cf3ba15e79">to_json</a> = detail::static_const&lt;detail::to_json_fn&gt;::value;</div><div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a69afe041fa2aeac2239b65ae88b64af8.html#a69afe041fa2aeac2239b65ae88b64af8"> 899</a></span>&#160;constexpr <span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a69afe041fa2aeac2239b65ae88b64af8.html#a69afe041fa2aeac2239b65ae88b64af8">from_json</a> = detail::static_const&lt;detail::from_json_fn&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="l00902"></a><span class="lineno"> 902</span>&#160;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> = <span class="keywordtype">void</span>, <span class="keyword">typename</span> = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00911"></a><span class="lineno"><a class="line" href="structnlohmann_1_1adl__serializer.html"> 911</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structnlohmann_1_1adl__serializer.html">adl_serializer</a></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;{</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="structnlohmann_1_1adl__serializer_ab39cad07c1a2bf4414d6cae5215b4e7a.html#ab39cad07c1a2bf4414d6cae5215b4e7a"> 923</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structnlohmann_1_1adl__serializer_ab39cad07c1a2bf4414d6cae5215b4e7a.html#ab39cad07c1a2bf4414d6cae5215b4e7a">from_json</a>(BasicJsonType&amp;&amp; j, ValueType&amp; val) noexcept(</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; noexcept(::nlohmann::from_json(std::forward&lt;BasicJsonType&gt;(j), val)))</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; {</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; ::nlohmann::from_json(std::forward&lt;BasicJsonType&gt;(j), val);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> BasicJsonType, <span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="structnlohmann_1_1adl__serializer_adf8cd96afe6ab243b67392dfe35ace89.html#adf8cd96afe6ab243b67392dfe35ace89"> 939</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="structnlohmann_1_1adl__serializer_adf8cd96afe6ab243b67392dfe35ace89.html#adf8cd96afe6ab243b67392dfe35ace89">to_json</a>(BasicJsonType&amp; j, ValueType&amp;&amp; val) noexcept(</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; noexcept(::nlohmann::to_json(j, std::forward&lt;ValueType&gt;(val))))</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; {</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; ::nlohmann::to_json(j, std::forward&lt;ValueType&gt;(val));</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;};</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</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="l01030"></a><span class="lineno"> 1030</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="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keyword">class </span>StringType = std::string,</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keyword">class </span>BooleanType = bool,</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keyword">class </span>NumberIntegerType = std::int64_t,</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keyword">class </span>NumberUnsignedType = std::uint64_t,</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keyword">class </span>NumberFloatType = double,</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</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="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> SFINAE = <span class="keywordtype">void</span>&gt; <span class="keyword">class </span>JSONSerializer = <a class="code" href="structnlohmann_1_1adl__serializer.html">adl_serializer</a></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; &gt;</div><div class="line"><a name="l01039"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json.html"> 1039</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="l01040"></a><span class="lineno"> 1040</span>&#160;{</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01042"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6275ed57bae6866cdf5db5370a7ad47c.html#a6275ed57bae6866cdf5db5370a7ad47c"> 1042</a></span>&#160; <span class="keyword">template</span>&lt;detail::value_t&gt; <span class="keyword">friend</span> <span class="keyword">struct </span>detail::external_constructor;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</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="l01045"></a><span class="lineno"> 1045</span>&#160; BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType,</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; AllocatorType, JSONSerializer&gt;;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01049"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae8cbef097f7da18a781fc86587de6b90.html#ae8cbef097f7da18a781fc86587de6b90"> 1049</a></span>&#160; <span class="keyword">using</span> value_t = detail::value_t;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="comment">// forward declarations</span></div><div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl.html"> 1051</a></span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>;</div><div class="line"><a name="l01052"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html"> 1052</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="l01053"></a><span class="lineno"> 1053</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="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> SFINAE&gt;</div><div class="line"><a name="l01055"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7768841baaaa7a21098a401c932efaff.html#a7768841baaaa7a21098a401c932efaff"> 1055</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a7768841baaaa7a21098a401c932efaff.html#a7768841baaaa7a21098a401c932efaff">json_serializer</a> = JSONSerializer&lt;T, SFINAE&gt;;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="comment">// container types //</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2b3297873b70c080837e8eedc4fec32f.html#a2b3297873b70c080837e8eedc4fec32f"> 1067</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="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01070"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac6a5eddd156c776ac75ff54cfe54a5bc.html#ac6a5eddd156c776ac75ff54cfe54a5bc"> 1070</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="l01072"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4057c5425f4faacfe39a8046871786ca.html#a4057c5425f4faacfe39a8046871786ca"> 1072</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="l01073"></a><span class="lineno"> 1073</span>&#160;</div><div class="line"><a name="l01075"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f"> 1075</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> = std::ptrdiff_t;</div><div class="line"><a name="l01077"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b"> 1077</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> = std::size_t;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;</div><div class="line"><a name="l01080"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350.html#a86ce930490cf7773b26f5ef49c04a350"> 1080</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350.html#a86ce930490cf7773b26f5ef49c04a350">allocator_type</a> = AllocatorType&lt;basic_json&gt;;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;</div><div class="line"><a name="l01083"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4"> 1083</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">pointer</a> = <span class="keyword">typename</span> std::allocator_traits&lt;allocator_type&gt;::pointer;</div><div class="line"><a name="l01085"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58"> 1085</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58">const_pointer</a> = <span class="keyword">typename</span> std::allocator_traits&lt;allocator_type&gt;::const_pointer;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01088"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a099316232c76c034030a38faa6e34dca.html#a099316232c76c034030a38faa6e34dca"> 1088</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> = <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl&lt;basic_json&gt;</a>;</div><div class="line"><a name="l01090"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a41a70cf9993951836d129bb1c2b3126a.html#a41a70cf9993951836d129bb1c2b3126a"> 1090</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> = <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl&lt;const basic_json&gt;</a>;</div><div class="line"><a name="l01092"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac223d5560c2b05a208c88de67376c5f2.html#ac223d5560c2b05a208c88de67376c5f2"> 1092</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="l01094"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a72be3c24bfa24f0993d6c11af03e7404.html#a72be3c24bfa24f0993d6c11af03e7404"> 1094</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="l01095"></a><span class="lineno"> 1095</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af4ac14224fbdd29d3547fcb11bb55c8f.html#af4ac14224fbdd29d3547fcb11bb55c8f"> 1102</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350.html#a86ce930490cf7773b26f5ef49c04a350">allocator_type</a> <a class="code" href="classnlohmann_1_1basic__json_af4ac14224fbdd29d3547fcb11bb55c8f.html#af4ac14224fbdd29d3547fcb11bb55c8f">get_allocator</a>()</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350.html#a86ce930490cf7773b26f5ef49c04a350">allocator_type</a>();</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aef6d0eeccee7c5c7e1317c2ea1607fab.html#aef6d0eeccee7c5c7e1317c2ea1607fab"> 1130</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_aef6d0eeccee7c5c7e1317c2ea1607fab.html#aef6d0eeccee7c5c7e1317c2ea1607fab">meta</a>()</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; result[<span class="stringliteral">&quot;copyright&quot;</span>] = <span class="stringliteral">&quot;(C) 2013-2017 Niels Lohmann&quot;</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; result[<span class="stringliteral">&quot;name&quot;</span>] = <span class="stringliteral">&quot;JSON for Modern C++&quot;</span>;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; result[<span class="stringliteral">&quot;url&quot;</span>] = <span class="stringliteral">&quot;https://github.com/nlohmann/json&quot;</span>;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; result[<span class="stringliteral">&quot;version&quot;</span>] =</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; {<span class="stringliteral">&quot;string&quot;</span>, <span class="stringliteral">&quot;2.1.1&quot;</span>},</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; {<span class="stringliteral">&quot;major&quot;</span>, 2},</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; {<span class="stringliteral">&quot;minor&quot;</span>, 1},</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; {<span class="stringliteral">&quot;patch&quot;</span>, 1}</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; };</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; result[<span class="stringliteral">&quot;platform&quot;</span>] = <span class="stringliteral">&quot;win32&quot;</span>;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="preprocessor">#elif defined __linux__</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; result[<span class="stringliteral">&quot;platform&quot;</span>] = <span class="stringliteral">&quot;linux&quot;</span>;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;<span class="preprocessor">#elif defined __APPLE__</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; result[<span class="stringliteral">&quot;platform&quot;</span>] = <span class="stringliteral">&quot;apple&quot;</span>;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="preprocessor">#elif defined __unix__</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; result[<span class="stringliteral">&quot;platform&quot;</span>] = <span class="stringliteral">&quot;unix&quot;</span>;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; result[<span class="stringliteral">&quot;platform&quot;</span>] = <span class="stringliteral">&quot;unknown&quot;</span>;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;clang&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, __clang_version__}};</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="preprocessor">#elif defined(__ICC) || defined(__INTEL_COMPILER)</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;icc&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, __INTEL_COMPILER}};</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;<span class="preprocessor">#elif defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;gcc&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, std::to_string(__GNUC__) + <span class="stringliteral">&quot;.&quot;</span> + std::to_string(__GNUC_MINOR__) + <span class="stringliteral">&quot;.&quot;</span> + std::to_string(__GNUC_PATCHLEVEL__)}};</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="preprocessor">#elif defined(__HP_cc) || defined(__HP_aCC)</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = <span class="stringliteral">&quot;hp&quot;</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="preprocessor">#elif defined(__IBMCPP__)</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;ilecpp&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, __IBMCPP__}};</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;msvc&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, _MSC_VER}};</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="preprocessor">#elif defined(__PGI)</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;pgcpp&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, __PGI}};</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="preprocessor">#elif defined(__SUNPRO_CC)</span></div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;sunpro&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, __SUNPRO_CC}};</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>] = {{<span class="stringliteral">&quot;family&quot;</span>, <span class="stringliteral">&quot;unknown&quot;</span>}, {<span class="stringliteral">&quot;version&quot;</span>, <span class="stringliteral">&quot;unknown&quot;</span>}};</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>][<span class="stringliteral">&quot;c++&quot;</span>] = std::to_string(__cplusplus);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; result[<span class="stringliteral">&quot;compiler&quot;</span>][<span class="stringliteral">&quot;c++&quot;</span>] = <span class="stringliteral">&quot;unknown&quot;</span>;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">return</span> result;</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="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="comment">// JSON value data types //</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a> = ObjectType&lt;StringType,</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>,</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; std::less&lt;StringType&gt;,</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; AllocatorType&lt;std::pair&lt;<span class="keyword">const</span> StringType,</div><div class="line"><a name="l01282"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49"> 1282</a></span>&#160; basic_json&gt;&gt;&gt;;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374"> 1328</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a> = ArrayType&lt;basic_json, AllocatorType&lt;basic_json&gt;&gt;;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;</div><div class="line"><a name="l01381"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005"> 1381</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> = StringType;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;</div><div class="line"><a name="l01407"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082"> 1407</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a> = BooleanType;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc"> 1479</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a> = NumberIntegerType;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;</div><div class="line"><a name="l01550"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989"> 1550</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a> = NumberUnsignedType;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97"> 1618</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a> = NumberFloatType;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</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="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keyword">static</span> T* create(Args&amp;&amp; ... args)</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; AllocatorType&lt;T&gt; alloc;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keyword">auto</span> deleter = [&amp;](T * object)</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; alloc.deallocate(<span class="keywordtype">object</span>, 1);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; };</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; std::unique_ptr&lt;T, decltype(deleter)&gt; object(alloc.allocate(1), deleter);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</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="l01635"></a><span class="lineno"> 1635</span>&#160; assert(<span class="keywordtype">object</span> != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="keywordflow">return</span> <span class="keywordtype">object</span>.release();</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="comment">// JSON value storage //</span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keyword">union </span>json_value</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>* object;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>* array;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>* string;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a> boolean;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a> number_integer;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a> number_unsigned;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a> number_float;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; json_value() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a> v) noexcept : boolean(v) {}</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a> v) noexcept : number_integer(v) {}</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a> v) noexcept : number_unsigned(v) {}</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a> v) noexcept : number_float(v) {}</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; json_value(value_t t)</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; {</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">switch</span> (t)</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; {</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; {</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <span class="keywordtype">object</span> = create&lt;object_t&gt;();</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; {</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; array = create&lt;array_t&gt;();</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; }</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; {</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <span class="keywordtype">string</span> = create&lt;string_t&gt;(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; }</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; {</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordtype">boolean</span> = <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</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; number_integer = <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a>(0);</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; }</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; {</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; number_unsigned = <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a>(0);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; }</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; {</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; number_float = <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a>(0.0);</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; }</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; {</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; }</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; {</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <span class="keywordflow">if</span> (t == value_t::null)</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; {</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;961c151d2e87f2686a955a9be24d316f1362bf21 2.1.1&quot;</span>)); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; }</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; }</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; }</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; }</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>&amp; value)</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; {</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="keywordtype">string</span> = create&lt;string_t&gt;(value);</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; }</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>&amp; value)</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <span class="keywordtype">object</span> = create&lt;object_t&gt;(value);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; }</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>&amp; value)</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; {</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; array = create&lt;array_t&gt;(value);</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; }</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; };</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <span class="keywordtype">void</span> assert_invariant()<span class="keyword"> const</span></div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; assert(m_type != value_t::object or m_value.object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; assert(m_type != value_t::array or m_value.array != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; assert(m_type != value_t::string or m_value.string != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; }</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; <span class="comment">// JSON parser callback //</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01807"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe"> 1807</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="l01808"></a><span class="lineno"> 1808</span>&#160; {</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; object_start,</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; object_end,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; array_start,</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; array_end,</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; key,</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; value</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; };</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> = std::function&lt;bool(<span class="keywordtype">int</span> depth,</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe">parse_event_t</a> event,</div><div class="line"><a name="l01877"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3"> 1877</a></span>&#160; basic_json&amp; parsed)&gt;;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="comment">// constructors //</span></div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;</div><div class="line"><a name="l01916"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a32124a16dc80729d964d9caf607c2bc8.html#a32124a16dc80729d964d9caf607c2bc8"> 1916</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a32124a16dc80729d964d9caf607c2bc8.html#a32124a16dc80729d964d9caf607c2bc8">basic_json</a>(<span class="keyword">const</span> value_t <a class="code" href="classnlohmann_1_1basic__json.html">value_type</a>)</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; : m_type(value_type), m_value(value_type)</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; assert_invariant();</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; }</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01940"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae9be9e956bfc4658f35d17c6aa72b063.html#ae9be9e956bfc4658f35d17c6aa72b063"> 1940</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ae9be9e956bfc4658f35d17c6aa72b063.html#ae9be9e956bfc4658f35d17c6aa72b063">basic_json</a>(std::nullptr_t = <span class="keyword">nullptr</span>) noexcept</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::null)</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; assert_invariant();</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; }</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CompatibleType, <span class="keyword">typename</span> U = detail::uncvref_t&lt;CompatibleType&gt;,</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; detail::enable_if_t&lt;not std::is_base_of&lt;std::istream, U&gt;::value and</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; not std::is_same&lt;U, basic_json_t&gt;::value and</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; not detail::is_basic_json_nested_type&lt;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; basic_json_t, U&gt;::value and</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; detail::has_to_json&lt;basic_json, U&gt;::value,</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="keywordtype">int</span>&gt; = 0&gt;</div><div class="line"><a name="l02006"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5a6558bfd1be139a638f91f0e09fc737.html#a5a6558bfd1be139a638f91f0e09fc737"> 2006</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a5a6558bfd1be139a638f91f0e09fc737.html#a5a6558bfd1be139a638f91f0e09fc737">basic_json</a>(CompatibleType &amp;&amp; val) noexcept(noexcept(JSONSerializer&lt;U&gt;::to_json(</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; std::declval&lt;basic_json_t&amp;&gt;(), std::forward&lt;CompatibleType&gt;(val))))</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; JSONSerializer&lt;U&gt;::to_json(*<span class="keyword">this</span>, std::forward&lt;CompatibleType&gt;(val));</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; assert_invariant();</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="l02082"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afbad48316e7cd37366ba3ac5d7e5859e.html#afbad48316e7cd37366ba3ac5d7e5859e"> 2082</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_afbad48316e7cd37366ba3ac5d7e5859e.html#afbad48316e7cd37366ba3ac5d7e5859e">basic_json</a>(std::initializer_list&lt;basic_json&gt; init,</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="keywordtype">bool</span> type_deduction = <span class="keyword">true</span>,</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; value_t manual_type = value_t::array)</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; {</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="comment">// check if each element is an array with two elements whose first</span></div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="comment">// element is a string</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; <span class="keywordtype">bool</span> is_an_object = std::all_of(init.begin(), init.end(),</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</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="l02090"></a><span class="lineno"> 2090</span>&#160; {</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</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="l02092"></a><span class="lineno"> 2092</span>&#160; });</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <span class="comment">// adjust type if type deduction is not wanted</span></div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keywordflow">if</span> (not type_deduction)</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; {</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="comment">// if array is wanted, do not create an object though possible</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <span class="keywordflow">if</span> (manual_type == value_t::array)</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; {</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; is_an_object = <span class="keyword">false</span>;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; }</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; <span class="comment">// if object is wanted but impossible, throw an exception</span></div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <span class="keywordflow">if</span> (manual_type == value_t::object and not is_an_object)</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; {</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot create object from initializer list&quot;</span>));</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; }</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;</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; <span class="keywordflow">if</span> (is_an_object)</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; <span class="comment">// the initializer list is a list of pairs -&gt; create object</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</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="l02117"></a><span class="lineno"> 2117</span>&#160; {</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; m_value.object-&gt;emplace(*(element[0].m_value.string), element[1]);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; });</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; }</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; {</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="comment">// the initializer list describes an array -&gt; create array</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; m_value.array = create&lt;array_t&gt;(init);</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; }</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; assert_invariant();</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;</div><div class="line"><a name="l02165"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4a4ec75e4d2845d9bcf7a9e5458e4949.html#a4a4ec75e4d2845d9bcf7a9e5458e4949"> 2165</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_a4a4ec75e4d2845d9bcf7a9e5458e4949.html#a4a4ec75e4d2845d9bcf7a9e5458e4949">array</a>(std::initializer_list&lt;basic_json&gt; init =</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; std::initializer_list&lt;basic_json&gt;())</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="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="l02169"></a><span class="lineno"> 2169</span>&#160; }</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;</div><div class="line"><a name="l02205"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca"> 2205</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_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca">object</a>(std::initializer_list&lt;basic_json&gt; init =</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; std::initializer_list&lt;basic_json&gt;())</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; {</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</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="l02209"></a><span class="lineno"> 2209</span>&#160; }</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;</div><div class="line"><a name="l02229"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab6816ae5100409254ed0a8bc21c387bb.html#ab6816ae5100409254ed0a8bc21c387bb"> 2229</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab6816ae5100409254ed0a8bc21c387bb.html#ab6816ae5100409254ed0a8bc21c387bb">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">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="l02230"></a><span class="lineno"> 2230</span>&#160; : m_type(value_t::array)</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; {</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; m_value.array = create&lt;array_t&gt;(cnt, val);</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; assert_invariant();</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; }</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</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="l02274"></a><span class="lineno"> 2274</span>&#160; std::is_same&lt;InputIT, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</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="l02276"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abe197e9f3184487805cfb5bba6fd5938.html#abe197e9f3184487805cfb5bba6fd5938"> 2276</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_abe197e9f3184487805cfb5bba6fd5938.html#abe197e9f3184487805cfb5bba6fd5938">basic_json</a>(InputIT first, InputIT last)</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; {</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; assert(first.m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; assert(last.m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; <span class="keywordflow">if</span> (first.m_object != last.m_object)</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; {</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterators are not compatible&quot;</span>));</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; }</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; <span class="comment">// copy type from first iterator</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160; m_type = first.m_object-&gt;m_type;</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; <span class="comment">// check if iterator range is complete for primitive values</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; {</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; {</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</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="l02300"></a><span class="lineno"> 2300</span>&#160; {</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;iterators out of range&quot;</span>));</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; }</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; {</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; }</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; }</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; {</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; {</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; m_value.number_integer = first.m_object-&gt;m_value.number_integer;</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; }</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; {</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; m_value.number_unsigned = first.m_object-&gt;m_value.number_unsigned;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; }</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; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; {</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; m_value.number_float = first.m_object-&gt;m_value.number_float;</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; }</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; {</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; m_value.boolean = first.m_object-&gt;m_value.boolean;</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; }</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; {</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; m_value = *first.m_object-&gt;m_value.string;</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; }</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; <span class="keywordflow">case</span> value_t::object:</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; m_value.object = create&lt;object_t&gt;(first.m_it.object_iterator,</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; last.m_it.object_iterator);</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; }</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; {</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; m_value.array = create&lt;array_t&gt;(first.m_it.array_iterator,</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; last.m_it.array_iterator);</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; {</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; JSON_THROW(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="l02361"></a><span class="lineno"> 2361</span>&#160; }</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; }</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; assert_invariant();</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; }</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160; JSON_DEPRECATED</div><div class="line"><a name="l02396"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a757e90574a742ae9cc54c97422fb3043.html#a757e90574a742ae9cc54c97422fb3043"> 2396</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_a757e90574a742ae9cc54c97422fb3043.html#a757e90574a742ae9cc54c97422fb3043">basic_json</a>(std::istream&amp; i, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; {</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; *<span class="keyword">this</span> = parser(i, cb).parse();</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; assert_invariant();</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; }</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; <span class="comment">// other constructors and destructor //</span></div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02428"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af5de621bcf646c332343f9c1e011126c.html#af5de621bcf646c332343f9c1e011126c"> 2428</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_af5de621bcf646c332343f9c1e011126c.html#af5de621bcf646c332343f9c1e011126c">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="l02429"></a><span class="lineno"> 2429</span>&#160; : m_type(other.m_type)</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; {</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <span class="comment">// check of passed value is valid</span></div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; other.assert_invariant();</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; {</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; {</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; m_value = *other.m_value.object;</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; }</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; {</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; m_value = *other.m_value.array;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; }</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; {</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; m_value = *other.m_value.string;</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; }</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; {</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; m_value = other.m_value.boolean;</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; }</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; {</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; m_value = other.m_value.number_integer;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; }</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; {</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; m_value = other.m_value.number_unsigned;</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; }</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; {</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; m_value = other.m_value.number_float;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; }</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; {</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; }</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; }</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; assert_invariant();</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; }</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;</div><div class="line"><a name="l02505"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9a06d1efd50a00f4889f831f851ce124.html#a9a06d1efd50a00f4889f831f851ce124"> 2505</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a9a06d1efd50a00f4889f831f851ce124.html#a9a06d1efd50a00f4889f831f851ce124">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="l02506"></a><span class="lineno"> 2506</span>&#160; : m_type(std::move(other.m_type)),</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160; m_value(std::move(other.m_value))</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160; {</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; <span class="comment">// check that passed value is valid</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; other.assert_invariant();</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; <span class="comment">// invalidate payload</span></div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; other.m_type = value_t::null;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; other.m_value = {};</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; assert_invariant();</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; }</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;</div><div class="line"><a name="l02542"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aab256df8c5594ec693035822fa1e2904.html#aab256df8c5594ec693035822fa1e2904"> 2542</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_aab256df8c5594ec693035822fa1e2904.html#aab256df8c5594ec693035822fa1e2904">operator=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> other) noexcept (</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; std::is_nothrow_move_constructible&lt;value_t&gt;::value and</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; std::is_nothrow_move_assignable&lt;value_t&gt;::value and</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; std::is_nothrow_move_constructible&lt;json_value&gt;::value and</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; std::is_nothrow_move_assignable&lt;json_value&gt;::value</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; )</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; {</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; <span class="comment">// check that passed value is valid</span></div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; other.assert_invariant();</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; swap(m_type, other.m_type);</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; swap(m_value, other.m_value);</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; assert_invariant();</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160; }</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;</div><div class="line"><a name="l02575"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a42347bbce75ba5571e292a3540af30e0.html#a42347bbce75ba5571e292a3540af30e0"> 2575</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a42347bbce75ba5571e292a3540af30e0.html#a42347bbce75ba5571e292a3540af30e0">~basic_json</a>()</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; assert_invariant();</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; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; {</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; {</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; AllocatorType&lt;object_t&gt; alloc;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; alloc.destroy(m_value.object);</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; alloc.deallocate(m_value.object, 1);</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; }</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; {</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; AllocatorType&lt;array_t&gt; alloc;</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; alloc.destroy(m_value.array);</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; alloc.deallocate(m_value.array, 1);</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; }</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">case</span> value_t::string:</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; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; }</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; {</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; <span class="comment">// all other types need no specific destructor</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; <span class="keywordflow">break</span>;</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; }</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;</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; <span class="keyword">public</span>:</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <span class="comment">// object inspection //</span></div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422.html#a5319dc1bb9dfe19ce7ff559aaded3422"> 2647</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422.html#a5319dc1bb9dfe19ce7ff559aaded3422">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="l02648"></a><span class="lineno"> 2648</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; std::stringstream ss;</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <span class="keywordflow">if</span> (indent &gt;= 0)</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; {</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; dump(ss, <span class="keyword">true</span>, static_cast&lt;unsigned int&gt;(indent));</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; }</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; {</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160; dump(ss, <span class="keyword">false</span>, 0);</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160; }</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">return</span> ss.str();</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="l02681"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7"> 2681</a></span>&#160; constexpr value_t <a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>() const noexcept</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; {</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <span class="keywordflow">return</span> m_type;</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;</div><div class="line"><a name="l02711"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6362b88718eb5c6d4fed6a61eed44b95.html#a6362b88718eb5c6d4fed6a61eed44b95"> 2711</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a6362b88718eb5c6d4fed6a61eed44b95.html#a6362b88718eb5c6d4fed6a61eed44b95">is_primitive</a>() const noexcept</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; {</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <span class="keywordflow">return</span> is_null() or is_string() or is_boolean() or is_number();</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;</div><div class="line"><a name="l02738"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9f68a0af820c3ced7f9d17851ce4c22d.html#a9f68a0af820c3ced7f9d17851ce4c22d"> 2738</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a9f68a0af820c3ced7f9d17851ce4c22d.html#a9f68a0af820c3ced7f9d17851ce4c22d">is_structured</a>() const noexcept</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; {</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160; <span class="keywordflow">return</span> is_array() or is_object();</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; }</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;</div><div class="line"><a name="l02760"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8faa039ca82427ed29c486ffd00600c3.html#a8faa039ca82427ed29c486ffd00600c3"> 2760</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a8faa039ca82427ed29c486ffd00600c3.html#a8faa039ca82427ed29c486ffd00600c3">is_null</a>() const noexcept</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; <span class="keywordflow">return</span> m_type == value_t::null;</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160; }</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;</div><div class="line"><a name="l02782"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a943e8cb182d0f2365c76d64b42eaa6fd.html#a943e8cb182d0f2365c76d64b42eaa6fd"> 2782</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a943e8cb182d0f2365c76d64b42eaa6fd.html#a943e8cb182d0f2365c76d64b42eaa6fd">is_boolean</a>() const 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> m_type == value_t::boolean;</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="l02812"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2b9852390abb4b1ef5fac6984e2fc0f3.html#a2b9852390abb4b1ef5fac6984e2fc0f3"> 2812</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a2b9852390abb4b1ef5fac6984e2fc0f3.html#a2b9852390abb4b1ef5fac6984e2fc0f3">is_number</a>() const 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_integer() or is_number_float();</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="l02841"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abac8af76067f1e8fdca9052882c74428.html#abac8af76067f1e8fdca9052882c74428"> 2841</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_abac8af76067f1e8fdca9052882c74428.html#abac8af76067f1e8fdca9052882c74428">is_number_integer</a>() const noexcept</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="keywordflow">return</span> m_type == value_t::number_integer or m_type == value_t::number_unsigned;</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; }</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;</div><div class="line"><a name="l02869"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abc7378cba0613a78b9aad1c8e7044bb0.html#abc7378cba0613a78b9aad1c8e7044bb0"> 2869</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_abc7378cba0613a78b9aad1c8e7044bb0.html#abc7378cba0613a78b9aad1c8e7044bb0">is_number_unsigned</a>() const noexcept</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160; {</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160; <span class="keywordflow">return</span> m_type == value_t::number_unsigned;</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; }</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a33b4bf898b857c962e798fc7f6e86e70.html#a33b4bf898b857c962e798fc7f6e86e70"> 2897</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a33b4bf898b857c962e798fc7f6e86e70.html#a33b4bf898b857c962e798fc7f6e86e70">is_number_float</a>() const noexcept</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; {</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; <span class="keywordflow">return</span> m_type == value_t::number_float;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; }</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;</div><div class="line"><a name="l02919"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c.html#af8f511af124e82e4579f444b4175787c"> 2919</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c.html#af8f511af124e82e4579f444b4175787c">is_object</a>() const noexcept</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160; {</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160; <span class="keywordflow">return</span> m_type == value_t::object;</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160; }</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65.html#aef9ce5dd2381caee1f8ddcdb5bdd9c65"> 2941</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65.html#aef9ce5dd2381caee1f8ddcdb5bdd9c65">is_array</a>() const noexcept</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; {</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160; <span class="keywordflow">return</span> m_type == value_t::array;</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160; }</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;</div><div class="line"><a name="l02963"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a69b596a4a6683b362095c9a139637396.html#a69b596a4a6683b362095c9a139637396"> 2963</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a69b596a4a6683b362095c9a139637396.html#a69b596a4a6683b362095c9a139637396">is_string</a>() const noexcept</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; {</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160; <span class="keywordflow">return</span> m_type == value_t::string;</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; }</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;</div><div class="line"><a name="l02990"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aabe623bc8304c2ba92d96d91f390fab4.html#aabe623bc8304c2ba92d96d91f390fab4"> 2990</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aabe623bc8304c2ba92d96d91f390fab4.html#aabe623bc8304c2ba92d96d91f390fab4">is_discarded</a>() const noexcept</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; {</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; <span class="keywordflow">return</span> m_type == value_t::discarded;</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; }</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;</div><div class="line"><a name="l03013"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a26ef3058e249f82a04f8ec18f7419027.html#a26ef3058e249f82a04f8ec18f7419027"> 3013</a></span>&#160; constexpr <span class="keyword">operator</span> value_t() const noexcept</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; {</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; <span class="keywordflow">return</span> m_type;</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; }</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160; <span class="comment">// value access //</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a> get_impl(<a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>* <span class="comment">/*unused*/</span>)<span class="keyword"> const</span></div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; <span class="keywordflow">if</span> (is_boolean())</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; {</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; <span class="keywordflow">return</span> m_value.boolean;</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; }</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;type must be boolean, but is &quot;</span> + type_name()));</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; }</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; {</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; }</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; {</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160; }</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; {</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; <span class="keywordflow">return</span> is_array() ? m_value.array : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; }</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; {</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; <span class="keywordflow">return</span> is_array() ? m_value.array : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; }</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>* <span class="comment">/*unused*/</span>) noexcept</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; <span class="keywordflow">return</span> is_string() ? m_value.string : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; }</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; {</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160; <span class="keywordflow">return</span> is_string() ? m_value.string : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; }</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; {</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; <span class="keywordflow">return</span> is_boolean() ? &amp;m_value.boolean : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; }</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">boolean_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; {</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160; <span class="keywordflow">return</span> is_boolean() ? &amp;m_value.boolean : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; }</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; {</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</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="l03088"></a><span class="lineno"> 3088</span>&#160; }</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160; {</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</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="l03094"></a><span class="lineno"> 3094</span>&#160; }</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160; {</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</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="l03100"></a><span class="lineno"> 3100</span>&#160; }</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; {</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</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="l03106"></a><span class="lineno"> 3106</span>&#160; }</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a>* <span class="comment">/*unused*/</span>) noexcept</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160; {</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</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="l03112"></a><span class="lineno"> 3112</span>&#160; }</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a>* <span class="comment">/*unused*/</span>) <span class="keyword">const</span> noexcept</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; <span class="keywordflow">return</span> is_number_float() ? &amp;m_value.number_float : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160; }</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</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="l03132"></a><span class="lineno"> 3132</span>&#160; <span class="keyword">static</span> ReferenceType get_ref_impl(ThisType&amp; obj)</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; {</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160; <span class="comment">// helper type</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</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="l03136"></a><span class="lineno"> 3136</span>&#160;</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; <span class="comment">// delegate the call to get_ptr&lt;&gt;()</span></div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160; <span class="keyword">auto</span> ptr = obj.template get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160; <span class="keywordflow">if</span> (ptr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; {</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; }</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;incompatible ReferenceType for get_ref, actual type is &quot;</span> +</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; obj.type_name()));</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160; }</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; <span class="keyword">template</span> &lt;</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; <span class="keyword">typename</span> BasicJsonType,</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; detail::enable_if_t&lt;std::is_same&lt;typename std::remove_const&lt;BasicJsonType&gt;::type,</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json_t</a>&gt;::value,</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160; <span class="keywordtype">int</span>&gt; = 0 &gt;</div><div class="line"><a name="l03173"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6b187a22994c12c8cae0dd5ee99dc85e.html#a6b187a22994c12c8cae0dd5ee99dc85e"> 3173</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <span class="keyword">get</span>() <span class="keyword">const</span></div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160; {</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; }</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160; <span class="keyword">template</span> &lt;</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160; <span class="keyword">typename</span> ValueTypeCV,</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160; <span class="keyword">typename</span> ValueType = detail::uncvref_t&lt;ValueTypeCV&gt;,</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160; detail::enable_if_t &lt;</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160; not std::is_same&lt;basic_json_t, ValueType&gt;::value and</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160; detail::has_from_json&lt;basic_json_t, ValueType&gt;::value and</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160; not detail::has_non_default_from_json&lt;basic_json_t, ValueType&gt;::value,</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160; <span class="keywordtype">int</span> &gt; = 0 &gt;</div><div class="line"><a name="l03225"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a16f9445f7629f634221a42b967cdcd43.html#a16f9445f7629f634221a42b967cdcd43"> 3225</a></span>&#160; ValueType <span class="keyword">get</span>() <span class="keyword">const</span> noexcept(noexcept(</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160; JSONSerializer&lt;ValueType&gt;::from_json(std::declval&lt;const basic_json_t&amp;&gt;(), std::declval&lt;ValueType&amp;&gt;())))</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160; {</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160; <span class="comment">// we cannot static_assert on ValueTypeCV being non-const, because</span></div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160; <span class="comment">// there is support for get&lt;const basic_json_t&gt;(), which is why we</span></div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160; <span class="comment">// still need the uncvref</span></div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160; static_assert(not std::is_reference&lt;ValueTypeCV&gt;::value,</div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160; <span class="stringliteral">&quot;get() cannot be used with reference types, you might want to use get_ref()&quot;</span>);</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160; static_assert(std::is_default_constructible&lt;ValueType&gt;::value,</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160; <span class="stringliteral">&quot;types must be DefaultConstructible when used with get()&quot;</span>);</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160; ValueType ret;</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160; JSONSerializer&lt;ValueType&gt;::from_json(*<span class="keyword">this</span>, ret);</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160; }</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160; <span class="keyword">template</span> &lt;</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160; <span class="keyword">typename</span> ValueTypeCV,</div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160; <span class="keyword">typename</span> ValueType = detail::uncvref_t&lt;ValueTypeCV&gt;,</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160; detail::enable_if_t&lt;not std::is_same&lt;basic_json_t, ValueType&gt;::value and</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160; detail::has_non_default_from_json&lt;<a class="code" href="classnlohmann_1_1basic__json.html">basic_json_t</a>,</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160; ValueType&gt;::value, <span class="keywordtype">int</span>&gt; = 0 &gt;</div><div class="line"><a name="l03278"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab728c42baff9d11409d4f99d9f95d6af.html#ab728c42baff9d11409d4f99d9f95d6af"> 3278</a></span>&#160; ValueType <span class="keyword">get</span>() <span class="keyword">const</span> noexcept(noexcept(</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160; JSONSerializer&lt;ValueTypeCV&gt;::from_json(std::declval&lt;const basic_json_t&amp;&gt;())))</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160; {</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160; static_assert(not std::is_reference&lt;ValueTypeCV&gt;::value,</div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160; <span class="stringliteral">&quot;get() cannot be used with reference types, you might want to use get_ref()&quot;</span>);</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160; <span class="keywordflow">return</span> JSONSerializer&lt;ValueTypeCV&gt;::from_json(*<span class="keyword">this</span>);</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160; }</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</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="l03314"></a><span class="lineno"> 3314</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03315"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a64135c19425f00b346d8ed63a23db334.html#a64135c19425f00b346d8ed63a23db334"> 3315</a></span>&#160; PointerType <span class="keyword">get</span>() noexcept</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160; {</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160; <span class="comment">// delegate the call to get_ptr</span></div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160; <span class="keywordflow">return</span> get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160; }</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</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="l03326"></a><span class="lineno"> 3326</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03327"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a44a090c15a67b9f02e579b6e17ef0e1b.html#a44a090c15a67b9f02e579b6e17ef0e1b"> 3327</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="l03328"></a><span class="lineno"> 3328</span>&#160; {</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160; <span class="comment">// delegate the call to get_ptr</span></div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160; <span class="keywordflow">return</span> get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160; }</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</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="l03360"></a><span class="lineno"> 3360</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03361"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aefa46bd2d96bb77a38d1c8b431eab44f.html#aefa46bd2d96bb77a38d1c8b431eab44f"> 3361</a></span>&#160; PointerType <a class="code" href="classnlohmann_1_1basic__json_aefa46bd2d96bb77a38d1c8b431eab44f.html#aefa46bd2d96bb77a38d1c8b431eab44f">get_ptr</a>() noexcept</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160; {</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160; <span class="comment">// get the type of the PointerType (remove pointer and const)</span></div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</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="l03365"></a><span class="lineno"> 3365</span>&#160; std::remove_pointer&lt;<span class="keyword">typename</span></div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160; std::remove_const&lt;PointerType&gt;::type&gt;::type&gt;::type;</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160; <span class="comment">// make sure the type matches the allowed types</span></div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160; static_assert(</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160; std::is_same&lt;object_t, pointee_t&gt;::value</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160; or std::is_same&lt;array_t, pointee_t&gt;::value</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160; or std::is_same&lt;string_t, pointee_t&gt;::value</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160; or std::is_same&lt;boolean_t, pointee_t&gt;::value</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160; or std::is_same&lt;number_integer_t, pointee_t&gt;::value</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160; or std::is_same&lt;number_unsigned_t, pointee_t&gt;::value</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160; or std::is_same&lt;number_float_t, pointee_t&gt;::value</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160; , <span class="stringliteral">&quot;incompatible pointer type&quot;</span>);</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160; <span class="comment">// delegate the call to get_impl_ptr&lt;&gt;()</span></div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</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="l03380"></a><span class="lineno"> 3380</span>&#160; }</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</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="l03387"></a><span class="lineno"> 3387</span>&#160; std::is_pointer&lt;PointerType&gt;::value and</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</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="l03389"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a14abd48803a8d5447faf5f583fa8e2a1.html#a14abd48803a8d5447faf5f583fa8e2a1"> 3389</a></span>&#160; constexpr <span class="keyword">const</span> PointerType <a class="code" href="classnlohmann_1_1basic__json_a14abd48803a8d5447faf5f583fa8e2a1.html#a14abd48803a8d5447faf5f583fa8e2a1">get_ptr</a>() const noexcept</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="comment">// get the type of the PointerType (remove pointer and const)</span></div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</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="l03393"></a><span class="lineno"> 3393</span>&#160; std::remove_pointer&lt;<span class="keyword">typename</span></div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160; std::remove_const&lt;PointerType&gt;::type&gt;::type&gt;::type;</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160; <span class="comment">// make sure the type matches the allowed types</span></div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160; static_assert(</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160; std::is_same&lt;object_t, pointee_t&gt;::value</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160; or std::is_same&lt;array_t, pointee_t&gt;::value</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160; or std::is_same&lt;string_t, pointee_t&gt;::value</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160; or std::is_same&lt;boolean_t, pointee_t&gt;::value</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160; or std::is_same&lt;number_integer_t, pointee_t&gt;::value</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160; or std::is_same&lt;number_unsigned_t, pointee_t&gt;::value</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160; or std::is_same&lt;number_float_t, pointee_t&gt;::value</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160; , <span class="stringliteral">&quot;incompatible pointer type&quot;</span>);</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160; <span class="comment">// delegate the call to get_impl_ptr&lt;&gt;() const</span></div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</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="l03408"></a><span class="lineno"> 3408</span>&#160; }</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</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="l03437"></a><span class="lineno"> 3437</span>&#160; std::is_reference&lt;ReferenceType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03438"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afbd800010b67619463c0fce6e74f7878.html#afbd800010b67619463c0fce6e74f7878"> 3438</a></span>&#160; ReferenceType <a class="code" href="classnlohmann_1_1basic__json_afbd800010b67619463c0fce6e74f7878.html#afbd800010b67619463c0fce6e74f7878">get_ref</a>()</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160; {</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160; <span class="comment">// delegate call to get_ref_impl</span></div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160; <span class="keywordflow">return</span> get_ref_impl&lt;ReferenceType&gt;(*this);</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160; }</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</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="l03449"></a><span class="lineno"> 3449</span>&#160; std::is_reference&lt;ReferenceType&gt;::value and</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</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="l03451"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac382f3d2bc6a5d52d936e4e40593f03b.html#ac382f3d2bc6a5d52d936e4e40593f03b"> 3451</a></span>&#160; ReferenceType <a class="code" href="classnlohmann_1_1basic__json_ac382f3d2bc6a5d52d936e4e40593f03b.html#ac382f3d2bc6a5d52d936e4e40593f03b">get_ref</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160; <span class="comment">// delegate call to get_ref_impl</span></div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160; <span class="keywordflow">return</span> get_ref_impl&lt;ReferenceType&gt;(*this);</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160; }</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</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="l03486"></a><span class="lineno"> 3486</span>&#160; not std::is_pointer&lt;ValueType&gt;::value and</div><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160; not std::is_same&lt;ValueType, typename string_t::value_type&gt;::value</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;<span class="preprocessor">#ifndef _MSC_VER // fix for issue #167 operator&lt;&lt; ambiguity under VS2015</span></div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</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="l03490"></a><span class="lineno"> 3490</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160; , <span class="keywordtype">int</span> &gt;::type = 0 &gt;</div><div class="line"><a name="l03492"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1f1d4bc973c5b866db3d96e14d2c9f3f.html#a1f1d4bc973c5b866db3d96e14d2c9f3f"> 3492</a></span>&#160; <span class="keyword">operator</span> ValueType()<span class="keyword"> const</span></div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160; <span class="comment">// delegate the call to get&lt;&gt;() const</span></div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160; <span class="keywordflow">return</span> get&lt;ValueType&gt;();</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160; }</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160;</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160; <span class="comment">// element access //</span></div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160;</div><div class="line"><a name="l03531"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8"> 3531</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(<a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> idx)</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; {</div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160; <span class="comment">// at only works for arrays</span></div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160; {</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160; JSON_TRY</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160; {</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;at(idx);</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160; }</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160; JSON_CATCH (std::out_of_range&amp;)</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160; {</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160; JSON_THROW(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="l03544"></a><span class="lineno"> 3544</span>&#160; }</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160; }</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160; {</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name()));</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160; }</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160; }</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;</div><div class="line"><a name="l03574"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab157adb4de8475b452da9ebf04f2de15.html#ab157adb4de8475b452da9ebf04f2de15"> 3574</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_ab157adb4de8475b452da9ebf04f2de15.html#ab157adb4de8475b452da9ebf04f2de15">at</a>(<a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> idx)<span class="keyword"> const</span></div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160; <span class="comment">// at only works for arrays</span></div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160; {</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160; JSON_TRY</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160; {</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;at(idx);</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; }</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160; JSON_CATCH (std::out_of_range&amp;)</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">// create better exception explanation</span></div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160; JSON_THROW(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="l03587"></a><span class="lineno"> 3587</span>&#160; }</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160; }</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160; {</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name()));</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; }</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;</div><div class="line"><a name="l03621"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a93403e803947b86f4da2d1fb3345cf2c.html#a93403e803947b86f4da2d1fb3345cf2c"> 3621</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a93403e803947b86f4da2d1fb3345cf2c.html#a93403e803947b86f4da2d1fb3345cf2c">at</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160; {</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160; {</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160; JSON_TRY</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160; {</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;at(key);</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160; }</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160; JSON_CATCH (std::out_of_range&amp;)</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160; {</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160; JSON_THROW(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="l03634"></a><span class="lineno"> 3634</span>&#160; }</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160; }</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160; {</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name()));</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; }</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;</div><div class="line"><a name="l03668"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_acac9d438c9bb12740dcdb01069293a34.html#acac9d438c9bb12740dcdb01069293a34"> 3668</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_acac9d438c9bb12740dcdb01069293a34.html#acac9d438c9bb12740dcdb01069293a34">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="l03669"></a><span class="lineno"> 3669</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160; {</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160; JSON_TRY</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160; {</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;at(key);</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160; }</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160; JSON_CATCH (std::out_of_range&amp;)</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160; {</div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160; JSON_THROW(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="l03681"></a><span class="lineno"> 3681</span>&#160; }</div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160; }</div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160; {</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name()));</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160; }</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160; }</div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160;</div><div class="line"><a name="l03714"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac871e3b03fb2eeca9a8de4db2bea760f.html#ac871e3b03fb2eeca9a8de4db2bea760f"> 3714</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_ac871e3b03fb2eeca9a8de4db2bea760f.html#ac871e3b03fb2eeca9a8de4db2bea760f">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> idx)</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160; {</div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160; <span class="comment">// implicitly convert null value to an empty array</span></div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160; <span class="keywordflow">if</span> (is_null())</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; m_type = value_t::array;</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160; m_value.<a class="code" href="classnlohmann_1_1basic__json_a4a4ec75e4d2845d9bcf7a9e5458e4949.html#a4a4ec75e4d2845d9bcf7a9e5458e4949">array</a> = create&lt;array_t&gt;();</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160; assert_invariant();</div><div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>&#160; }</div><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160;</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160; <span class="comment">// operator[] only works for arrays</span></div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160; {</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160; <span class="comment">// fill up array with null values if given idx is outside range</span></div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160; <span class="keywordflow">if</span> (idx &gt;= m_value.array-&gt;size())</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160; {</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160; m_value.array-&gt;insert(m_value.array-&gt;end(),</div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160; idx - m_value.array-&gt;size() + 1,</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>());</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160; }</div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;operator[](idx);</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160; }</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160;</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</div><div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160; }</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160;</div><div class="line"><a name="l03760"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9cb592cd85c14f3e845e30d51cf17efb.html#a9cb592cd85c14f3e845e30d51cf17efb"> 3760</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a9cb592cd85c14f3e845e30d51cf17efb.html#a9cb592cd85c14f3e845e30d51cf17efb">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> idx)<span class="keyword"> const</span></div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160; <span class="comment">// const operator[] only works for arrays</span></div><div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160; {</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a4a4ec75e4d2845d9bcf7a9e5458e4949.html#a4a4ec75e4d2845d9bcf7a9e5458e4949">array</a>-&gt;operator[](idx);</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160; }</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160;</div><div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</div><div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160; }</div><div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160;</div><div class="line"><a name="l03798"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a233b02b0839ef798942dd46157cc0fe6.html#a233b02b0839ef798942dd46157cc0fe6"> 3798</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a233b02b0839ef798942dd46157cc0fe6.html#a233b02b0839ef798942dd46157cc0fe6">operator[]</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160; {</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160; <span class="comment">// implicitly convert null value to an empty object</span></div><div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160; {</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160; m_value.<a class="code" href="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca">object</a> = create&lt;object_t&gt;();</div><div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160; assert_invariant();</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160; }</div><div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160;</div><div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160; <span class="comment">// operator[] only works for objects</span></div><div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160; {</div><div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;operator[](key);</div><div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160; }</div><div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160;</div><div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</div><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160; }</div><div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160;</div><div class="line"><a name="l03847"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab2318780e5ae692039e816b6ac32c91e.html#ab2318780e5ae692039e816b6ac32c91e"> 3847</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_ab2318780e5ae692039e816b6ac32c91e.html#ab2318780e5ae692039e816b6ac32c91e">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="l03848"></a><span class="lineno"> 3848</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160; <span class="comment">// const operator[] only works for objects</span></div><div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160; {</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160; assert(m_value.object-&gt;find(key) != m_value.object-&gt;end());</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(key)-&gt;second;</div><div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160; }</div><div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160;</div><div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</div><div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160; }</div><div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160;</div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</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="l03887"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1416bbec9d9a8eeca21c213cf5290868.html#a1416bbec9d9a8eeca21c213cf5290868"> 3887</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a1416bbec9d9a8eeca21c213cf5290868.html#a1416bbec9d9a8eeca21c213cf5290868">operator[]</a>(T * (&amp;key)[n])</div><div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160; {</div><div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160; <span class="keywordflow">return</span> operator[](static_cast&lt;const T&gt;(key));</div><div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>&#160; }</div><div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>&#160;</div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</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="l03922"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab17b18f161ecd014074790e25449094a.html#ab17b18f161ecd014074790e25449094a"> 3922</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_ab17b18f161ecd014074790e25449094a.html#ab17b18f161ecd014074790e25449094a">operator[]</a>(T * (&amp;key)[n])<span class="keyword"> const</span></div><div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160; <span class="keywordflow">return</span> operator[](static_cast&lt;const T&gt;(key));</div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160; }</div><div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160;</div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03955"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abb8eaa633584b5aff9c8fcd242f25ca8.html#abb8eaa633584b5aff9c8fcd242f25ca8"> 3955</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_abb8eaa633584b5aff9c8fcd242f25ca8.html#abb8eaa633584b5aff9c8fcd242f25ca8">operator[]</a>(T* key)</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="comment">// implicitly convert null to object</span></div><div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160; <span class="keywordflow">if</span> (is_null())</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; m_type = value_t::object;</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160; assert_invariant();</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160; }</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160;</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160; <span class="keywordflow">if</span> (is_object())</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; <span class="keywordflow">return</span> m_value.object-&gt;operator[](key);</div><div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160; }</div><div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160;</div><div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</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;</div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l04005"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a26554213cbb1722accc460ce348c860a.html#a26554213cbb1722accc460ce348c860a"> 4005</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a26554213cbb1722accc460ce348c860a.html#a26554213cbb1722accc460ce348c860a">operator[]</a>(T* key)<span class="keyword"> const</span></div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>&#160; {</div><div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160; assert(m_value.object-&gt;find(key) != m_value.object-&gt;end());</div><div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(key)-&gt;second;</div><div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160; }</div><div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>&#160;</div><div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name()));</div><div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160; }</div><div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>&#160;</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</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="l04066"></a><span class="lineno"> 4066</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="l04067"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af9c51328fbe1da75eca750be3009917a.html#af9c51328fbe1da75eca750be3009917a"> 4067</a></span>&#160; ValueType <a class="code" href="classnlohmann_1_1basic__json_af9c51328fbe1da75eca750be3009917a.html#af9c51328fbe1da75eca750be3009917a">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="l04068"></a><span class="lineno"> 4068</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160; {</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160; <span class="comment">// if key is found, return value and given default value otherwise</span></div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = find(key);</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160; <span class="keywordflow">if</span> (it != end())</div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160; {</div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160; <span class="keywordflow">return</span> *it;</div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160; }</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; <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160; }</div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160; {</div><div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use value() with &quot;</span> + type_name()));</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160; }</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="l04091"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad6a18403e7fbac9c4efd06facc71fc88.html#ad6a18403e7fbac9c4efd06facc71fc88"> 4091</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_ad6a18403e7fbac9c4efd06facc71fc88.html#ad6a18403e7fbac9c4efd06facc71fc88">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="l04092"></a><span class="lineno"> 4092</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160; <span class="keywordflow">return</span> value(key, <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>(default_value));</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160; }</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160;</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</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="l04138"></a><span class="lineno"> 4138</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="l04139"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab7df4291dda0a80d86f74427cc3993ba.html#ab7df4291dda0a80d86f74427cc3993ba"> 4139</a></span>&#160; ValueType <a class="code" href="classnlohmann_1_1basic__json_ab7df4291dda0a80d86f74427cc3993ba.html#ab7df4291dda0a80d86f74427cc3993ba">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="l04140"></a><span class="lineno"> 4140</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; <span class="keywordflow">if</span> (is_object())</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; <span class="comment">// if pointer resolves a value, return it or use default value</span></div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160; JSON_TRY</div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160; {</div><div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160; }</div><div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160; JSON_CATCH (std::out_of_range&amp;)</div><div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160; {</div><div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160; <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160; }</div><div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160; }</div><div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160;</div><div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use value() with &quot;</span> + type_name()));</div><div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160; }</div><div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160;</div><div class="line"><a name="l04162"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a869c900ee02cf1a68988dcce3b375424.html#a869c900ee02cf1a68988dcce3b375424"> 4162</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_a869c900ee02cf1a68988dcce3b375424.html#a869c900ee02cf1a68988dcce3b375424">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="l04163"></a><span class="lineno"> 4163</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>&#160; <span class="keywordflow">return</span> value(ptr, <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>(default_value));</div><div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160; }</div><div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160;</div><div class="line"><a name="l04192"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3acba9c6ceb7214e565fe08c3ba5b352.html#a3acba9c6ceb7214e565fe08c3ba5b352"> 4192</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a3acba9c6ceb7214e565fe08c3ba5b352.html#a3acba9c6ceb7214e565fe08c3ba5b352">front</a>()</div><div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160; {</div><div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>&#160; <span class="keywordflow">return</span> *begin();</div><div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160; }</div><div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160;</div><div class="line"><a name="l04200"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4b1fb3671ade9afc8d33b2c9510acbfc.html#a4b1fb3671ade9afc8d33b2c9510acbfc"> 4200</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a4b1fb3671ade9afc8d33b2c9510acbfc.html#a4b1fb3671ade9afc8d33b2c9510acbfc">front</a>()<span class="keyword"> const</span></div><div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>&#160; <span class="keywordflow">return</span> *cbegin();</div><div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>&#160; }</div><div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>&#160;</div><div class="line"><a name="l04235"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a011397134847f36db0ed7d7a93753677.html#a011397134847f36db0ed7d7a93753677"> 4235</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a011397134847f36db0ed7d7a93753677.html#a011397134847f36db0ed7d7a93753677">back</a>()</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; <span class="keyword">auto</span> tmp = end();</div><div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>&#160; --tmp;</div><div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>&#160; <span class="keywordflow">return</span> *tmp;</div><div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>&#160; }</div><div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>&#160;</div><div class="line"><a name="l04245"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a83fe4a151b3a591f357527d5d9aa1b9f.html#a83fe4a151b3a591f357527d5d9aa1b9f"> 4245</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a83fe4a151b3a591f357527d5d9aa1b9f.html#a83fe4a151b3a591f357527d5d9aa1b9f">back</a>()<span class="keyword"> const</span></div><div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>&#160; <span class="keyword">auto</span> tmp = cend();</div><div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>&#160; --tmp;</div><div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>&#160; <span class="keywordflow">return</span> *tmp;</div><div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>&#160; }</div><div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>&#160;</div><div class="line"><a name="l04297"></a><span class="lineno"> 4297</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="l04298"></a><span class="lineno"> 4298</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l04299"></a><span class="lineno"> 4299</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="l04300"></a><span class="lineno"> 4300</span>&#160; = 0&gt;</div><div class="line"><a name="l04301"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed.html#a068a16e76be178e83da6a192916923ed"> 4301</a></span>&#160; IteratorType <a class="code" href="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed.html#a068a16e76be178e83da6a192916923ed">erase</a>(IteratorType pos)</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; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != pos.m_object)</div><div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>&#160; {</div><div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>));</div><div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>&#160; }</div><div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>&#160;</div><div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>&#160; IteratorType result = end();</div><div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>&#160;</div><div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>&#160; <span class="keywordflow">switch</span> (m_type)</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">case</span> value_t::boolean:</div><div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>&#160; {</div><div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>&#160; <span class="keywordflow">if</span> (not pos.m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>&#160; {</div><div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;iterator out of range&quot;</span>));</div><div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>&#160; }</div><div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>&#160;</div><div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>&#160; {</div><div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>&#160; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>&#160; m_value.string = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>&#160; }</div><div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>&#160;</div><div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>&#160; m_type = value_t::null;</div><div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>&#160; assert_invariant();</div><div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>&#160; }</div><div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>&#160;</div><div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>&#160; {</div><div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>&#160; result.m_it.object_iterator = m_value.object-&gt;erase(pos.m_it.object_iterator);</div><div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>&#160; }</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; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>&#160; {</div><div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>&#160; result.m_it.array_iterator = m_value.array-&gt;erase(pos.m_it.array_iterator);</div><div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>&#160; }</div><div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>&#160;</div><div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>&#160; {</div><div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name()));</div><div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>&#160; }</div><div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>&#160; }</div><div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>&#160;</div><div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>&#160; }</div><div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>&#160;</div><div class="line"><a name="l04404"></a><span class="lineno"> 4404</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="l04405"></a><span class="lineno"> 4405</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l04406"></a><span class="lineno"> 4406</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="l04407"></a><span class="lineno"> 4407</span>&#160; = 0&gt;</div><div class="line"><a name="l04408"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4b3f7eb2d4625d95a51fbbdceb7c5f39.html#a4b3f7eb2d4625d95a51fbbdceb7c5f39"> 4408</a></span>&#160; IteratorType <a class="code" href="classnlohmann_1_1basic__json_a4b3f7eb2d4625d95a51fbbdceb7c5f39.html#a4b3f7eb2d4625d95a51fbbdceb7c5f39">erase</a>(IteratorType first, IteratorType last)</div><div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>&#160; {</div><div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>&#160; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l04411"></a><span class="lineno"> 4411</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="l04412"></a><span class="lineno"> 4412</span>&#160; {</div><div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterators do not fit current value&quot;</span>));</div><div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>&#160; }</div><div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>&#160;</div><div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>&#160; IteratorType result = end();</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; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>&#160; {</div><div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>&#160; {</div><div class="line"><a name="l04426"></a><span class="lineno"> 4426</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="l04427"></a><span class="lineno"> 4427</span>&#160; {</div><div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;iterators out of range&quot;</span>));</div><div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>&#160; }</div><div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>&#160;</div><div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l04432"></a><span class="lineno"> 4432</span>&#160; {</div><div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>&#160; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>&#160; m_value.string = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>&#160; }</div><div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>&#160;</div><div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>&#160; m_type = value_t::null;</div><div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>&#160; assert_invariant();</div><div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>&#160; }</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">case</span> value_t::object:</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; result.m_it.object_iterator = m_value.object-&gt;erase(first.m_it.object_iterator,</div><div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>&#160; last.m_it.object_iterator);</div><div class="line"><a name="l04448"></a><span class="lineno"> 4448</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>&#160; }</div><div class="line"><a name="l04450"></a><span class="lineno"> 4450</span>&#160;</div><div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>&#160; {</div><div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>&#160; result.m_it.array_iterator = m_value.array-&gt;erase(first.m_it.array_iterator,</div><div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>&#160; last.m_it.array_iterator);</div><div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>&#160; }</div><div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>&#160;</div><div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>&#160; {</div><div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name()));</div><div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>&#160; }</div><div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>&#160; }</div><div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>&#160;</div><div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04465"></a><span class="lineno"> 4465</span>&#160; }</div><div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>&#160;</div><div class="line"><a name="l04496"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2f8484d69c55d8f2a9697a7bec29362a.html#a2f8484d69c55d8f2a9697a7bec29362a"> 4496</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a2f8484d69c55d8f2a9697a7bec29362a.html#a2f8484d69c55d8f2a9697a7bec29362a">erase</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>&#160; {</div><div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>&#160; <span class="comment">// this erase only works for objects</span></div><div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>&#160; {</div><div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;erase(key);</div><div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>&#160; }</div><div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>&#160;</div><div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name()));</div><div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>&#160; }</div><div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>&#160;</div><div class="line"><a name="l04531"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a88cbcefe9a3f4d294bed0653550a5cb9.html#a88cbcefe9a3f4d294bed0653550a5cb9"> 4531</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a88cbcefe9a3f4d294bed0653550a5cb9.html#a88cbcefe9a3f4d294bed0653550a5cb9">erase</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> idx)</div><div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>&#160; {</div><div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>&#160; <span class="comment">// this erase only works for arrays</span></div><div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>&#160; {</div><div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>&#160; <span class="keywordflow">if</span> (idx &gt;= size())</div><div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>&#160; {</div><div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>&#160; JSON_THROW(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="l04539"></a><span class="lineno"> 4539</span>&#160; }</div><div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>&#160;</div><div class="line"><a name="l04541"></a><span class="lineno"> 4541</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_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a><span class="keyword">&gt;</span>(idx));</div><div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>&#160; }</div><div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>&#160; {</div><div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name()));</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; }</div><div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>&#160;</div><div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>&#160;</div><div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>&#160;</div><div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>&#160; <span class="comment">// lookup //</span></div><div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>&#160;</div><div class="line"><a name="l04581"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db"> 4581</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(<span class="keyword">typename</span> object_t::key_type key)</div><div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>&#160; {</div><div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>&#160; <span class="keyword">auto</span> result = end();</div><div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>&#160;</div><div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>&#160; {</div><div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>&#160; result.m_it.object_iterator = m_value.object-&gt;find(key);</div><div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>&#160; }</div><div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>&#160;</div><div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>&#160; }</div><div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>&#160;</div><div class="line"><a name="l04597"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6d2f26a0a84787a43c989c88e2b7023b.html#a6d2f26a0a84787a43c989c88e2b7023b"> 4597</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a6d2f26a0a84787a43c989c88e2b7023b.html#a6d2f26a0a84787a43c989c88e2b7023b">find</a>(<span class="keyword">typename</span> object_t::key_type key)<span class="keyword"> const</span></div><div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>&#160; <span class="keyword">auto</span> result = cend();</div><div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>&#160;</div><div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>&#160; {</div><div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>&#160; result.m_it.object_iterator = m_value.object-&gt;find(key);</div><div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>&#160; }</div><div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>&#160;</div><div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>&#160; }</div><div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>&#160;</div><div class="line"><a name="l04630"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5261eba9637f59d17d6cab5f14ce5747.html#a5261eba9637f59d17d6cab5f14ce5747"> 4630</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a5261eba9637f59d17d6cab5f14ce5747.html#a5261eba9637f59d17d6cab5f14ce5747">count</a>(<span class="keyword">typename</span> object_t::key_type key)<span class="keyword"> const</span></div><div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>&#160; <span class="comment">// return 0 for all nonobject types</span></div><div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object-&gt;count(key) : 0;</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="l04637"></a><span class="lineno"> 4637</span>&#160;</div><div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>&#160;</div><div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>&#160; <span class="comment">// iterators //</span></div><div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>&#160;</div><div class="line"><a name="l04670"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc"> 4670</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc">begin</a>() noexcept</div><div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>&#160; {</div><div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>&#160; result.set_begin();</div><div class="line"><a name="l04674"></a><span class="lineno"> 4674</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>&#160; }</div><div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>&#160;</div><div class="line"><a name="l04680"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4f0f5dd42b2987ff20306ed78bd31d1d.html#a4f0f5dd42b2987ff20306ed78bd31d1d"> 4680</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a4f0f5dd42b2987ff20306ed78bd31d1d.html#a4f0f5dd42b2987ff20306ed78bd31d1d">begin</a>() const noexcept</div><div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>&#160; {</div><div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>&#160; <span class="keywordflow">return</span> cbegin();</div><div class="line"><a name="l04683"></a><span class="lineno"> 4683</span>&#160; }</div><div class="line"><a name="l04684"></a><span class="lineno"> 4684</span>&#160;</div><div class="line"><a name="l04710"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad865d6c291b237ae508d5cb2146b5877.html#ad865d6c291b237ae508d5cb2146b5877"> 4710</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_ad865d6c291b237ae508d5cb2146b5877.html#ad865d6c291b237ae508d5cb2146b5877">cbegin</a>() const noexcept</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; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>&#160; result.set_begin();</div><div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l04741"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c"> 4741</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>() noexcept</div><div class="line"><a name="l04742"></a><span class="lineno"> 4742</span>&#160; {</div><div class="line"><a name="l04743"></a><span class="lineno"> 4743</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04744"></a><span class="lineno"> 4744</span>&#160; result.set_end();</div><div class="line"><a name="l04745"></a><span class="lineno"> 4745</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04746"></a><span class="lineno"> 4746</span>&#160; }</div><div class="line"><a name="l04747"></a><span class="lineno"> 4747</span>&#160;</div><div class="line"><a name="l04751"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1c15707055088cd5436ae91db72cbe67.html#a1c15707055088cd5436ae91db72cbe67"> 4751</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a1c15707055088cd5436ae91db72cbe67.html#a1c15707055088cd5436ae91db72cbe67">end</a>() const noexcept</div><div class="line"><a name="l04752"></a><span class="lineno"> 4752</span>&#160; {</div><div class="line"><a name="l04753"></a><span class="lineno"> 4753</span>&#160; <span class="keywordflow">return</span> cend();</div><div class="line"><a name="l04754"></a><span class="lineno"> 4754</span>&#160; }</div><div class="line"><a name="l04755"></a><span class="lineno"> 4755</span>&#160;</div><div class="line"><a name="l04781"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8dba7b7d2f38e6b0c614030aa43983f6.html#a8dba7b7d2f38e6b0c614030aa43983f6"> 4781</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a8dba7b7d2f38e6b0c614030aa43983f6.html#a8dba7b7d2f38e6b0c614030aa43983f6">cend</a>() const noexcept</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; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04784"></a><span class="lineno"> 4784</span>&#160; result.set_end();</div><div class="line"><a name="l04785"></a><span class="lineno"> 4785</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>&#160; }</div><div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>&#160;</div><div class="line"><a name="l04811"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1ef93e2006dbe52667294f5ef38b0b10.html#a1ef93e2006dbe52667294f5ef38b0b10"> 4811</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_a1ef93e2006dbe52667294f5ef38b0b10.html#a1ef93e2006dbe52667294f5ef38b0b10">rbegin</a>() noexcept</div><div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>&#160; {</div><div class="line"><a name="l04813"></a><span class="lineno"> 4813</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="l04814"></a><span class="lineno"> 4814</span>&#160; }</div><div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>&#160;</div><div class="line"><a name="l04819"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a515e7618392317dbf4b72d3e18bf2ab2.html#a515e7618392317dbf4b72d3e18bf2ab2"> 4819</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_a515e7618392317dbf4b72d3e18bf2ab2.html#a515e7618392317dbf4b72d3e18bf2ab2">rbegin</a>() const 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">return</span> crbegin();</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;</div><div class="line"><a name="l04848"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac77aed0925d447744676725ab0b6d535.html#ac77aed0925d447744676725ab0b6d535"> 4848</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_ac77aed0925d447744676725ab0b6d535.html#ac77aed0925d447744676725ab0b6d535">rend</a>() noexcept</div><div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>&#160; {</div><div class="line"><a name="l04850"></a><span class="lineno"> 4850</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="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="l04856"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4f73d4cee67ea328d785979c22af0ae1.html#a4f73d4cee67ea328d785979c22af0ae1"> 4856</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_a4f73d4cee67ea328d785979c22af0ae1.html#a4f73d4cee67ea328d785979c22af0ae1">rend</a>() const noexcept</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; <span class="keywordflow">return</span> crend();</div><div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>&#160; }</div><div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>&#160;</div><div class="line"><a name="l04885"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1e0769d22d54573f294da0e5c6abc9de.html#a1e0769d22d54573f294da0e5c6abc9de"> 4885</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_a1e0769d22d54573f294da0e5c6abc9de.html#a1e0769d22d54573f294da0e5c6abc9de">crbegin</a>() const noexcept</div><div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>&#160; {</div><div class="line"><a name="l04887"></a><span class="lineno"> 4887</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="l04888"></a><span class="lineno"> 4888</span>&#160; }</div><div class="line"><a name="l04889"></a><span class="lineno"> 4889</span>&#160;</div><div class="line"><a name="l04914"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5795b029dbf28e0cb2c7a439ec5d0a88.html#a5795b029dbf28e0cb2c7a439ec5d0a88"> 4914</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_a5795b029dbf28e0cb2c7a439ec5d0a88.html#a5795b029dbf28e0cb2c7a439ec5d0a88">crend</a>() const noexcept</div><div class="line"><a name="l04915"></a><span class="lineno"> 4915</span>&#160; {</div><div class="line"><a name="l04916"></a><span class="lineno"> 4916</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="l04917"></a><span class="lineno"> 4917</span>&#160; }</div><div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>&#160;</div><div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>&#160; <span class="comment">// forward declaration</span></div><div class="line"><a name="l04921"></a><span class="lineno"> 4921</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="l04922"></a><span class="lineno"> 4922</span>&#160;</div><div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04935"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aea8c06bb8e632f14cd77632519213d75.html#aea8c06bb8e632f14cd77632519213d75"> 4935</a></span>&#160; <span class="keyword">static</span> iteration_proxy&lt;iterator&gt; <a class="code" href="classnlohmann_1_1basic__json_aea8c06bb8e632f14cd77632519213d75.html#aea8c06bb8e632f14cd77632519213d75">iterator_wrapper</a>(<a class="code" href="classnlohmann_1_1basic__json.html">reference</a> cont)</div><div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>&#160; {</div><div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>&#160; <span class="keywordflow">return</span> iteration_proxy&lt;iterator&gt;(cont);</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;</div><div class="line"><a name="l04943"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_adb4db7abbc5ba12c9273f032a7b89198.html#adb4db7abbc5ba12c9273f032a7b89198"> 4943</a></span>&#160; <span class="keyword">static</span> iteration_proxy&lt;const_iterator&gt; <a class="code" href="classnlohmann_1_1basic__json_adb4db7abbc5ba12c9273f032a7b89198.html#adb4db7abbc5ba12c9273f032a7b89198">iterator_wrapper</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> cont)</div><div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>&#160; {</div><div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>&#160; <span class="keywordflow">return</span> iteration_proxy&lt;const_iterator&gt;(cont);</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="l04949"></a><span class="lineno"> 4949</span>&#160;</div><div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>&#160;</div><div class="line"><a name="l04952"></a><span class="lineno"> 4952</span>&#160; <span class="comment">// capacity //</span></div><div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>&#160;</div><div class="line"><a name="l04995"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1a86d444bfeaa9518d2421aedd74444a.html#a1a86d444bfeaa9518d2421aedd74444a"> 4995</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a1a86d444bfeaa9518d2421aedd74444a.html#a1a86d444bfeaa9518d2421aedd74444a">empty</a>() const noexcept</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; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>&#160; {</div><div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>&#160; {</div><div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>&#160; <span class="comment">// null values are empty</span></div><div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;</div><div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>&#160; <span class="keywordflow">case</span> value_t::array:</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; <span class="comment">// delegate call to array_t::empty()</span></div><div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;empty();</div><div class="line"><a name="l05009"></a><span class="lineno"> 5009</span>&#160; }</div><div class="line"><a name="l05010"></a><span class="lineno"> 5010</span>&#160;</div><div class="line"><a name="l05011"></a><span class="lineno"> 5011</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05012"></a><span class="lineno"> 5012</span>&#160; {</div><div class="line"><a name="l05013"></a><span class="lineno"> 5013</span>&#160; <span class="comment">// delegate call to object_t::empty()</span></div><div class="line"><a name="l05014"></a><span class="lineno"> 5014</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;empty();</div><div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>&#160; }</div><div class="line"><a name="l05016"></a><span class="lineno"> 5016</span>&#160;</div><div class="line"><a name="l05017"></a><span class="lineno"> 5017</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05018"></a><span class="lineno"> 5018</span>&#160; {</div><div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>&#160; <span class="comment">// all other types are nonempty</span></div><div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05021"></a><span class="lineno"> 5021</span>&#160; }</div><div class="line"><a name="l05022"></a><span class="lineno"> 5022</span>&#160; }</div><div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>&#160; }</div><div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>&#160;</div><div class="line"><a name="l05063"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96"> 5063</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>() const noexcept</div><div class="line"><a name="l05064"></a><span class="lineno"> 5064</span>&#160; {</div><div class="line"><a name="l05065"></a><span class="lineno"> 5065</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l05066"></a><span class="lineno"> 5066</span>&#160; {</div><div class="line"><a name="l05067"></a><span class="lineno"> 5067</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>&#160; {</div><div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>&#160; <span class="comment">// null values are empty</span></div><div class="line"><a name="l05070"></a><span class="lineno"> 5070</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l05071"></a><span class="lineno"> 5071</span>&#160; }</div><div class="line"><a name="l05072"></a><span class="lineno"> 5072</span>&#160;</div><div class="line"><a name="l05073"></a><span class="lineno"> 5073</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l05074"></a><span class="lineno"> 5074</span>&#160; {</div><div class="line"><a name="l05075"></a><span class="lineno"> 5075</span>&#160; <span class="comment">// delegate call to array_t::size()</span></div><div class="line"><a name="l05076"></a><span class="lineno"> 5076</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;size();</div><div class="line"><a name="l05077"></a><span class="lineno"> 5077</span>&#160; }</div><div class="line"><a name="l05078"></a><span class="lineno"> 5078</span>&#160;</div><div class="line"><a name="l05079"></a><span class="lineno"> 5079</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>&#160; {</div><div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>&#160; <span class="comment">// delegate call to object_t::size()</span></div><div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;size();</div><div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>&#160; }</div><div class="line"><a name="l05084"></a><span class="lineno"> 5084</span>&#160;</div><div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>&#160; {</div><div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>&#160; <span class="comment">// all other types have size 1</span></div><div class="line"><a name="l05088"></a><span class="lineno"> 5088</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>&#160; }</div><div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>&#160; }</div><div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>&#160; }</div><div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>&#160;</div><div class="line"><a name="l05129"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2f47d3c6a441c57dd2be00449fbb88e1.html#a2f47d3c6a441c57dd2be00449fbb88e1"> 5129</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a2f47d3c6a441c57dd2be00449fbb88e1.html#a2f47d3c6a441c57dd2be00449fbb88e1">max_size</a>() const noexcept</div><div class="line"><a name="l05130"></a><span class="lineno"> 5130</span>&#160; {</div><div class="line"><a name="l05131"></a><span class="lineno"> 5131</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>&#160; {</div><div class="line"><a name="l05133"></a><span class="lineno"> 5133</span>&#160; <span class="keywordflow">case</span> value_t::array:</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">// delegate call to array_t::max_size()</span></div><div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;max_size();</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;</div><div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>&#160; <span class="keywordflow">case</span> value_t::object:</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="comment">// delegate call to object_t::max_size()</span></div><div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;max_size();</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;</div><div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>&#160; {</div><div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>&#160; <span class="comment">// all other types have max_size() == size()</span></div><div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>&#160; <span class="keywordflow">return</span> size();</div><div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>&#160; }</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; }</div><div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>&#160;</div><div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>&#160;</div><div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>&#160;</div><div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>&#160; <span class="comment">// modifiers //</span></div><div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>&#160;<span class="comment"></span></div><div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>&#160;</div><div class="line"><a name="l05185"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abfeba47810ca72f2176419942c4e1952.html#abfeba47810ca72f2176419942c4e1952"> 5185</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_abfeba47810ca72f2176419942c4e1952.html#abfeba47810ca72f2176419942c4e1952">clear</a>() noexcept</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="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>&#160; {</div><div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>&#160; {</div><div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>&#160; m_value.number_integer = 0;</div><div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>&#160; }</div><div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>&#160;</div><div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>&#160; {</div><div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>&#160; m_value.number_unsigned = 0;</div><div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>&#160; }</div><div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>&#160;</div><div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>&#160; {</div><div class="line"><a name="l05203"></a><span class="lineno"> 5203</span>&#160; m_value.number_float = 0.0;</div><div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>&#160; }</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">case</span> value_t::boolean:</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; m_value.boolean = <span class="keyword">false</span>;</div><div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>&#160; }</div><div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>&#160;</div><div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>&#160; {</div><div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>&#160; m_value.string-&gt;clear();</div><div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>&#160; <span class="keywordflow">break</span>;</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="l05219"></a><span class="lineno"> 5219</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>&#160; {</div><div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>&#160; m_value.array-&gt;clear();</div><div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>&#160; }</div><div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>&#160;</div><div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>&#160; {</div><div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>&#160; m_value.object-&gt;clear();</div><div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>&#160; }</div><div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>&#160;</div><div class="line"><a name="l05231"></a><span class="lineno"> 5231</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05232"></a><span class="lineno"> 5232</span>&#160; {</div><div class="line"><a name="l05233"></a><span class="lineno"> 5233</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l05234"></a><span class="lineno"> 5234</span>&#160; }</div><div class="line"><a name="l05235"></a><span class="lineno"> 5235</span>&#160; }</div><div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>&#160; }</div><div class="line"><a name="l05237"></a><span class="lineno"> 5237</span>&#160;</div><div class="line"><a name="l05258"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7"> 5258</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; val)</div><div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>&#160; {</div><div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>&#160; <span class="comment">// push_back only works for null objects or arrays</span></div><div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_array()))</div><div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>&#160; {</div><div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name()));</div><div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>&#160; }</div><div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>&#160;</div><div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>&#160; <span class="comment">// transform null object into an array</span></div><div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l05268"></a><span class="lineno"> 5268</span>&#160; {</div><div class="line"><a name="l05269"></a><span class="lineno"> 5269</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l05270"></a><span class="lineno"> 5270</span>&#160; m_value = value_t::array;</div><div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>&#160; assert_invariant();</div><div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>&#160; }</div><div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>&#160;</div><div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>&#160; <span class="comment">// add element to array (move semantics)</span></div><div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>&#160; m_value.array-&gt;push_back(std::move(val));</div><div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>&#160; <span class="comment">// invalidate object</span></div><div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>&#160; val.m_type = value_t::null;</div><div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>&#160; }</div><div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>&#160;</div><div class="line"><a name="l05284"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aea1085f2d35cc0e1ce119cf0110119e6.html#aea1085f2d35cc0e1ce119cf0110119e6"> 5284</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_aea1085f2d35cc0e1ce119cf0110119e6.html#aea1085f2d35cc0e1ce119cf0110119e6">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; val)</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; push_back(std::move(val));</div><div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>&#160; }</div><div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>&#160;</div><div class="line"><a name="l05294"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab4384af330b79de0e5f279576803a2c7.html#ab4384af330b79de0e5f279576803a2c7"> 5294</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ab4384af330b79de0e5f279576803a2c7.html#ab4384af330b79de0e5f279576803a2c7">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="l05295"></a><span class="lineno"> 5295</span>&#160; {</div><div class="line"><a name="l05296"></a><span class="lineno"> 5296</span>&#160; <span class="comment">// push_back only works for null objects or arrays</span></div><div class="line"><a name="l05297"></a><span class="lineno"> 5297</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_array()))</div><div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>&#160; {</div><div class="line"><a name="l05299"></a><span class="lineno"> 5299</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name()));</div><div class="line"><a name="l05300"></a><span class="lineno"> 5300</span>&#160; }</div><div class="line"><a name="l05301"></a><span class="lineno"> 5301</span>&#160;</div><div class="line"><a name="l05302"></a><span class="lineno"> 5302</span>&#160; <span class="comment">// transform null object into an array</span></div><div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l05304"></a><span class="lineno"> 5304</span>&#160; {</div><div class="line"><a name="l05305"></a><span class="lineno"> 5305</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>&#160; m_value = value_t::array;</div><div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>&#160; assert_invariant();</div><div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>&#160; }</div><div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>&#160;</div><div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>&#160; <span class="comment">// add element to array</span></div><div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>&#160; m_value.array-&gt;push_back(val);</div><div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>&#160; }</div><div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>&#160;</div><div class="line"><a name="l05318"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_adc29dd6358ff7a9062d7e168c24e7484.html#adc29dd6358ff7a9062d7e168c24e7484"> 5318</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_adc29dd6358ff7a9062d7e168c24e7484.html#adc29dd6358ff7a9062d7e168c24e7484">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="l05319"></a><span class="lineno"> 5319</span>&#160; {</div><div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>&#160; push_back(val);</div><div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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="l05344"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae11a3a51782c058fff2f6550cdfb9b3c.html#ae11a3a51782c058fff2f6550cdfb9b3c"> 5344</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ae11a3a51782c058fff2f6550cdfb9b3c.html#ae11a3a51782c058fff2f6550cdfb9b3c">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="l05345"></a><span class="lineno"> 5345</span>&#160; {</div><div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>&#160; <span class="comment">// push_back only works for null objects or objects</span></div><div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_object()))</div><div class="line"><a name="l05348"></a><span class="lineno"> 5348</span>&#160; {</div><div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name()));</div><div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>&#160; }</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="comment">// transform null object into an object</span></div><div class="line"><a name="l05353"></a><span class="lineno"> 5353</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l05354"></a><span class="lineno"> 5354</span>&#160; {</div><div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l05357"></a><span class="lineno"> 5357</span>&#160; assert_invariant();</div><div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>&#160; }</div><div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>&#160;</div><div class="line"><a name="l05360"></a><span class="lineno"> 5360</span>&#160; <span class="comment">// add element to array</span></div><div class="line"><a name="l05361"></a><span class="lineno"> 5361</span>&#160; m_value.object-&gt;insert(val);</div><div class="line"><a name="l05362"></a><span class="lineno"> 5362</span>&#160; }</div><div class="line"><a name="l05363"></a><span class="lineno"> 5363</span>&#160;</div><div class="line"><a name="l05368"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abf04978d85a2d5c4754f4806d42f46fd.html#abf04978d85a2d5c4754f4806d42f46fd"> 5368</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_abf04978d85a2d5c4754f4806d42f46fd.html#abf04978d85a2d5c4754f4806d42f46fd">operator+=</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::value_type&amp; val)</div><div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>&#160; {</div><div class="line"><a name="l05370"></a><span class="lineno"> 5370</span>&#160; push_back(val);</div><div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l05372"></a><span class="lineno"> 5372</span>&#160; }</div><div class="line"><a name="l05373"></a><span class="lineno"> 5373</span>&#160;</div><div class="line"><a name="l05399"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab2716cbe2e997ab8309926b87f044434.html#ab2716cbe2e997ab8309926b87f044434"> 5399</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ab2716cbe2e997ab8309926b87f044434.html#ab2716cbe2e997ab8309926b87f044434">push_back</a>(std::initializer_list&lt;basic_json&gt; init)</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="keywordflow">if</span> (is_object() and init.size() == 2 and init.begin()-&gt;is_string())</div><div class="line"><a name="l05402"></a><span class="lineno"> 5402</span>&#160; {</div><div class="line"><a name="l05403"></a><span class="lineno"> 5403</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> key = *init.begin();</div><div class="line"><a name="l05404"></a><span class="lineno"> 5404</span>&#160; push_back(<span class="keyword">typename</span> object_t::value_type(key, *(init.begin() + 1)));</div><div class="line"><a name="l05405"></a><span class="lineno"> 5405</span>&#160; }</div><div class="line"><a name="l05406"></a><span class="lineno"> 5406</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05407"></a><span class="lineno"> 5407</span>&#160; {</div><div class="line"><a name="l05408"></a><span class="lineno"> 5408</span>&#160; push_back(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(init));</div><div class="line"><a name="l05409"></a><span class="lineno"> 5409</span>&#160; }</div><div class="line"><a name="l05410"></a><span class="lineno"> 5410</span>&#160; }</div><div class="line"><a name="l05411"></a><span class="lineno"> 5411</span>&#160;</div><div class="line"><a name="l05416"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0cf23e7d44e78bb9014484971af2f40f.html#a0cf23e7d44e78bb9014484971af2f40f"> 5416</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a0cf23e7d44e78bb9014484971af2f40f.html#a0cf23e7d44e78bb9014484971af2f40f">operator+=</a>(std::initializer_list&lt;basic_json&gt; init)</div><div class="line"><a name="l05417"></a><span class="lineno"> 5417</span>&#160; {</div><div class="line"><a name="l05418"></a><span class="lineno"> 5418</span>&#160; push_back(init);</div><div class="line"><a name="l05419"></a><span class="lineno"> 5419</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l05420"></a><span class="lineno"> 5420</span>&#160; }</div><div class="line"><a name="l05421"></a><span class="lineno"> 5421</span>&#160;</div><div class="line"><a name="l05443"></a><span class="lineno"> 5443</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span>... Args&gt;</div><div class="line"><a name="l05444"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aacf5eed15a8b66fb1e88910707a5e229.html#aacf5eed15a8b66fb1e88910707a5e229"> 5444</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_aacf5eed15a8b66fb1e88910707a5e229.html#aacf5eed15a8b66fb1e88910707a5e229">emplace_back</a>(Args&amp;&amp; ... args)</div><div class="line"><a name="l05445"></a><span class="lineno"> 5445</span>&#160; {</div><div class="line"><a name="l05446"></a><span class="lineno"> 5446</span>&#160; <span class="comment">// emplace_back only works for null objects or arrays</span></div><div class="line"><a name="l05447"></a><span class="lineno"> 5447</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_array()))</div><div class="line"><a name="l05448"></a><span class="lineno"> 5448</span>&#160; {</div><div class="line"><a name="l05449"></a><span class="lineno"> 5449</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use emplace_back() with &quot;</span> + type_name()));</div><div class="line"><a name="l05450"></a><span class="lineno"> 5450</span>&#160; }</div><div class="line"><a name="l05451"></a><span class="lineno"> 5451</span>&#160;</div><div class="line"><a name="l05452"></a><span class="lineno"> 5452</span>&#160; <span class="comment">// transform null object into an array</span></div><div class="line"><a name="l05453"></a><span class="lineno"> 5453</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l05454"></a><span class="lineno"> 5454</span>&#160; {</div><div class="line"><a name="l05455"></a><span class="lineno"> 5455</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l05456"></a><span class="lineno"> 5456</span>&#160; m_value = value_t::array;</div><div class="line"><a name="l05457"></a><span class="lineno"> 5457</span>&#160; assert_invariant();</div><div class="line"><a name="l05458"></a><span class="lineno"> 5458</span>&#160; }</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="comment">// add element to array (perfect forwarding)</span></div><div class="line"><a name="l05461"></a><span class="lineno"> 5461</span>&#160; m_value.array-&gt;emplace_back(std::forward&lt;Args&gt;(args)...);</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;</div><div class="line"><a name="l05491"></a><span class="lineno"> 5491</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span>... Args&gt;</div><div class="line"><a name="l05492"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5338e282d1d02bed389d852dd670d98d.html#a5338e282d1d02bed389d852dd670d98d"> 5492</a></span>&#160; std::pair&lt;iterator, bool&gt; <a class="code" href="classnlohmann_1_1basic__json_a5338e282d1d02bed389d852dd670d98d.html#a5338e282d1d02bed389d852dd670d98d">emplace</a>(Args&amp;&amp; ... args)</div><div class="line"><a name="l05493"></a><span class="lineno"> 5493</span>&#160; {</div><div class="line"><a name="l05494"></a><span class="lineno"> 5494</span>&#160; <span class="comment">// emplace only works for null objects or arrays</span></div><div class="line"><a name="l05495"></a><span class="lineno"> 5495</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_object()))</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; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use emplace() with &quot;</span> + type_name()));</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;</div><div class="line"><a name="l05500"></a><span class="lineno"> 5500</span>&#160; <span class="comment">// transform null object into an object</span></div><div class="line"><a name="l05501"></a><span class="lineno"> 5501</span>&#160; <span class="keywordflow">if</span> (is_null())</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; m_type = value_t::object;</div><div class="line"><a name="l05504"></a><span class="lineno"> 5504</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l05505"></a><span class="lineno"> 5505</span>&#160; assert_invariant();</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;</div><div class="line"><a name="l05508"></a><span class="lineno"> 5508</span>&#160; <span class="comment">// add element to array (perfect forwarding)</span></div><div class="line"><a name="l05509"></a><span class="lineno"> 5509</span>&#160; <span class="keyword">auto</span> res = m_value.object-&gt;emplace(std::forward&lt;Args&gt;(args)...);</div><div class="line"><a name="l05510"></a><span class="lineno"> 5510</span>&#160; <span class="comment">// create result iterator and set iterator to the result of emplace</span></div><div class="line"><a name="l05511"></a><span class="lineno"> 5511</span>&#160; <span class="keyword">auto</span> it = begin();</div><div class="line"><a name="l05512"></a><span class="lineno"> 5512</span>&#160; it.m_it.object_iterator = res.first;</div><div class="line"><a name="l05513"></a><span class="lineno"> 5513</span>&#160;</div><div class="line"><a name="l05514"></a><span class="lineno"> 5514</span>&#160; <span class="comment">// return pair of iterator and boolean</span></div><div class="line"><a name="l05515"></a><span class="lineno"> 5515</span>&#160; <span class="keywordflow">return</span> {it, res.second};</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;</div><div class="line"><a name="l05540"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0136728f5db69d4051c77b94307abd6c.html#a0136728f5db69d4051c77b94307abd6c"> 5540</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a0136728f5db69d4051c77b94307abd6c.html#a0136728f5db69d4051c77b94307abd6c">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.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="l05541"></a><span class="lineno"> 5541</span>&#160; {</div><div class="line"><a name="l05542"></a><span class="lineno"> 5542</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05543"></a><span class="lineno"> 5543</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05544"></a><span class="lineno"> 5544</span>&#160; {</div><div class="line"><a name="l05545"></a><span class="lineno"> 5545</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05546"></a><span class="lineno"> 5546</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05547"></a><span class="lineno"> 5547</span>&#160; {</div><div class="line"><a name="l05548"></a><span class="lineno"> 5548</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>));</div><div class="line"><a name="l05549"></a><span class="lineno"> 5549</span>&#160; }</div><div class="line"><a name="l05550"></a><span class="lineno"> 5550</span>&#160;</div><div class="line"><a name="l05551"></a><span class="lineno"> 5551</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05552"></a><span class="lineno"> 5552</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05553"></a><span class="lineno"> 5553</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(pos.m_it.array_iterator, val);</div><div class="line"><a name="l05554"></a><span class="lineno"> 5554</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05555"></a><span class="lineno"> 5555</span>&#160; }</div><div class="line"><a name="l05556"></a><span class="lineno"> 5556</span>&#160;</div><div class="line"><a name="l05557"></a><span class="lineno"> 5557</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name()));</div><div class="line"><a name="l05558"></a><span class="lineno"> 5558</span>&#160; }</div><div class="line"><a name="l05559"></a><span class="lineno"> 5559</span>&#160;</div><div class="line"><a name="l05564"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1ecce113ff11dd294689ee4d45cbb855.html#a1ecce113ff11dd294689ee4d45cbb855"> 5564</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a1ecce113ff11dd294689ee4d45cbb855.html#a1ecce113ff11dd294689ee4d45cbb855">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.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="l05565"></a><span class="lineno"> 5565</span>&#160; {</div><div class="line"><a name="l05566"></a><span class="lineno"> 5566</span>&#160; <span class="keywordflow">return</span> insert(pos, val);</div><div class="line"><a name="l05567"></a><span class="lineno"> 5567</span>&#160; }</div><div class="line"><a name="l05568"></a><span class="lineno"> 5568</span>&#160;</div><div class="line"><a name="l05593"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a30a7cc24f2931c20ecae37ec4a5e901f.html#a30a7cc24f2931c20ecae37ec4a5e901f"> 5593</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a30a7cc24f2931c20ecae37ec4a5e901f.html#a30a7cc24f2931c20ecae37ec4a5e901f">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> pos, <a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">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="l05594"></a><span class="lineno"> 5594</span>&#160; {</div><div class="line"><a name="l05595"></a><span class="lineno"> 5595</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05596"></a><span class="lineno"> 5596</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05597"></a><span class="lineno"> 5597</span>&#160; {</div><div class="line"><a name="l05598"></a><span class="lineno"> 5598</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05599"></a><span class="lineno"> 5599</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05600"></a><span class="lineno"> 5600</span>&#160; {</div><div class="line"><a name="l05601"></a><span class="lineno"> 5601</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>));</div><div class="line"><a name="l05602"></a><span class="lineno"> 5602</span>&#160; }</div><div class="line"><a name="l05603"></a><span class="lineno"> 5603</span>&#160;</div><div class="line"><a name="l05604"></a><span class="lineno"> 5604</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05605"></a><span class="lineno"> 5605</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05606"></a><span class="lineno"> 5606</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="l05607"></a><span class="lineno"> 5607</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05608"></a><span class="lineno"> 5608</span>&#160; }</div><div class="line"><a name="l05609"></a><span class="lineno"> 5609</span>&#160;</div><div class="line"><a name="l05610"></a><span class="lineno"> 5610</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name()));</div><div class="line"><a name="l05611"></a><span class="lineno"> 5611</span>&#160; }</div><div class="line"><a name="l05612"></a><span class="lineno"> 5612</span>&#160;</div><div class="line"><a name="l05643"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a404cfe1bdbf1dc6b229627fcf2afb95f.html#a404cfe1bdbf1dc6b229627fcf2afb95f"> 5643</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a404cfe1bdbf1dc6b229627fcf2afb95f.html#a404cfe1bdbf1dc6b229627fcf2afb95f">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> pos, <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> first, <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> last)</div><div class="line"><a name="l05644"></a><span class="lineno"> 5644</span>&#160; {</div><div class="line"><a name="l05645"></a><span class="lineno"> 5645</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05646"></a><span class="lineno"> 5646</span>&#160; <span class="keywordflow">if</span> (not is_array())</div><div class="line"><a name="l05647"></a><span class="lineno"> 5647</span>&#160; {</div><div class="line"><a name="l05648"></a><span class="lineno"> 5648</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name()));</div><div class="line"><a name="l05649"></a><span class="lineno"> 5649</span>&#160; }</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="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05652"></a><span class="lineno"> 5652</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05653"></a><span class="lineno"> 5653</span>&#160; {</div><div class="line"><a name="l05654"></a><span class="lineno"> 5654</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>));</div><div class="line"><a name="l05655"></a><span class="lineno"> 5655</span>&#160; }</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="comment">// check if range iterators belong to the same JSON object</span></div><div class="line"><a name="l05658"></a><span class="lineno"> 5658</span>&#160; <span class="keywordflow">if</span> (first.m_object != last.m_object)</div><div class="line"><a name="l05659"></a><span class="lineno"> 5659</span>&#160; {</div><div class="line"><a name="l05660"></a><span class="lineno"> 5660</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterators do not fit&quot;</span>));</div><div class="line"><a name="l05661"></a><span class="lineno"> 5661</span>&#160; }</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">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="l05664"></a><span class="lineno"> 5664</span>&#160; {</div><div class="line"><a name="l05665"></a><span class="lineno"> 5665</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;passed iterators may not belong to container&quot;</span>));</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;</div><div class="line"><a name="l05668"></a><span class="lineno"> 5668</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05669"></a><span class="lineno"> 5669</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05670"></a><span class="lineno"> 5670</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(</div><div class="line"><a name="l05671"></a><span class="lineno"> 5671</span>&#160; pos.m_it.array_iterator,</div><div class="line"><a name="l05672"></a><span class="lineno"> 5672</span>&#160; first.m_it.array_iterator,</div><div class="line"><a name="l05673"></a><span class="lineno"> 5673</span>&#160; last.m_it.array_iterator);</div><div class="line"><a name="l05674"></a><span class="lineno"> 5674</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05675"></a><span class="lineno"> 5675</span>&#160; }</div><div class="line"><a name="l05676"></a><span class="lineno"> 5676</span>&#160;</div><div class="line"><a name="l05701"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad154c4228e4867c67b25a6601ced89bd.html#ad154c4228e4867c67b25a6601ced89bd"> 5701</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_ad154c4228e4867c67b25a6601ced89bd.html#ad154c4228e4867c67b25a6601ced89bd">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> pos, std::initializer_list&lt;basic_json&gt; ilist)</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="comment">// insert only works for arrays</span></div><div class="line"><a name="l05704"></a><span class="lineno"> 5704</span>&#160; <span class="keywordflow">if</span> (not is_array())</div><div class="line"><a name="l05705"></a><span class="lineno"> 5705</span>&#160; {</div><div class="line"><a name="l05706"></a><span class="lineno"> 5706</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name()));</div><div class="line"><a name="l05707"></a><span class="lineno"> 5707</span>&#160; }</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="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05710"></a><span class="lineno"> 5710</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05711"></a><span class="lineno"> 5711</span>&#160; {</div><div class="line"><a name="l05712"></a><span class="lineno"> 5712</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>));</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;</div><div class="line"><a name="l05715"></a><span class="lineno"> 5715</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05716"></a><span class="lineno"> 5716</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05717"></a><span class="lineno"> 5717</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(pos.m_it.array_iterator, ilist);</div><div class="line"><a name="l05718"></a><span class="lineno"> 5718</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05719"></a><span class="lineno"> 5719</span>&#160; }</div><div class="line"><a name="l05720"></a><span class="lineno"> 5720</span>&#160;</div><div class="line"><a name="l05738"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8c9d932353e1ab98a7dc2fc27e002031.html#a8c9d932353e1ab98a7dc2fc27e002031"> 5738</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a8c9d932353e1ab98a7dc2fc27e002031.html#a8c9d932353e1ab98a7dc2fc27e002031">swap</a>(<a class="code" href="classnlohmann_1_1basic__json.html">reference</a> other) noexcept (</div><div class="line"><a name="l05739"></a><span class="lineno"> 5739</span>&#160; std::is_nothrow_move_constructible&lt;value_t&gt;::value and</div><div class="line"><a name="l05740"></a><span class="lineno"> 5740</span>&#160; std::is_nothrow_move_assignable&lt;value_t&gt;::value and</div><div class="line"><a name="l05741"></a><span class="lineno"> 5741</span>&#160; std::is_nothrow_move_constructible&lt;json_value&gt;::value and</div><div class="line"><a name="l05742"></a><span class="lineno"> 5742</span>&#160; std::is_nothrow_move_assignable&lt;json_value&gt;::value</div><div class="line"><a name="l05743"></a><span class="lineno"> 5743</span>&#160; )</div><div class="line"><a name="l05744"></a><span class="lineno"> 5744</span>&#160; {</div><div class="line"><a name="l05745"></a><span class="lineno"> 5745</span>&#160; std::swap(m_type, other.m_type);</div><div class="line"><a name="l05746"></a><span class="lineno"> 5746</span>&#160; std::swap(m_value, other.m_value);</div><div class="line"><a name="l05747"></a><span class="lineno"> 5747</span>&#160; assert_invariant();</div><div class="line"><a name="l05748"></a><span class="lineno"> 5748</span>&#160; }</div><div class="line"><a name="l05749"></a><span class="lineno"> 5749</span>&#160;</div><div class="line"><a name="l05770"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a65b0a24e1361a030ad0a661de22f6c8e.html#a65b0a24e1361a030ad0a661de22f6c8e"> 5770</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a65b0a24e1361a030ad0a661de22f6c8e.html#a65b0a24e1361a030ad0a661de22f6c8e">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">array_t</a>&amp; other)</div><div class="line"><a name="l05771"></a><span class="lineno"> 5771</span>&#160; {</div><div class="line"><a name="l05772"></a><span class="lineno"> 5772</span>&#160; <span class="comment">// swap only works for arrays</span></div><div class="line"><a name="l05773"></a><span class="lineno"> 5773</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05774"></a><span class="lineno"> 5774</span>&#160; {</div><div class="line"><a name="l05775"></a><span class="lineno"> 5775</span>&#160; std::swap(*(m_value.array), other);</div><div class="line"><a name="l05776"></a><span class="lineno"> 5776</span>&#160; }</div><div class="line"><a name="l05777"></a><span class="lineno"> 5777</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05778"></a><span class="lineno"> 5778</span>&#160; {</div><div class="line"><a name="l05779"></a><span class="lineno"> 5779</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name()));</div><div class="line"><a name="l05780"></a><span class="lineno"> 5780</span>&#160; }</div><div class="line"><a name="l05781"></a><span class="lineno"> 5781</span>&#160; }</div><div class="line"><a name="l05782"></a><span class="lineno"> 5782</span>&#160;</div><div class="line"><a name="l05803"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac31f12587d2f1a3be5ffc394aa9d72a4.html#ac31f12587d2f1a3be5ffc394aa9d72a4"> 5803</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ac31f12587d2f1a3be5ffc394aa9d72a4.html#ac31f12587d2f1a3be5ffc394aa9d72a4">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">object_t</a>&amp; other)</div><div class="line"><a name="l05804"></a><span class="lineno"> 5804</span>&#160; {</div><div class="line"><a name="l05805"></a><span class="lineno"> 5805</span>&#160; <span class="comment">// swap only works for objects</span></div><div class="line"><a name="l05806"></a><span class="lineno"> 5806</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l05807"></a><span class="lineno"> 5807</span>&#160; {</div><div class="line"><a name="l05808"></a><span class="lineno"> 5808</span>&#160; std::swap(*(m_value.object), other);</div><div class="line"><a name="l05809"></a><span class="lineno"> 5809</span>&#160; }</div><div class="line"><a name="l05810"></a><span class="lineno"> 5810</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05811"></a><span class="lineno"> 5811</span>&#160; {</div><div class="line"><a name="l05812"></a><span class="lineno"> 5812</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name()));</div><div class="line"><a name="l05813"></a><span class="lineno"> 5813</span>&#160; }</div><div class="line"><a name="l05814"></a><span class="lineno"> 5814</span>&#160; }</div><div class="line"><a name="l05815"></a><span class="lineno"> 5815</span>&#160;</div><div class="line"><a name="l05836"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_adaa1ed0a889d86c8e0216a3d66980f76.html#adaa1ed0a889d86c8e0216a3d66980f76"> 5836</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_adaa1ed0a889d86c8e0216a3d66980f76.html#adaa1ed0a889d86c8e0216a3d66980f76">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>&amp; other)</div><div class="line"><a name="l05837"></a><span class="lineno"> 5837</span>&#160; {</div><div class="line"><a name="l05838"></a><span class="lineno"> 5838</span>&#160; <span class="comment">// swap only works for strings</span></div><div class="line"><a name="l05839"></a><span class="lineno"> 5839</span>&#160; <span class="keywordflow">if</span> (is_string())</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; std::swap(*(m_value.string), other);</div><div class="line"><a name="l05842"></a><span class="lineno"> 5842</span>&#160; }</div><div class="line"><a name="l05843"></a><span class="lineno"> 5843</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05844"></a><span class="lineno"> 5844</span>&#160; {</div><div class="line"><a name="l05845"></a><span class="lineno"> 5845</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name()));</div><div class="line"><a name="l05846"></a><span class="lineno"> 5846</span>&#160; }</div><div class="line"><a name="l05847"></a><span class="lineno"> 5847</span>&#160; }</div><div class="line"><a name="l05848"></a><span class="lineno"> 5848</span>&#160;</div><div class="line"><a name="l05850"></a><span class="lineno"> 5850</span>&#160;</div><div class="line"><a name="l05851"></a><span class="lineno"> 5851</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05853"></a><span class="lineno"> 5853</span>&#160; <span class="comment">// lexicographical comparison operators //</span></div><div class="line"><a name="l05855"></a><span class="lineno"> 5855</span>&#160;<span class="comment"></span></div><div class="line"><a name="l05858"></a><span class="lineno"> 5858</span>&#160;</div><div class="line"><a name="l05882"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html#a122640e7e2db1814fc7bbb3c122ec76e"> 5882</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="l05883"></a><span class="lineno"> 5883</span>&#160; {</div><div class="line"><a name="l05884"></a><span class="lineno"> 5884</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lhs_type = lhs.type();</div><div class="line"><a name="l05885"></a><span class="lineno"> 5885</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> rhs_type = rhs.type();</div><div class="line"><a name="l05886"></a><span class="lineno"> 5886</span>&#160;</div><div class="line"><a name="l05887"></a><span class="lineno"> 5887</span>&#160; <span class="keywordflow">if</span> (lhs_type == rhs_type)</div><div class="line"><a name="l05888"></a><span class="lineno"> 5888</span>&#160; {</div><div class="line"><a name="l05889"></a><span class="lineno"> 5889</span>&#160; <span class="keywordflow">switch</span> (lhs_type)</div><div class="line"><a name="l05890"></a><span class="lineno"> 5890</span>&#160; {</div><div class="line"><a name="l05891"></a><span class="lineno"> 5891</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l05892"></a><span class="lineno"> 5892</span>&#160; {</div><div class="line"><a name="l05893"></a><span class="lineno"> 5893</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.array == *rhs.m_value.array;</div><div class="line"><a name="l05894"></a><span class="lineno"> 5894</span>&#160; }</div><div class="line"><a name="l05895"></a><span class="lineno"> 5895</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05896"></a><span class="lineno"> 5896</span>&#160; {</div><div class="line"><a name="l05897"></a><span class="lineno"> 5897</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.object == *rhs.m_value.object;</div><div class="line"><a name="l05898"></a><span class="lineno"> 5898</span>&#160; }</div><div class="line"><a name="l05899"></a><span class="lineno"> 5899</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l05900"></a><span class="lineno"> 5900</span>&#160; {</div><div class="line"><a name="l05901"></a><span class="lineno"> 5901</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l05904"></a><span class="lineno"> 5904</span>&#160; {</div><div class="line"><a name="l05905"></a><span class="lineno"> 5905</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.string == *rhs.m_value.string;</div><div class="line"><a name="l05906"></a><span class="lineno"> 5906</span>&#160; }</div><div class="line"><a name="l05907"></a><span class="lineno"> 5907</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l05908"></a><span class="lineno"> 5908</span>&#160; {</div><div class="line"><a name="l05909"></a><span class="lineno"> 5909</span>&#160; <span class="keywordflow">return</span> lhs.m_value.boolean == rhs.m_value.boolean;</div><div class="line"><a name="l05910"></a><span class="lineno"> 5910</span>&#160; }</div><div class="line"><a name="l05911"></a><span class="lineno"> 5911</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l05912"></a><span class="lineno"> 5912</span>&#160; {</div><div class="line"><a name="l05913"></a><span class="lineno"> 5913</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer == rhs.m_value.number_integer;</div><div class="line"><a name="l05914"></a><span class="lineno"> 5914</span>&#160; }</div><div class="line"><a name="l05915"></a><span class="lineno"> 5915</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l05916"></a><span class="lineno"> 5916</span>&#160; {</div><div class="line"><a name="l05917"></a><span class="lineno"> 5917</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_unsigned == rhs.m_value.number_unsigned;</div><div class="line"><a name="l05918"></a><span class="lineno"> 5918</span>&#160; }</div><div class="line"><a name="l05919"></a><span class="lineno"> 5919</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l05920"></a><span class="lineno"> 5920</span>&#160; {</div><div class="line"><a name="l05921"></a><span class="lineno"> 5921</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float == rhs.m_value.number_float;</div><div class="line"><a name="l05922"></a><span class="lineno"> 5922</span>&#160; }</div><div class="line"><a name="l05923"></a><span class="lineno"> 5923</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05924"></a><span class="lineno"> 5924</span>&#160; {</div><div class="line"><a name="l05925"></a><span class="lineno"> 5925</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05926"></a><span class="lineno"> 5926</span>&#160; }</div><div class="line"><a name="l05927"></a><span class="lineno"> 5927</span>&#160; }</div><div class="line"><a name="l05928"></a><span class="lineno"> 5928</span>&#160; }</div><div class="line"><a name="l05929"></a><span class="lineno"> 5929</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="l05930"></a><span class="lineno"> 5930</span>&#160; {</div><div class="line"><a name="l05931"></a><span class="lineno"> 5931</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">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="l05932"></a><span class="lineno"> 5932</span>&#160; }</div><div class="line"><a name="l05933"></a><span class="lineno"> 5933</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="l05934"></a><span class="lineno"> 5934</span>&#160; {</div><div class="line"><a name="l05935"></a><span class="lineno"> 5935</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_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_integer);</div><div class="line"><a name="l05936"></a><span class="lineno"> 5936</span>&#160; }</div><div class="line"><a name="l05937"></a><span class="lineno"> 5937</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="l05938"></a><span class="lineno"> 5938</span>&#160; {</div><div class="line"><a name="l05939"></a><span class="lineno"> 5939</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">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="l05940"></a><span class="lineno"> 5940</span>&#160; }</div><div class="line"><a name="l05941"></a><span class="lineno"> 5941</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="l05942"></a><span class="lineno"> 5942</span>&#160; {</div><div class="line"><a name="l05943"></a><span class="lineno"> 5943</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_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05944"></a><span class="lineno"> 5944</span>&#160; }</div><div class="line"><a name="l05945"></a><span class="lineno"> 5945</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="l05946"></a><span class="lineno"> 5946</span>&#160; {</div><div class="line"><a name="l05947"></a><span class="lineno"> 5947</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">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="l05948"></a><span class="lineno"> 5948</span>&#160; }</div><div class="line"><a name="l05949"></a><span class="lineno"> 5949</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="l05950"></a><span class="lineno"> 5950</span>&#160; {</div><div class="line"><a name="l05951"></a><span class="lineno"> 5951</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_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05952"></a><span class="lineno"> 5952</span>&#160; }</div><div class="line"><a name="l05953"></a><span class="lineno"> 5953</span>&#160;</div><div class="line"><a name="l05954"></a><span class="lineno"> 5954</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05955"></a><span class="lineno"> 5955</span>&#160; }</div><div class="line"><a name="l05956"></a><span class="lineno"> 5956</span>&#160;</div><div class="line"><a name="l05961"></a><span class="lineno"> 5961</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ScalarType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l05962"></a><span class="lineno"> 5962</span>&#160; std::is_scalar&lt;ScalarType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l05963"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aba21440ea1aff44f718285ed7d6d20d9.html#aba21440ea1aff44f718285ed7d6d20d9"> 5963</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aba21440ea1aff44f718285ed7d6d20d9.html#aba21440ea1aff44f718285ed7d6d20d9">operator==</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <span class="keyword">const</span> ScalarType rhs) noexcept</div><div class="line"><a name="l05964"></a><span class="lineno"> 5964</span>&#160; {</div><div class="line"><a name="l05965"></a><span class="lineno"> 5965</span>&#160; <span class="keywordflow">return</span> (lhs == <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(rhs));</div><div class="line"><a name="l05966"></a><span class="lineno"> 5966</span>&#160; }</div><div class="line"><a name="l05967"></a><span class="lineno"> 5967</span>&#160;</div><div class="line"><a name="l05972"></a><span class="lineno"> 5972</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ScalarType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l05973"></a><span class="lineno"> 5973</span>&#160; std::is_scalar&lt;ScalarType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l05974"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aef302e3ae215e46e5035d0e4fdf47235.html#aef302e3ae215e46e5035d0e4fdf47235"> 5974</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aef302e3ae215e46e5035d0e4fdf47235.html#aef302e3ae215e46e5035d0e4fdf47235">operator==</a>(<span class="keyword">const</span> ScalarType lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05975"></a><span class="lineno"> 5975</span>&#160; {</div><div class="line"><a name="l05976"></a><span class="lineno"> 5976</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(lhs) == rhs);</div><div class="line"><a name="l05977"></a><span class="lineno"> 5977</span>&#160; }</div><div class="line"><a name="l05978"></a><span class="lineno"> 5978</span>&#160;</div><div class="line"><a name="l05995"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html#a6e2e21da48f5d9471716cd868a068327"> 5995</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="l05996"></a><span class="lineno"> 5996</span>&#160; {</div><div class="line"><a name="l05997"></a><span class="lineno"> 5997</span>&#160; <span class="keywordflow">return</span> not (lhs == rhs);</div><div class="line"><a name="l05998"></a><span class="lineno"> 5998</span>&#160; }</div><div class="line"><a name="l05999"></a><span class="lineno"> 5999</span>&#160;</div><div class="line"><a name="l06004"></a><span class="lineno"> 6004</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ScalarType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l06005"></a><span class="lineno"> 6005</span>&#160; std::is_scalar&lt;ScalarType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06006"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afefc38fc08bdb7a9a7474b5ab4a1140f.html#afefc38fc08bdb7a9a7474b5ab4a1140f"> 6006</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_afefc38fc08bdb7a9a7474b5ab4a1140f.html#afefc38fc08bdb7a9a7474b5ab4a1140f">operator!=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <span class="keyword">const</span> ScalarType rhs) noexcept</div><div class="line"><a name="l06007"></a><span class="lineno"> 6007</span>&#160; {</div><div class="line"><a name="l06008"></a><span class="lineno"> 6008</span>&#160; <span class="keywordflow">return</span> (lhs != <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(rhs));</div><div class="line"><a name="l06009"></a><span class="lineno"> 6009</span>&#160; }</div><div class="line"><a name="l06010"></a><span class="lineno"> 6010</span>&#160;</div><div class="line"><a name="l06015"></a><span class="lineno"> 6015</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ScalarType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l06016"></a><span class="lineno"> 6016</span>&#160; std::is_scalar&lt;ScalarType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06017"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab0e886db6e9fa91ff9fd853333fed05b.html#ab0e886db6e9fa91ff9fd853333fed05b"> 6017</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_ab0e886db6e9fa91ff9fd853333fed05b.html#ab0e886db6e9fa91ff9fd853333fed05b">operator!=</a>(<span class="keyword">const</span> ScalarType lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l06018"></a><span class="lineno"> 6018</span>&#160; {</div><div class="line"><a name="l06019"></a><span class="lineno"> 6019</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(lhs) != rhs);</div><div class="line"><a name="l06020"></a><span class="lineno"> 6020</span>&#160; }</div><div class="line"><a name="l06021"></a><span class="lineno"> 6021</span>&#160;</div><div class="line"><a name="l06046"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html#aacd442b66140c764c594ac8ad7dfd5b3"> 6046</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="l06047"></a><span class="lineno"> 6047</span>&#160; {</div><div class="line"><a name="l06048"></a><span class="lineno"> 6048</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lhs_type = lhs.type();</div><div class="line"><a name="l06049"></a><span class="lineno"> 6049</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> rhs_type = rhs.type();</div><div class="line"><a name="l06050"></a><span class="lineno"> 6050</span>&#160;</div><div class="line"><a name="l06051"></a><span class="lineno"> 6051</span>&#160; <span class="keywordflow">if</span> (lhs_type == rhs_type)</div><div class="line"><a name="l06052"></a><span class="lineno"> 6052</span>&#160; {</div><div class="line"><a name="l06053"></a><span class="lineno"> 6053</span>&#160; <span class="keywordflow">switch</span> (lhs_type)</div><div class="line"><a name="l06054"></a><span class="lineno"> 6054</span>&#160; {</div><div class="line"><a name="l06055"></a><span class="lineno"> 6055</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l06056"></a><span class="lineno"> 6056</span>&#160; {</div><div class="line"><a name="l06057"></a><span class="lineno"> 6057</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.array &lt; *rhs.m_value.array;</div><div class="line"><a name="l06058"></a><span class="lineno"> 6058</span>&#160; }</div><div class="line"><a name="l06059"></a><span class="lineno"> 6059</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l06060"></a><span class="lineno"> 6060</span>&#160; {</div><div class="line"><a name="l06061"></a><span class="lineno"> 6061</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.object &lt; *rhs.m_value.object;</div><div class="line"><a name="l06062"></a><span class="lineno"> 6062</span>&#160; }</div><div class="line"><a name="l06063"></a><span class="lineno"> 6063</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l06064"></a><span class="lineno"> 6064</span>&#160; {</div><div class="line"><a name="l06065"></a><span class="lineno"> 6065</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l06066"></a><span class="lineno"> 6066</span>&#160; }</div><div class="line"><a name="l06067"></a><span class="lineno"> 6067</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l06068"></a><span class="lineno"> 6068</span>&#160; {</div><div class="line"><a name="l06069"></a><span class="lineno"> 6069</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.string &lt; *rhs.m_value.string;</div><div class="line"><a name="l06070"></a><span class="lineno"> 6070</span>&#160; }</div><div class="line"><a name="l06071"></a><span class="lineno"> 6071</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l06072"></a><span class="lineno"> 6072</span>&#160; {</div><div class="line"><a name="l06073"></a><span class="lineno"> 6073</span>&#160; <span class="keywordflow">return</span> lhs.m_value.boolean &lt; rhs.m_value.boolean;</div><div class="line"><a name="l06074"></a><span class="lineno"> 6074</span>&#160; }</div><div class="line"><a name="l06075"></a><span class="lineno"> 6075</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l06076"></a><span class="lineno"> 6076</span>&#160; {</div><div class="line"><a name="l06077"></a><span class="lineno"> 6077</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer &lt; rhs.m_value.number_integer;</div><div class="line"><a name="l06078"></a><span class="lineno"> 6078</span>&#160; }</div><div class="line"><a name="l06079"></a><span class="lineno"> 6079</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l06080"></a><span class="lineno"> 6080</span>&#160; {</div><div class="line"><a name="l06081"></a><span class="lineno"> 6081</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_unsigned &lt; rhs.m_value.number_unsigned;</div><div class="line"><a name="l06082"></a><span class="lineno"> 6082</span>&#160; }</div><div class="line"><a name="l06083"></a><span class="lineno"> 6083</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l06084"></a><span class="lineno"> 6084</span>&#160; {</div><div class="line"><a name="l06085"></a><span class="lineno"> 6085</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float &lt; rhs.m_value.number_float;</div><div class="line"><a name="l06086"></a><span class="lineno"> 6086</span>&#160; }</div><div class="line"><a name="l06087"></a><span class="lineno"> 6087</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06088"></a><span class="lineno"> 6088</span>&#160; {</div><div class="line"><a name="l06089"></a><span class="lineno"> 6089</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l06090"></a><span class="lineno"> 6090</span>&#160; }</div><div class="line"><a name="l06091"></a><span class="lineno"> 6091</span>&#160; }</div><div class="line"><a name="l06092"></a><span class="lineno"> 6092</span>&#160; }</div><div class="line"><a name="l06093"></a><span class="lineno"> 6093</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="l06094"></a><span class="lineno"> 6094</span>&#160; {</div><div class="line"><a name="l06095"></a><span class="lineno"> 6095</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">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="l06096"></a><span class="lineno"> 6096</span>&#160; }</div><div class="line"><a name="l06097"></a><span class="lineno"> 6097</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="l06098"></a><span class="lineno"> 6098</span>&#160; {</div><div class="line"><a name="l06099"></a><span class="lineno"> 6099</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_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_integer);</div><div class="line"><a name="l06100"></a><span class="lineno"> 6100</span>&#160; }</div><div class="line"><a name="l06101"></a><span class="lineno"> 6101</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="l06102"></a><span class="lineno"> 6102</span>&#160; {</div><div class="line"><a name="l06103"></a><span class="lineno"> 6103</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">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="l06104"></a><span class="lineno"> 6104</span>&#160; }</div><div class="line"><a name="l06105"></a><span class="lineno"> 6105</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="l06106"></a><span class="lineno"> 6106</span>&#160; {</div><div class="line"><a name="l06107"></a><span class="lineno"> 6107</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_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l06108"></a><span class="lineno"> 6108</span>&#160; }</div><div class="line"><a name="l06109"></a><span class="lineno"> 6109</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="l06110"></a><span class="lineno"> 6110</span>&#160; {</div><div class="line"><a name="l06111"></a><span class="lineno"> 6111</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_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l06112"></a><span class="lineno"> 6112</span>&#160; }</div><div class="line"><a name="l06113"></a><span class="lineno"> 6113</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="l06114"></a><span class="lineno"> 6114</span>&#160; {</div><div class="line"><a name="l06115"></a><span class="lineno"> 6115</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">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="l06116"></a><span class="lineno"> 6116</span>&#160; }</div><div class="line"><a name="l06117"></a><span class="lineno"> 6117</span>&#160;</div><div class="line"><a name="l06118"></a><span class="lineno"> 6118</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="l06119"></a><span class="lineno"> 6119</span>&#160; <span class="comment">// we compare types. Note we have to call the operator explicitly,</span></div><div class="line"><a name="l06120"></a><span class="lineno"> 6120</span>&#160; <span class="comment">// because MSVC has problems otherwise.</span></div><div class="line"><a name="l06121"></a><span class="lineno"> 6121</span>&#160; <span class="keywordflow">return</span> operator&lt;(lhs_type, rhs_type);</div><div class="line"><a name="l06122"></a><span class="lineno"> 6122</span>&#160; }</div><div class="line"><a name="l06123"></a><span class="lineno"> 6123</span>&#160;</div><div class="line"><a name="l06141"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html#a5c8bb5200f5eac10d31e26be46e5b1ac"> 6141</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="l06142"></a><span class="lineno"> 6142</span>&#160; {</div><div class="line"><a name="l06143"></a><span class="lineno"> 6143</span>&#160; <span class="keywordflow">return</span> not (rhs &lt; lhs);</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="l06163"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html#a87db51b6b936fb2ea293cdbc8702dcb8"> 6163</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="l06164"></a><span class="lineno"> 6164</span>&#160; {</div><div class="line"><a name="l06165"></a><span class="lineno"> 6165</span>&#160; <span class="keywordflow">return</span> not (lhs &lt;= rhs);</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;</div><div class="line"><a name="l06185"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html#a74a943800c7f103d0990d7eef82c6453"> 6185</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="l06186"></a><span class="lineno"> 6186</span>&#160; {</div><div class="line"><a name="l06187"></a><span class="lineno"> 6187</span>&#160; <span class="keywordflow">return</span> not (lhs &lt; rhs);</div><div class="line"><a name="l06188"></a><span class="lineno"> 6188</span>&#160; }</div><div class="line"><a name="l06189"></a><span class="lineno"> 6189</span>&#160;</div><div class="line"><a name="l06191"></a><span class="lineno"> 6191</span>&#160;</div><div class="line"><a name="l06192"></a><span class="lineno"> 6192</span>&#160;</div><div class="line"><a name="l06194"></a><span class="lineno"> 6194</span>&#160; <span class="comment">// serialization //</span></div><div class="line"><a name="l06196"></a><span class="lineno"> 6196</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06199"></a><span class="lineno"> 6199</span>&#160;</div><div class="line"><a name="l06222"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405"> 6222</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="l06223"></a><span class="lineno"> 6223</span>&#160; {</div><div class="line"><a name="l06224"></a><span class="lineno"> 6224</span>&#160; <span class="comment">// read width member and use it as indentation parameter if nonzero</span></div><div class="line"><a name="l06225"></a><span class="lineno"> 6225</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> pretty_print = (o.width() &gt; 0);</div><div class="line"><a name="l06226"></a><span class="lineno"> 6226</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> indentation = (pretty_print ? o.width() : 0);</div><div class="line"><a name="l06227"></a><span class="lineno"> 6227</span>&#160;</div><div class="line"><a name="l06228"></a><span class="lineno"> 6228</span>&#160; <span class="comment">// reset width to 0 for subsequent calls to this stream</span></div><div class="line"><a name="l06229"></a><span class="lineno"> 6229</span>&#160; o.width(0);</div><div class="line"><a name="l06230"></a><span class="lineno"> 6230</span>&#160;</div><div class="line"><a name="l06231"></a><span class="lineno"> 6231</span>&#160; <span class="comment">// do the actual serialization</span></div><div class="line"><a name="l06232"></a><span class="lineno"> 6232</span>&#160; j.<a class="code" href="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422.html#a5319dc1bb9dfe19ce7ff559aaded3422">dump</a>(o, pretty_print, static_cast&lt;unsigned int&gt;(indentation));</div><div class="line"><a name="l06233"></a><span class="lineno"> 6233</span>&#160;</div><div class="line"><a name="l06234"></a><span class="lineno"> 6234</span>&#160; <span class="keywordflow">return</span> o;</div><div class="line"><a name="l06235"></a><span class="lineno"> 6235</span>&#160; }</div><div class="line"><a name="l06236"></a><span class="lineno"> 6236</span>&#160;</div><div class="line"><a name="l06241"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html#a34d6a60dd99e9f33b8273a1c8db5669b"> 6241</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="l06242"></a><span class="lineno"> 6242</span>&#160; {</div><div class="line"><a name="l06243"></a><span class="lineno"> 6243</span>&#160; <span class="keywordflow">return</span> o &lt;&lt; j;</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;</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;</div><div class="line"><a name="l06250"></a><span class="lineno"> 6250</span>&#160; <span class="comment">// deserialization //</span></div><div class="line"><a name="l06252"></a><span class="lineno"> 6252</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06255"></a><span class="lineno"> 6255</span>&#160;</div><div class="line"><a name="l06283"></a><span class="lineno"> 6283</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="l06284"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e"> 6284</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_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>(T (&amp;array)[N],</div><div class="line"><a name="l06285"></a><span class="lineno"> 6285</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</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; <span class="comment">// delegate the call to the iterator-range parse overload</span></div><div class="line"><a name="l06288"></a><span class="lineno"> 6288</span>&#160; <span class="keywordflow">return</span> parse(std::begin(array), std::end(array), cb);</div><div class="line"><a name="l06289"></a><span class="lineno"> 6289</span>&#160; }</div><div class="line"><a name="l06290"></a><span class="lineno"> 6290</span>&#160;</div><div class="line"><a name="l06318"></a><span class="lineno"> 6318</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharT, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l06319"></a><span class="lineno"> 6319</span>&#160; std::is_pointer&lt;CharT&gt;::value and</div><div class="line"><a name="l06320"></a><span class="lineno"> 6320</span>&#160; std::is_integral&lt;typename std::remove_pointer&lt;CharT&gt;::type&gt;::value and</div><div class="line"><a name="l06321"></a><span class="lineno"> 6321</span>&#160; <span class="keyword">sizeof</span>(<span class="keyword">typename</span> std::remove_pointer&lt;CharT&gt;::type) == 1, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06322"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab275a3e00a40189e96d244de6c8f311a.html#ab275a3e00a40189e96d244de6c8f311a"> 6322</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_ab275a3e00a40189e96d244de6c8f311a.html#ab275a3e00a40189e96d244de6c8f311a">parse</a>(<span class="keyword">const</span> CharT s,</div><div class="line"><a name="l06323"></a><span class="lineno"> 6323</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06324"></a><span class="lineno"> 6324</span>&#160; {</div><div class="line"><a name="l06325"></a><span class="lineno"> 6325</span>&#160; <span class="keywordflow">return</span> parser(reinterpret_cast&lt;const char*&gt;(s), cb).<a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>();</div><div class="line"><a name="l06326"></a><span class="lineno"> 6326</span>&#160; }</div><div class="line"><a name="l06327"></a><span class="lineno"> 6327</span>&#160;</div><div class="line"><a name="l06352"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4cd30efe5c33a7cf73a0c6495bb16054.html#a4cd30efe5c33a7cf73a0c6495bb16054"> 6352</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_a4cd30efe5c33a7cf73a0c6495bb16054.html#a4cd30efe5c33a7cf73a0c6495bb16054">parse</a>(std::istream&amp; i,</div><div class="line"><a name="l06353"></a><span class="lineno"> 6353</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06354"></a><span class="lineno"> 6354</span>&#160; {</div><div class="line"><a name="l06355"></a><span class="lineno"> 6355</span>&#160; <span class="keywordflow">return</span> parser(i, cb).<a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>();</div><div class="line"><a name="l06356"></a><span class="lineno"> 6356</span>&#160; }</div><div class="line"><a name="l06357"></a><span class="lineno"> 6357</span>&#160;</div><div class="line"><a name="l06361"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3bd712a1351ba28e5440fac2359da1cb.html#a3bd712a1351ba28e5440fac2359da1cb"> 6361</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_a3bd712a1351ba28e5440fac2359da1cb.html#a3bd712a1351ba28e5440fac2359da1cb">parse</a>(std::istream&amp;&amp; i,</div><div class="line"><a name="l06362"></a><span class="lineno"> 6362</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06363"></a><span class="lineno"> 6363</span>&#160; {</div><div class="line"><a name="l06364"></a><span class="lineno"> 6364</span>&#160; <span class="keywordflow">return</span> parser(i, cb).<a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>();</div><div class="line"><a name="l06365"></a><span class="lineno"> 6365</span>&#160; }</div><div class="line"><a name="l06366"></a><span class="lineno"> 6366</span>&#160;</div><div class="line"><a name="l06408"></a><span class="lineno"> 6408</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="l06409"></a><span class="lineno"> 6409</span>&#160; std::is_base_of&lt;</div><div class="line"><a name="l06410"></a><span class="lineno"> 6410</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l06411"></a><span class="lineno"> 6411</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="l06412"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a360d37260add46be89881db2366fe343.html#a360d37260add46be89881db2366fe343"> 6412</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_a360d37260add46be89881db2366fe343.html#a360d37260add46be89881db2366fe343">parse</a>(IteratorType first, IteratorType last,</div><div class="line"><a name="l06413"></a><span class="lineno"> 6413</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06414"></a><span class="lineno"> 6414</span>&#160; {</div><div class="line"><a name="l06415"></a><span class="lineno"> 6415</span>&#160; <span class="comment">// assertion to check that the iterator range is indeed contiguous,</span></div><div class="line"><a name="l06416"></a><span class="lineno"> 6416</span>&#160; <span class="comment">// see http://stackoverflow.com/a/35008842/266378 for more discussion</span></div><div class="line"><a name="l06417"></a><span class="lineno"> 6417</span>&#160; assert(std::accumulate(first, last, std::pair&lt;bool, int&gt;(<span class="keyword">true</span>, 0),</div><div class="line"><a name="l06418"></a><span class="lineno"> 6418</span>&#160; [&amp;first](std::pair&lt;bool, int&gt; res, decltype(*first) val)</div><div class="line"><a name="l06419"></a><span class="lineno"> 6419</span>&#160; {</div><div class="line"><a name="l06420"></a><span class="lineno"> 6420</span>&#160; res.first &amp;= (val == *(std::next(std::addressof(*first), res.second++)));</div><div class="line"><a name="l06421"></a><span class="lineno"> 6421</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l06422"></a><span class="lineno"> 6422</span>&#160; }).first);</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">// assertion to check that each element is 1 byte long</span></div><div class="line"><a name="l06425"></a><span class="lineno"> 6425</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="l06426"></a><span class="lineno"> 6426</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="l06427"></a><span class="lineno"> 6427</span>&#160;</div><div class="line"><a name="l06428"></a><span class="lineno"> 6428</span>&#160; <span class="comment">// if iterator range is empty, create a parser with an empty string</span></div><div class="line"><a name="l06429"></a><span class="lineno"> 6429</span>&#160; <span class="comment">// to generate &quot;unexpected EOF&quot; error message</span></div><div class="line"><a name="l06430"></a><span class="lineno"> 6430</span>&#160; <span class="keywordflow">if</span> (std::distance(first, last) &lt;= 0)</div><div class="line"><a name="l06431"></a><span class="lineno"> 6431</span>&#160; {</div><div class="line"><a name="l06432"></a><span class="lineno"> 6432</span>&#160; <span class="keywordflow">return</span> parser(<span class="stringliteral">&quot;&quot;</span>).parse();</div><div class="line"><a name="l06433"></a><span class="lineno"> 6433</span>&#160; }</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; <span class="keywordflow">return</span> parser(first, last, cb).parse();</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;</div><div class="line"><a name="l06478"></a><span class="lineno"> 6478</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="l06479"></a><span class="lineno"> 6479</span>&#160; not std::is_pointer&lt;ContiguousContainer&gt;::value and</div><div class="line"><a name="l06480"></a><span class="lineno"> 6480</span>&#160; std::is_base_of&lt;</div><div class="line"><a name="l06481"></a><span class="lineno"> 6481</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l06482"></a><span class="lineno"> 6482</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="l06483"></a><span class="lineno"> 6483</span>&#160; , <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06484"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a00795fca3388571ba4a56a1ea6e0466b.html#a00795fca3388571ba4a56a1ea6e0466b"> 6484</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_a00795fca3388571ba4a56a1ea6e0466b.html#a00795fca3388571ba4a56a1ea6e0466b">parse</a>(<span class="keyword">const</span> ContiguousContainer&amp; c,</div><div class="line"><a name="l06485"></a><span class="lineno"> 6485</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</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="comment">// delegate the call to the iterator-range parse overload</span></div><div class="line"><a name="l06488"></a><span class="lineno"> 6488</span>&#160; <span class="keywordflow">return</span> parse(std::begin(c), std::end(c), cb);</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;</div><div class="line"><a name="l06514"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html#a60ca396028b8d9714c6e10efbf475af6"> 6514</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="l06515"></a><span class="lineno"> 6515</span>&#160; {</div><div class="line"><a name="l06516"></a><span class="lineno"> 6516</span>&#160; j = parser(i).<a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>();</div><div class="line"><a name="l06517"></a><span class="lineno"> 6517</span>&#160; <span class="keywordflow">return</span> i;</div><div class="line"><a name="l06518"></a><span class="lineno"> 6518</span>&#160; }</div><div class="line"><a name="l06519"></a><span class="lineno"> 6519</span>&#160;</div><div class="line"><a name="l06524"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8"> 6524</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="l06525"></a><span class="lineno"> 6525</span>&#160; {</div><div class="line"><a name="l06526"></a><span class="lineno"> 6526</span>&#160; j = parser(i).<a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">parse</a>();</div><div class="line"><a name="l06527"></a><span class="lineno"> 6527</span>&#160; <span class="keywordflow">return</span> i;</div><div class="line"><a name="l06528"></a><span class="lineno"> 6528</span>&#160; }</div><div class="line"><a name="l06529"></a><span class="lineno"> 6529</span>&#160;</div><div class="line"><a name="l06531"></a><span class="lineno"> 6531</span>&#160;</div><div class="line"><a name="l06533"></a><span class="lineno"> 6533</span>&#160; <span class="comment">// binary serialization/deserialization //</span></div><div class="line"><a name="l06535"></a><span class="lineno"> 6535</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06538"></a><span class="lineno"> 6538</span>&#160;</div><div class="line"><a name="l06539"></a><span class="lineno"> 6539</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06545"></a><span class="lineno"> 6545</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06546"></a><span class="lineno"> 6546</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_vector(std::vector&lt;uint8_t&gt;&amp; vec, <span class="keywordtype">size_t</span> bytes, <span class="keyword">const</span> T number)</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; assert(bytes == 1 or bytes == 2 or bytes == 4 or bytes == 8);</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; <span class="keywordflow">switch</span> (bytes)</div><div class="line"><a name="l06551"></a><span class="lineno"> 6551</span>&#160; {</div><div class="line"><a name="l06552"></a><span class="lineno"> 6552</span>&#160; <span class="keywordflow">case</span> 8:</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; vec.push_back(static_cast&lt;uint8_t&gt;((static_cast&lt;uint64_t&gt;(number) &gt;&gt; 070) &amp; 0xff));</div><div class="line"><a name="l06555"></a><span class="lineno"> 6555</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((static_cast&lt;uint64_t&gt;(number) &gt;&gt; 060) &amp; 0xff));</div><div class="line"><a name="l06556"></a><span class="lineno"> 6556</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((static_cast&lt;uint64_t&gt;(number) &gt;&gt; 050) &amp; 0xff));</div><div class="line"><a name="l06557"></a><span class="lineno"> 6557</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((static_cast&lt;uint64_t&gt;(number) &gt;&gt; 040) &amp; 0xff));</div><div class="line"><a name="l06558"></a><span class="lineno"> 6558</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 030) &amp; 0xff));</div><div class="line"><a name="l06559"></a><span class="lineno"> 6559</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 020) &amp; 0xff));</div><div class="line"><a name="l06560"></a><span class="lineno"> 6560</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 010) &amp; 0xff));</div><div class="line"><a name="l06561"></a><span class="lineno"> 6561</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;(number &amp; 0xff));</div><div class="line"><a name="l06562"></a><span class="lineno"> 6562</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06563"></a><span class="lineno"> 6563</span>&#160; }</div><div class="line"><a name="l06564"></a><span class="lineno"> 6564</span>&#160;</div><div class="line"><a name="l06565"></a><span class="lineno"> 6565</span>&#160; <span class="keywordflow">case</span> 4:</div><div class="line"><a name="l06566"></a><span class="lineno"> 6566</span>&#160; {</div><div class="line"><a name="l06567"></a><span class="lineno"> 6567</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 030) &amp; 0xff));</div><div class="line"><a name="l06568"></a><span class="lineno"> 6568</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 020) &amp; 0xff));</div><div class="line"><a name="l06569"></a><span class="lineno"> 6569</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 010) &amp; 0xff));</div><div class="line"><a name="l06570"></a><span class="lineno"> 6570</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;(number &amp; 0xff));</div><div class="line"><a name="l06571"></a><span class="lineno"> 6571</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06572"></a><span class="lineno"> 6572</span>&#160; }</div><div class="line"><a name="l06573"></a><span class="lineno"> 6573</span>&#160;</div><div class="line"><a name="l06574"></a><span class="lineno"> 6574</span>&#160; <span class="keywordflow">case</span> 2:</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; vec.push_back(static_cast&lt;uint8_t&gt;((number &gt;&gt; 010) &amp; 0xff));</div><div class="line"><a name="l06577"></a><span class="lineno"> 6577</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;(number &amp; 0xff));</div><div class="line"><a name="l06578"></a><span class="lineno"> 6578</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06579"></a><span class="lineno"> 6579</span>&#160; }</div><div class="line"><a name="l06580"></a><span class="lineno"> 6580</span>&#160;</div><div class="line"><a name="l06581"></a><span class="lineno"> 6581</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l06582"></a><span class="lineno"> 6582</span>&#160; {</div><div class="line"><a name="l06583"></a><span class="lineno"> 6583</span>&#160; vec.push_back(static_cast&lt;uint8_t&gt;(number &amp; 0xff));</div><div class="line"><a name="l06584"></a><span class="lineno"> 6584</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06585"></a><span class="lineno"> 6585</span>&#160; }</div><div class="line"><a name="l06586"></a><span class="lineno"> 6586</span>&#160; }</div><div class="line"><a name="l06587"></a><span class="lineno"> 6587</span>&#160; }</div><div class="line"><a name="l06588"></a><span class="lineno"> 6588</span>&#160;</div><div class="line"><a name="l06625"></a><span class="lineno"> 6625</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06626"></a><span class="lineno"> 6626</span>&#160; <span class="keyword">static</span> T get_from_vector(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; vec, <span class="keyword">const</span> <span class="keywordtype">size_t</span> current_index)</div><div class="line"><a name="l06627"></a><span class="lineno"> 6627</span>&#160; {</div><div class="line"><a name="l06628"></a><span class="lineno"> 6628</span>&#160; <span class="keywordflow">if</span> (current_index + <span class="keyword">sizeof</span>(T) + 1 &gt; vec.size())</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; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot read &quot;</span> + std::to_string(<span class="keyword">sizeof</span>(T)) + <span class="stringliteral">&quot; bytes from vector&quot;</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="l06633"></a><span class="lineno"> 6633</span>&#160; T result;</div><div class="line"><a name="l06634"></a><span class="lineno"> 6634</span>&#160; <span class="keyword">auto</span>* ptr = <span class="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(&amp;result);</div><div class="line"><a name="l06635"></a><span class="lineno"> 6635</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <span class="keyword">sizeof</span>(T); ++i)</div><div class="line"><a name="l06636"></a><span class="lineno"> 6636</span>&#160; {</div><div class="line"><a name="l06637"></a><span class="lineno"> 6637</span>&#160; *ptr++ = vec[current_index + <span class="keyword">sizeof</span>(T) - i];</div><div class="line"><a name="l06638"></a><span class="lineno"> 6638</span>&#160; }</div><div class="line"><a name="l06639"></a><span class="lineno"> 6639</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l06640"></a><span class="lineno"> 6640</span>&#160; }</div><div class="line"><a name="l06641"></a><span class="lineno"> 6641</span>&#160;</div><div class="line"><a name="l06652"></a><span class="lineno"> 6652</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> to_msgpack_internal(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j, std::vector&lt;uint8_t&gt;&amp; v)</div><div class="line"><a name="l06653"></a><span class="lineno"> 6653</span>&#160; {</div><div class="line"><a name="l06654"></a><span class="lineno"> 6654</span>&#160; <span class="keywordflow">switch</span> (j.<a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>())</div><div class="line"><a name="l06655"></a><span class="lineno"> 6655</span>&#160; {</div><div class="line"><a name="l06656"></a><span class="lineno"> 6656</span>&#160; <span class="keywordflow">case</span> value_t::null:</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">// nil</span></div><div class="line"><a name="l06659"></a><span class="lineno"> 6659</span>&#160; v.push_back(0xc0);</div><div class="line"><a name="l06660"></a><span class="lineno"> 6660</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06661"></a><span class="lineno"> 6661</span>&#160; }</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; <span class="keywordflow">case</span> value_t::boolean:</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; <span class="comment">// true and false</span></div><div class="line"><a name="l06666"></a><span class="lineno"> 6666</span>&#160; v.push_back(j.m_value.boolean ? 0xc3 : 0xc2);</div><div class="line"><a name="l06667"></a><span class="lineno"> 6667</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06668"></a><span class="lineno"> 6668</span>&#160; }</div><div class="line"><a name="l06669"></a><span class="lineno"> 6669</span>&#160;</div><div class="line"><a name="l06670"></a><span class="lineno"> 6670</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</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; <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= 0)</div><div class="line"><a name="l06673"></a><span class="lineno"> 6673</span>&#160; {</div><div class="line"><a name="l06674"></a><span class="lineno"> 6674</span>&#160; <span class="comment">// MessagePack does not differentiate between positive</span></div><div class="line"><a name="l06675"></a><span class="lineno"> 6675</span>&#160; <span class="comment">// signed integers and unsigned integers. Therefore, we</span></div><div class="line"><a name="l06676"></a><span class="lineno"> 6676</span>&#160; <span class="comment">// used the code from the value_t::number_unsigned case</span></div><div class="line"><a name="l06677"></a><span class="lineno"> 6677</span>&#160; <span class="comment">// here.</span></div><div class="line"><a name="l06678"></a><span class="lineno"> 6678</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt; 128)</div><div class="line"><a name="l06679"></a><span class="lineno"> 6679</span>&#160; {</div><div class="line"><a name="l06680"></a><span class="lineno"> 6680</span>&#160; <span class="comment">// positive fixnum</span></div><div class="line"><a name="l06681"></a><span class="lineno"> 6681</span>&#160; add_to_vector(v, 1, j.m_value.number_unsigned);</div><div class="line"><a name="l06682"></a><span class="lineno"> 6682</span>&#160; }</div><div class="line"><a name="l06683"></a><span class="lineno"> 6683</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint8_t&gt;::max())</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="comment">// uint 8</span></div><div class="line"><a name="l06686"></a><span class="lineno"> 6686</span>&#160; v.push_back(0xcc);</div><div class="line"><a name="l06687"></a><span class="lineno"> 6687</span>&#160; add_to_vector(v, 1, j.m_value.number_unsigned);</div><div class="line"><a name="l06688"></a><span class="lineno"> 6688</span>&#160; }</div><div class="line"><a name="l06689"></a><span class="lineno"> 6689</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint16_t&gt;::max())</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="comment">// uint 16</span></div><div class="line"><a name="l06692"></a><span class="lineno"> 6692</span>&#160; v.push_back(0xcd);</div><div class="line"><a name="l06693"></a><span class="lineno"> 6693</span>&#160; add_to_vector(v, 2, j.m_value.number_unsigned);</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="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint32_t&gt;::max())</div><div class="line"><a name="l06696"></a><span class="lineno"> 6696</span>&#160; {</div><div class="line"><a name="l06697"></a><span class="lineno"> 6697</span>&#160; <span class="comment">// uint 32</span></div><div class="line"><a name="l06698"></a><span class="lineno"> 6698</span>&#160; v.push_back(0xce);</div><div class="line"><a name="l06699"></a><span class="lineno"> 6699</span>&#160; add_to_vector(v, 4, j.m_value.number_unsigned);</div><div class="line"><a name="l06700"></a><span class="lineno"> 6700</span>&#160; }</div><div class="line"><a name="l06701"></a><span class="lineno"> 6701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint64_t&gt;::max())</div><div class="line"><a name="l06702"></a><span class="lineno"> 6702</span>&#160; {</div><div class="line"><a name="l06703"></a><span class="lineno"> 6703</span>&#160; <span class="comment">// uint 64</span></div><div class="line"><a name="l06704"></a><span class="lineno"> 6704</span>&#160; v.push_back(0xcf);</div><div class="line"><a name="l06705"></a><span class="lineno"> 6705</span>&#160; add_to_vector(v, 8, j.m_value.number_unsigned);</div><div class="line"><a name="l06706"></a><span class="lineno"> 6706</span>&#160; }</div><div class="line"><a name="l06707"></a><span class="lineno"> 6707</span>&#160; }</div><div class="line"><a name="l06708"></a><span class="lineno"> 6708</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06709"></a><span class="lineno"> 6709</span>&#160; {</div><div class="line"><a name="l06710"></a><span class="lineno"> 6710</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= -32)</div><div class="line"><a name="l06711"></a><span class="lineno"> 6711</span>&#160; {</div><div class="line"><a name="l06712"></a><span class="lineno"> 6712</span>&#160; <span class="comment">// negative fixnum</span></div><div class="line"><a name="l06713"></a><span class="lineno"> 6713</span>&#160; add_to_vector(v, 1, j.m_value.number_integer);</div><div class="line"><a name="l06714"></a><span class="lineno"> 6714</span>&#160; }</div><div class="line"><a name="l06715"></a><span class="lineno"> 6715</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= std::numeric_limits&lt;int8_t&gt;::min() and j.m_value.number_integer &lt;= std::numeric_limits&lt;int8_t&gt;::max())</div><div class="line"><a name="l06716"></a><span class="lineno"> 6716</span>&#160; {</div><div class="line"><a name="l06717"></a><span class="lineno"> 6717</span>&#160; <span class="comment">// int 8</span></div><div class="line"><a name="l06718"></a><span class="lineno"> 6718</span>&#160; v.push_back(0xd0);</div><div class="line"><a name="l06719"></a><span class="lineno"> 6719</span>&#160; add_to_vector(v, 1, j.m_value.number_integer);</div><div class="line"><a name="l06720"></a><span class="lineno"> 6720</span>&#160; }</div><div class="line"><a name="l06721"></a><span class="lineno"> 6721</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= std::numeric_limits&lt;int16_t&gt;::min() and j.m_value.number_integer &lt;= std::numeric_limits&lt;int16_t&gt;::max())</div><div class="line"><a name="l06722"></a><span class="lineno"> 6722</span>&#160; {</div><div class="line"><a name="l06723"></a><span class="lineno"> 6723</span>&#160; <span class="comment">// int 16</span></div><div class="line"><a name="l06724"></a><span class="lineno"> 6724</span>&#160; v.push_back(0xd1);</div><div class="line"><a name="l06725"></a><span class="lineno"> 6725</span>&#160; add_to_vector(v, 2, j.m_value.number_integer);</div><div class="line"><a name="l06726"></a><span class="lineno"> 6726</span>&#160; }</div><div class="line"><a name="l06727"></a><span class="lineno"> 6727</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= std::numeric_limits&lt;int32_t&gt;::min() and j.m_value.number_integer &lt;= std::numeric_limits&lt;int32_t&gt;::max())</div><div class="line"><a name="l06728"></a><span class="lineno"> 6728</span>&#160; {</div><div class="line"><a name="l06729"></a><span class="lineno"> 6729</span>&#160; <span class="comment">// int 32</span></div><div class="line"><a name="l06730"></a><span class="lineno"> 6730</span>&#160; v.push_back(0xd2);</div><div class="line"><a name="l06731"></a><span class="lineno"> 6731</span>&#160; add_to_vector(v, 4, j.m_value.number_integer);</div><div class="line"><a name="l06732"></a><span class="lineno"> 6732</span>&#160; }</div><div class="line"><a name="l06733"></a><span class="lineno"> 6733</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= std::numeric_limits&lt;int64_t&gt;::min() and j.m_value.number_integer &lt;= std::numeric_limits&lt;int64_t&gt;::max())</div><div class="line"><a name="l06734"></a><span class="lineno"> 6734</span>&#160; {</div><div class="line"><a name="l06735"></a><span class="lineno"> 6735</span>&#160; <span class="comment">// int 64</span></div><div class="line"><a name="l06736"></a><span class="lineno"> 6736</span>&#160; v.push_back(0xd3);</div><div class="line"><a name="l06737"></a><span class="lineno"> 6737</span>&#160; add_to_vector(v, 8, j.m_value.number_integer);</div><div class="line"><a name="l06738"></a><span class="lineno"> 6738</span>&#160; }</div><div class="line"><a name="l06739"></a><span class="lineno"> 6739</span>&#160; }</div><div class="line"><a name="l06740"></a><span class="lineno"> 6740</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06741"></a><span class="lineno"> 6741</span>&#160; }</div><div class="line"><a name="l06742"></a><span class="lineno"> 6742</span>&#160;</div><div class="line"><a name="l06743"></a><span class="lineno"> 6743</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l06744"></a><span class="lineno"> 6744</span>&#160; {</div><div class="line"><a name="l06745"></a><span class="lineno"> 6745</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt; 128)</div><div class="line"><a name="l06746"></a><span class="lineno"> 6746</span>&#160; {</div><div class="line"><a name="l06747"></a><span class="lineno"> 6747</span>&#160; <span class="comment">// positive fixnum</span></div><div class="line"><a name="l06748"></a><span class="lineno"> 6748</span>&#160; add_to_vector(v, 1, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint8_t&gt;::max())</div><div class="line"><a name="l06751"></a><span class="lineno"> 6751</span>&#160; {</div><div class="line"><a name="l06752"></a><span class="lineno"> 6752</span>&#160; <span class="comment">// uint 8</span></div><div class="line"><a name="l06753"></a><span class="lineno"> 6753</span>&#160; v.push_back(0xcc);</div><div class="line"><a name="l06754"></a><span class="lineno"> 6754</span>&#160; add_to_vector(v, 1, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint16_t&gt;::max())</div><div class="line"><a name="l06757"></a><span class="lineno"> 6757</span>&#160; {</div><div class="line"><a name="l06758"></a><span class="lineno"> 6758</span>&#160; <span class="comment">// uint 16</span></div><div class="line"><a name="l06759"></a><span class="lineno"> 6759</span>&#160; v.push_back(0xcd);</div><div class="line"><a name="l06760"></a><span class="lineno"> 6760</span>&#160; add_to_vector(v, 2, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint32_t&gt;::max())</div><div class="line"><a name="l06763"></a><span class="lineno"> 6763</span>&#160; {</div><div class="line"><a name="l06764"></a><span class="lineno"> 6764</span>&#160; <span class="comment">// uint 32</span></div><div class="line"><a name="l06765"></a><span class="lineno"> 6765</span>&#160; v.push_back(0xce);</div><div class="line"><a name="l06766"></a><span class="lineno"> 6766</span>&#160; add_to_vector(v, 4, j.m_value.number_unsigned);</div><div class="line"><a name="l06767"></a><span class="lineno"> 6767</span>&#160; }</div><div class="line"><a name="l06768"></a><span class="lineno"> 6768</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= std::numeric_limits&lt;uint64_t&gt;::max())</div><div class="line"><a name="l06769"></a><span class="lineno"> 6769</span>&#160; {</div><div class="line"><a name="l06770"></a><span class="lineno"> 6770</span>&#160; <span class="comment">// uint 64</span></div><div class="line"><a name="l06771"></a><span class="lineno"> 6771</span>&#160; v.push_back(0xcf);</div><div class="line"><a name="l06772"></a><span class="lineno"> 6772</span>&#160; add_to_vector(v, 8, j.m_value.number_unsigned);</div><div class="line"><a name="l06773"></a><span class="lineno"> 6773</span>&#160; }</div><div class="line"><a name="l06774"></a><span class="lineno"> 6774</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l06777"></a><span class="lineno"> 6777</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l06778"></a><span class="lineno"> 6778</span>&#160; {</div><div class="line"><a name="l06779"></a><span class="lineno"> 6779</span>&#160; <span class="comment">// float 64</span></div><div class="line"><a name="l06780"></a><span class="lineno"> 6780</span>&#160; v.push_back(0xcb);</div><div class="line"><a name="l06781"></a><span class="lineno"> 6781</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* helper = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(&amp;(j.m_value.number_float));</div><div class="line"><a name="l06782"></a><span class="lineno"> 6782</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 8; ++i)</div><div class="line"><a name="l06783"></a><span class="lineno"> 6783</span>&#160; {</div><div class="line"><a name="l06784"></a><span class="lineno"> 6784</span>&#160; v.push_back(helper[7 - i]);</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">break</span>;</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;</div><div class="line"><a name="l06789"></a><span class="lineno"> 6789</span>&#160; <span class="keywordflow">case</span> value_t::string:</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; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.string-&gt;size();</div><div class="line"><a name="l06792"></a><span class="lineno"> 6792</span>&#160; <span class="keywordflow">if</span> (N &lt;= 31)</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; <span class="comment">// fixstr</span></div><div class="line"><a name="l06795"></a><span class="lineno"> 6795</span>&#160; v.push_back(static_cast&lt;uint8_t&gt;(0xa0 | N));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 255)</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; <span class="comment">// str 8</span></div><div class="line"><a name="l06800"></a><span class="lineno"> 6800</span>&#160; v.push_back(0xd9);</div><div class="line"><a name="l06801"></a><span class="lineno"> 6801</span>&#160; add_to_vector(v, 1, N);</div><div class="line"><a name="l06802"></a><span class="lineno"> 6802</span>&#160; }</div><div class="line"><a name="l06803"></a><span class="lineno"> 6803</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 65535)</div><div class="line"><a name="l06804"></a><span class="lineno"> 6804</span>&#160; {</div><div class="line"><a name="l06805"></a><span class="lineno"> 6805</span>&#160; <span class="comment">// str 16</span></div><div class="line"><a name="l06806"></a><span class="lineno"> 6806</span>&#160; v.push_back(0xda);</div><div class="line"><a name="l06807"></a><span class="lineno"> 6807</span>&#160; add_to_vector(v, 2, N);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 4294967295)</div><div class="line"><a name="l06810"></a><span class="lineno"> 6810</span>&#160; {</div><div class="line"><a name="l06811"></a><span class="lineno"> 6811</span>&#160; <span class="comment">// str 32</span></div><div class="line"><a name="l06812"></a><span class="lineno"> 6812</span>&#160; v.push_back(0xdb);</div><div class="line"><a name="l06813"></a><span class="lineno"> 6813</span>&#160; add_to_vector(v, 4, N);</div><div class="line"><a name="l06814"></a><span class="lineno"> 6814</span>&#160; }</div><div class="line"><a name="l06815"></a><span class="lineno"> 6815</span>&#160;</div><div class="line"><a name="l06816"></a><span class="lineno"> 6816</span>&#160; <span class="comment">// append string</span></div><div class="line"><a name="l06817"></a><span class="lineno"> 6817</span>&#160; std::copy(j.m_value.string-&gt;begin(), j.m_value.string-&gt;end(),</div><div class="line"><a name="l06818"></a><span class="lineno"> 6818</span>&#160; std::back_inserter(v));</div><div class="line"><a name="l06819"></a><span class="lineno"> 6819</span>&#160; <span class="keywordflow">break</span>;</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; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l06823"></a><span class="lineno"> 6823</span>&#160; {</div><div class="line"><a name="l06824"></a><span class="lineno"> 6824</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.array-&gt;size();</div><div class="line"><a name="l06825"></a><span class="lineno"> 6825</span>&#160; <span class="keywordflow">if</span> (N &lt;= 15)</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="comment">// fixarray</span></div><div class="line"><a name="l06828"></a><span class="lineno"> 6828</span>&#160; v.push_back(static_cast&lt;uint8_t&gt;(0x90 | N));</div><div class="line"><a name="l06829"></a><span class="lineno"> 6829</span>&#160; }</div><div class="line"><a name="l06830"></a><span class="lineno"> 6830</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffff)</div><div class="line"><a name="l06831"></a><span class="lineno"> 6831</span>&#160; {</div><div class="line"><a name="l06832"></a><span class="lineno"> 6832</span>&#160; <span class="comment">// array 16</span></div><div class="line"><a name="l06833"></a><span class="lineno"> 6833</span>&#160; v.push_back(0xdc);</div><div class="line"><a name="l06834"></a><span class="lineno"> 6834</span>&#160; add_to_vector(v, 2, N);</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">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffff)</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="comment">// array 32</span></div><div class="line"><a name="l06839"></a><span class="lineno"> 6839</span>&#160; v.push_back(0xdd);</div><div class="line"><a name="l06840"></a><span class="lineno"> 6840</span>&#160; add_to_vector(v, 4, N);</div><div class="line"><a name="l06841"></a><span class="lineno"> 6841</span>&#160; }</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; <span class="comment">// append each element</span></div><div class="line"><a name="l06844"></a><span class="lineno"> 6844</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; el : *j.m_value.array)</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; to_msgpack_internal(el, v);</div><div class="line"><a name="l06847"></a><span class="lineno"> 6847</span>&#160; }</div><div class="line"><a name="l06848"></a><span class="lineno"> 6848</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l06851"></a><span class="lineno"> 6851</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l06852"></a><span class="lineno"> 6852</span>&#160; {</div><div class="line"><a name="l06853"></a><span class="lineno"> 6853</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.object-&gt;size();</div><div class="line"><a name="l06854"></a><span class="lineno"> 6854</span>&#160; <span class="keywordflow">if</span> (N &lt;= 15)</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; <span class="comment">// fixmap</span></div><div class="line"><a name="l06857"></a><span class="lineno"> 6857</span>&#160; v.push_back(static_cast&lt;uint8_t&gt;(0x80 | (N &amp; 0xf)));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 65535)</div><div class="line"><a name="l06860"></a><span class="lineno"> 6860</span>&#160; {</div><div class="line"><a name="l06861"></a><span class="lineno"> 6861</span>&#160; <span class="comment">// map 16</span></div><div class="line"><a name="l06862"></a><span class="lineno"> 6862</span>&#160; v.push_back(0xde);</div><div class="line"><a name="l06863"></a><span class="lineno"> 6863</span>&#160; add_to_vector(v, 2, N);</div><div class="line"><a name="l06864"></a><span class="lineno"> 6864</span>&#160; }</div><div class="line"><a name="l06865"></a><span class="lineno"> 6865</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 4294967295)</div><div class="line"><a name="l06866"></a><span class="lineno"> 6866</span>&#160; {</div><div class="line"><a name="l06867"></a><span class="lineno"> 6867</span>&#160; <span class="comment">// map 32</span></div><div class="line"><a name="l06868"></a><span class="lineno"> 6868</span>&#160; v.push_back(0xdf);</div><div class="line"><a name="l06869"></a><span class="lineno"> 6869</span>&#160; add_to_vector(v, 4, N);</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;</div><div class="line"><a name="l06872"></a><span class="lineno"> 6872</span>&#160; <span class="comment">// append each element</span></div><div class="line"><a name="l06873"></a><span class="lineno"> 6873</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; el : *j.m_value.object)</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; to_msgpack_internal(el.first, v);</div><div class="line"><a name="l06876"></a><span class="lineno"> 6876</span>&#160; to_msgpack_internal(el.second, v);</div><div class="line"><a name="l06877"></a><span class="lineno"> 6877</span>&#160; }</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">default</span>:</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; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06884"></a><span class="lineno"> 6884</span>&#160; }</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;</div><div class="line"><a name="l06898"></a><span class="lineno"> 6898</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> to_cbor_internal(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j, std::vector&lt;uint8_t&gt;&amp; v)</div><div class="line"><a name="l06899"></a><span class="lineno"> 6899</span>&#160; {</div><div class="line"><a name="l06900"></a><span class="lineno"> 6900</span>&#160; <span class="keywordflow">switch</span> (j.<a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>())</div><div class="line"><a name="l06901"></a><span class="lineno"> 6901</span>&#160; {</div><div class="line"><a name="l06902"></a><span class="lineno"> 6902</span>&#160; <span class="keywordflow">case</span> value_t::null:</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; v.push_back(0xf6);</div><div class="line"><a name="l06905"></a><span class="lineno"> 6905</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06906"></a><span class="lineno"> 6906</span>&#160; }</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; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l06909"></a><span class="lineno"> 6909</span>&#160; {</div><div class="line"><a name="l06910"></a><span class="lineno"> 6910</span>&#160; v.push_back(j.m_value.boolean ? 0xf5 : 0xf4);</div><div class="line"><a name="l06911"></a><span class="lineno"> 6911</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06912"></a><span class="lineno"> 6912</span>&#160; }</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; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l06915"></a><span class="lineno"> 6915</span>&#160; {</div><div class="line"><a name="l06916"></a><span class="lineno"> 6916</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= 0)</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="comment">// CBOR does not differentiate between positive signed</span></div><div class="line"><a name="l06919"></a><span class="lineno"> 6919</span>&#160; <span class="comment">// integers and unsigned integers. Therefore, we used the</span></div><div class="line"><a name="l06920"></a><span class="lineno"> 6920</span>&#160; <span class="comment">// code from the value_t::number_unsigned case here.</span></div><div class="line"><a name="l06921"></a><span class="lineno"> 6921</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_integer &lt;= 0x17)</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; add_to_vector(v, 1, j.m_value.number_integer);</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">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &lt;= std::numeric_limits&lt;uint8_t&gt;::max())</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; v.push_back(0x18);</div><div class="line"><a name="l06928"></a><span class="lineno"> 6928</span>&#160; <span class="comment">// one-byte uint8_t</span></div><div class="line"><a name="l06929"></a><span class="lineno"> 6929</span>&#160; add_to_vector(v, 1, j.m_value.number_integer);</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">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &lt;= std::numeric_limits&lt;uint16_t&gt;::max())</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; v.push_back(0x19);</div><div class="line"><a name="l06934"></a><span class="lineno"> 6934</span>&#160; <span class="comment">// two-byte uint16_t</span></div><div class="line"><a name="l06935"></a><span class="lineno"> 6935</span>&#160; add_to_vector(v, 2, j.m_value.number_integer);</div><div class="line"><a name="l06936"></a><span class="lineno"> 6936</span>&#160; }</div><div class="line"><a name="l06937"></a><span class="lineno"> 6937</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_integer &lt;= std::numeric_limits&lt;uint32_t&gt;::max())</div><div class="line"><a name="l06938"></a><span class="lineno"> 6938</span>&#160; {</div><div class="line"><a name="l06939"></a><span class="lineno"> 6939</span>&#160; v.push_back(0x1a);</div><div class="line"><a name="l06940"></a><span class="lineno"> 6940</span>&#160; <span class="comment">// four-byte uint32_t</span></div><div class="line"><a name="l06941"></a><span class="lineno"> 6941</span>&#160; add_to_vector(v, 4, j.m_value.number_integer);</div><div class="line"><a name="l06942"></a><span class="lineno"> 6942</span>&#160; }</div><div class="line"><a name="l06943"></a><span class="lineno"> 6943</span>&#160; <span class="keywordflow">else</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; v.push_back(0x1b);</div><div class="line"><a name="l06946"></a><span class="lineno"> 6946</span>&#160; <span class="comment">// eight-byte uint64_t</span></div><div class="line"><a name="l06947"></a><span class="lineno"> 6947</span>&#160; add_to_vector(v, 8, j.m_value.number_integer);</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; }</div><div class="line"><a name="l06950"></a><span class="lineno"> 6950</span>&#160; <span class="keywordflow">else</span></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; <span class="comment">// The conversions below encode the sign in the first</span></div><div class="line"><a name="l06953"></a><span class="lineno"> 6953</span>&#160; <span class="comment">// byte, and the value is converted to a positive number.</span></div><div class="line"><a name="l06954"></a><span class="lineno"> 6954</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> positive_number = -1 - j.m_value.number_integer;</div><div class="line"><a name="l06955"></a><span class="lineno"> 6955</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_integer &gt;= -24)</div><div class="line"><a name="l06956"></a><span class="lineno"> 6956</span>&#160; {</div><div class="line"><a name="l06957"></a><span class="lineno"> 6957</span>&#160; v.push_back(static_cast&lt;uint8_t&gt;(0x20 + positive_number));</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">else</span> <span class="keywordflow">if</span> (positive_number &lt;= std::numeric_limits&lt;uint8_t&gt;::max())</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="comment">// int 8</span></div><div class="line"><a name="l06962"></a><span class="lineno"> 6962</span>&#160; v.push_back(0x38);</div><div class="line"><a name="l06963"></a><span class="lineno"> 6963</span>&#160; add_to_vector(v, 1, positive_number);</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> <span class="keywordflow">if</span> (positive_number &lt;= std::numeric_limits&lt;uint16_t&gt;::max())</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="comment">// int 16</span></div><div class="line"><a name="l06968"></a><span class="lineno"> 6968</span>&#160; v.push_back(0x39);</div><div class="line"><a name="l06969"></a><span class="lineno"> 6969</span>&#160; add_to_vector(v, 2, positive_number);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (positive_number &lt;= std::numeric_limits&lt;uint32_t&gt;::max())</div><div class="line"><a name="l06972"></a><span class="lineno"> 6972</span>&#160; {</div><div class="line"><a name="l06973"></a><span class="lineno"> 6973</span>&#160; <span class="comment">// int 32</span></div><div class="line"><a name="l06974"></a><span class="lineno"> 6974</span>&#160; v.push_back(0x3a);</div><div class="line"><a name="l06975"></a><span class="lineno"> 6975</span>&#160; add_to_vector(v, 4, positive_number);</div><div class="line"><a name="l06976"></a><span class="lineno"> 6976</span>&#160; }</div><div class="line"><a name="l06977"></a><span class="lineno"> 6977</span>&#160; <span class="keywordflow">else</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="comment">// int 64</span></div><div class="line"><a name="l06980"></a><span class="lineno"> 6980</span>&#160; v.push_back(0x3b);</div><div class="line"><a name="l06981"></a><span class="lineno"> 6981</span>&#160; add_to_vector(v, 8, positive_number);</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="l06984"></a><span class="lineno"> 6984</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06985"></a><span class="lineno"> 6985</span>&#160; }</div><div class="line"><a name="l06986"></a><span class="lineno"> 6986</span>&#160;</div><div class="line"><a name="l06987"></a><span class="lineno"> 6987</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l06988"></a><span class="lineno"> 6988</span>&#160; {</div><div class="line"><a name="l06989"></a><span class="lineno"> 6989</span>&#160; <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= 0x17)</div><div class="line"><a name="l06990"></a><span class="lineno"> 6990</span>&#160; {</div><div class="line"><a name="l06991"></a><span class="lineno"> 6991</span>&#160; v.push_back(static_cast&lt;uint8_t&gt;(j.m_value.number_unsigned));</div><div class="line"><a name="l06992"></a><span class="lineno"> 6992</span>&#160; }</div><div class="line"><a name="l06993"></a><span class="lineno"> 6993</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= 0xff)</div><div class="line"><a name="l06994"></a><span class="lineno"> 6994</span>&#160; {</div><div class="line"><a name="l06995"></a><span class="lineno"> 6995</span>&#160; v.push_back(0x18);</div><div class="line"><a name="l06996"></a><span class="lineno"> 6996</span>&#160; <span class="comment">// one-byte uint8_t</span></div><div class="line"><a name="l06997"></a><span class="lineno"> 6997</span>&#160; add_to_vector(v, 1, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= 0xffff)</div><div class="line"><a name="l07000"></a><span class="lineno"> 7000</span>&#160; {</div><div class="line"><a name="l07001"></a><span class="lineno"> 7001</span>&#160; v.push_back(0x19);</div><div class="line"><a name="l07002"></a><span class="lineno"> 7002</span>&#160; <span class="comment">// two-byte uint16_t</span></div><div class="line"><a name="l07003"></a><span class="lineno"> 7003</span>&#160; add_to_vector(v, 2, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= 0xffffffff)</div><div class="line"><a name="l07006"></a><span class="lineno"> 7006</span>&#160; {</div><div class="line"><a name="l07007"></a><span class="lineno"> 7007</span>&#160; v.push_back(0x1a);</div><div class="line"><a name="l07008"></a><span class="lineno"> 7008</span>&#160; <span class="comment">// four-byte uint32_t</span></div><div class="line"><a name="l07009"></a><span class="lineno"> 7009</span>&#160; add_to_vector(v, 4, j.m_value.number_unsigned);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j.m_value.number_unsigned &lt;= 0xffffffffffffffff)</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; v.push_back(0x1b);</div><div class="line"><a name="l07014"></a><span class="lineno"> 7014</span>&#160; <span class="comment">// eight-byte uint64_t</span></div><div class="line"><a name="l07015"></a><span class="lineno"> 7015</span>&#160; add_to_vector(v, 8, j.m_value.number_unsigned);</div><div class="line"><a name="l07016"></a><span class="lineno"> 7016</span>&#160; }</div><div class="line"><a name="l07017"></a><span class="lineno"> 7017</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07018"></a><span class="lineno"> 7018</span>&#160; }</div><div class="line"><a name="l07019"></a><span class="lineno"> 7019</span>&#160;</div><div class="line"><a name="l07020"></a><span class="lineno"> 7020</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</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="comment">// Double-Precision Float</span></div><div class="line"><a name="l07023"></a><span class="lineno"> 7023</span>&#160; v.push_back(0xfb);</div><div class="line"><a name="l07024"></a><span class="lineno"> 7024</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>* helper = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(&amp;(j.m_value.number_float));</div><div class="line"><a name="l07025"></a><span class="lineno"> 7025</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 8; ++i)</div><div class="line"><a name="l07026"></a><span class="lineno"> 7026</span>&#160; {</div><div class="line"><a name="l07027"></a><span class="lineno"> 7027</span>&#160; v.push_back(helper[7 - i]);</div><div class="line"><a name="l07028"></a><span class="lineno"> 7028</span>&#160; }</div><div class="line"><a name="l07029"></a><span class="lineno"> 7029</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07030"></a><span class="lineno"> 7030</span>&#160; }</div><div class="line"><a name="l07031"></a><span class="lineno"> 7031</span>&#160;</div><div class="line"><a name="l07032"></a><span class="lineno"> 7032</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l07033"></a><span class="lineno"> 7033</span>&#160; {</div><div class="line"><a name="l07034"></a><span class="lineno"> 7034</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.string-&gt;size();</div><div class="line"><a name="l07035"></a><span class="lineno"> 7035</span>&#160; <span class="keywordflow">if</span> (N &lt;= 0x17)</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; v.push_back(0x60 + static_cast&lt;uint8_t&gt;(N)); <span class="comment">// 1 byte for string + size</span></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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xff)</div><div class="line"><a name="l07040"></a><span class="lineno"> 7040</span>&#160; {</div><div class="line"><a name="l07041"></a><span class="lineno"> 7041</span>&#160; v.push_back(0x78); <span class="comment">// one-byte uint8_t for N</span></div><div class="line"><a name="l07042"></a><span class="lineno"> 7042</span>&#160; add_to_vector(v, 1, N);</div><div class="line"><a name="l07043"></a><span class="lineno"> 7043</span>&#160; }</div><div class="line"><a name="l07044"></a><span class="lineno"> 7044</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffff)</div><div class="line"><a name="l07045"></a><span class="lineno"> 7045</span>&#160; {</div><div class="line"><a name="l07046"></a><span class="lineno"> 7046</span>&#160; v.push_back(0x79); <span class="comment">// two-byte uint16_t for N</span></div><div class="line"><a name="l07047"></a><span class="lineno"> 7047</span>&#160; add_to_vector(v, 2, N);</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">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffff)</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; v.push_back(0x7a); <span class="comment">// four-byte uint32_t for N</span></div><div class="line"><a name="l07052"></a><span class="lineno"> 7052</span>&#160; add_to_vector(v, 4, N);</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; <span class="comment">// LCOV_EXCL_START</span></div><div class="line"><a name="l07055"></a><span class="lineno"> 7055</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffffffffffff)</div><div class="line"><a name="l07056"></a><span class="lineno"> 7056</span>&#160; {</div><div class="line"><a name="l07057"></a><span class="lineno"> 7057</span>&#160; v.push_back(0x7b); <span class="comment">// eight-byte uint64_t for N</span></div><div class="line"><a name="l07058"></a><span class="lineno"> 7058</span>&#160; add_to_vector(v, 8, N);</div><div class="line"><a name="l07059"></a><span class="lineno"> 7059</span>&#160; }</div><div class="line"><a name="l07060"></a><span class="lineno"> 7060</span>&#160; <span class="comment">// LCOV_EXCL_STOP</span></div><div class="line"><a name="l07061"></a><span class="lineno"> 7061</span>&#160;</div><div class="line"><a name="l07062"></a><span class="lineno"> 7062</span>&#160; <span class="comment">// append string</span></div><div class="line"><a name="l07063"></a><span class="lineno"> 7063</span>&#160; std::copy(j.m_value.string-&gt;begin(), j.m_value.string-&gt;end(),</div><div class="line"><a name="l07064"></a><span class="lineno"> 7064</span>&#160; std::back_inserter(v));</div><div class="line"><a name="l07065"></a><span class="lineno"> 7065</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07066"></a><span class="lineno"> 7066</span>&#160; }</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">case</span> value_t::array:</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; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.array-&gt;size();</div><div class="line"><a name="l07071"></a><span class="lineno"> 7071</span>&#160; <span class="keywordflow">if</span> (N &lt;= 0x17)</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; v.push_back(0x80 + static_cast&lt;uint8_t&gt;(N)); <span class="comment">// 1 byte for array + size</span></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">else</span> <span class="keywordflow">if</span> (N &lt;= 0xff)</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; v.push_back(0x98); <span class="comment">// one-byte uint8_t for N</span></div><div class="line"><a name="l07078"></a><span class="lineno"> 7078</span>&#160; add_to_vector(v, 1, N);</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">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffff)</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; v.push_back(0x99); <span class="comment">// two-byte uint16_t for N</span></div><div class="line"><a name="l07083"></a><span class="lineno"> 7083</span>&#160; add_to_vector(v, 2, N);</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">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffff)</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; v.push_back(0x9a); <span class="comment">// four-byte uint32_t for N</span></div><div class="line"><a name="l07088"></a><span class="lineno"> 7088</span>&#160; add_to_vector(v, 4, N);</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; <span class="comment">// LCOV_EXCL_START</span></div><div class="line"><a name="l07091"></a><span class="lineno"> 7091</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffffffffffff)</div><div class="line"><a name="l07092"></a><span class="lineno"> 7092</span>&#160; {</div><div class="line"><a name="l07093"></a><span class="lineno"> 7093</span>&#160; v.push_back(0x9b); <span class="comment">// eight-byte uint64_t for N</span></div><div class="line"><a name="l07094"></a><span class="lineno"> 7094</span>&#160; add_to_vector(v, 8, N);</div><div class="line"><a name="l07095"></a><span class="lineno"> 7095</span>&#160; }</div><div class="line"><a name="l07096"></a><span class="lineno"> 7096</span>&#160; <span class="comment">// LCOV_EXCL_STOP</span></div><div class="line"><a name="l07097"></a><span class="lineno"> 7097</span>&#160;</div><div class="line"><a name="l07098"></a><span class="lineno"> 7098</span>&#160; <span class="comment">// append each element</span></div><div class="line"><a name="l07099"></a><span class="lineno"> 7099</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; el : *j.m_value.array)</div><div class="line"><a name="l07100"></a><span class="lineno"> 7100</span>&#160; {</div><div class="line"><a name="l07101"></a><span class="lineno"> 7101</span>&#160; to_cbor_internal(el, v);</div><div class="line"><a name="l07102"></a><span class="lineno"> 7102</span>&#160; }</div><div class="line"><a name="l07103"></a><span class="lineno"> 7103</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07104"></a><span class="lineno"> 7104</span>&#160; }</div><div class="line"><a name="l07105"></a><span class="lineno"> 7105</span>&#160;</div><div class="line"><a name="l07106"></a><span class="lineno"> 7106</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l07107"></a><span class="lineno"> 7107</span>&#160; {</div><div class="line"><a name="l07108"></a><span class="lineno"> 7108</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> N = j.m_value.object-&gt;size();</div><div class="line"><a name="l07109"></a><span class="lineno"> 7109</span>&#160; <span class="keywordflow">if</span> (N &lt;= 0x17)</div><div class="line"><a name="l07110"></a><span class="lineno"> 7110</span>&#160; {</div><div class="line"><a name="l07111"></a><span class="lineno"> 7111</span>&#160; v.push_back(0xa0 + static_cast&lt;uint8_t&gt;(N)); <span class="comment">// 1 byte for object + size</span></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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xff)</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; v.push_back(0xb8);</div><div class="line"><a name="l07116"></a><span class="lineno"> 7116</span>&#160; add_to_vector(v, 1, N); <span class="comment">// one-byte uint8_t for N</span></div><div class="line"><a name="l07117"></a><span class="lineno"> 7117</span>&#160; }</div><div class="line"><a name="l07118"></a><span class="lineno"> 7118</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffff)</div><div class="line"><a name="l07119"></a><span class="lineno"> 7119</span>&#160; {</div><div class="line"><a name="l07120"></a><span class="lineno"> 7120</span>&#160; v.push_back(0xb9);</div><div class="line"><a name="l07121"></a><span class="lineno"> 7121</span>&#160; add_to_vector(v, 2, N); <span class="comment">// two-byte uint16_t for N</span></div><div class="line"><a name="l07122"></a><span class="lineno"> 7122</span>&#160; }</div><div class="line"><a name="l07123"></a><span class="lineno"> 7123</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffff)</div><div class="line"><a name="l07124"></a><span class="lineno"> 7124</span>&#160; {</div><div class="line"><a name="l07125"></a><span class="lineno"> 7125</span>&#160; v.push_back(0xba);</div><div class="line"><a name="l07126"></a><span class="lineno"> 7126</span>&#160; add_to_vector(v, 4, N); <span class="comment">// four-byte uint32_t for N</span></div><div class="line"><a name="l07127"></a><span class="lineno"> 7127</span>&#160; }</div><div class="line"><a name="l07128"></a><span class="lineno"> 7128</span>&#160; <span class="comment">// LCOV_EXCL_START</span></div><div class="line"><a name="l07129"></a><span class="lineno"> 7129</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (N &lt;= 0xffffffffffffffff)</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; v.push_back(0xbb);</div><div class="line"><a name="l07132"></a><span class="lineno"> 7132</span>&#160; add_to_vector(v, 8, N); <span class="comment">// eight-byte uint64_t for N</span></div><div class="line"><a name="l07133"></a><span class="lineno"> 7133</span>&#160; }</div><div class="line"><a name="l07134"></a><span class="lineno"> 7134</span>&#160; <span class="comment">// LCOV_EXCL_STOP</span></div><div class="line"><a name="l07135"></a><span class="lineno"> 7135</span>&#160;</div><div class="line"><a name="l07136"></a><span class="lineno"> 7136</span>&#160; <span class="comment">// append each element</span></div><div class="line"><a name="l07137"></a><span class="lineno"> 7137</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; el : *j.m_value.object)</div><div class="line"><a name="l07138"></a><span class="lineno"> 7138</span>&#160; {</div><div class="line"><a name="l07139"></a><span class="lineno"> 7139</span>&#160; to_cbor_internal(el.first, v);</div><div class="line"><a name="l07140"></a><span class="lineno"> 7140</span>&#160; to_cbor_internal(el.second, v);</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; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07143"></a><span class="lineno"> 7143</span>&#160; }</div><div class="line"><a name="l07144"></a><span class="lineno"> 7144</span>&#160;</div><div class="line"><a name="l07145"></a><span class="lineno"> 7145</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07146"></a><span class="lineno"> 7146</span>&#160; {</div><div class="line"><a name="l07147"></a><span class="lineno"> 7147</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07148"></a><span class="lineno"> 7148</span>&#160; }</div><div class="line"><a name="l07149"></a><span class="lineno"> 7149</span>&#160; }</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="l07152"></a><span class="lineno"> 7152</span>&#160;</div><div class="line"><a name="l07153"></a><span class="lineno"> 7153</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l07154"></a><span class="lineno"> 7154</span>&#160;<span class="comment"> @brief checks if given lengths do not exceed the size of a given vector</span></div><div class="line"><a name="l07155"></a><span class="lineno"> 7155</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07156"></a><span class="lineno"> 7156</span>&#160;<span class="comment"> To secure the access to the byte vector during CBOR/MessagePack</span></div><div class="line"><a name="l07157"></a><span class="lineno"> 7157</span>&#160;<span class="comment"> deserialization, bytes are copied from the vector into buffers. This</span></div><div class="line"><a name="l07158"></a><span class="lineno"> 7158</span>&#160;<span class="comment"> function checks if the number of bytes to copy (@a len) does not exceed</span></div><div class="line"><a name="l07159"></a><span class="lineno"> 7159</span>&#160;<span class="comment"> the size @s size of the vector. Additionally, an @a offset is given from</span></div><div class="line"><a name="l07160"></a><span class="lineno"> 7160</span>&#160;<span class="comment"> where to start reading the bytes.</span></div><div class="line"><a name="l07161"></a><span class="lineno"> 7161</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07162"></a><span class="lineno"> 7162</span>&#160;<span class="comment"> This function checks whether reading the bytes is safe; that is, offset is</span></div><div class="line"><a name="l07163"></a><span class="lineno"> 7163</span>&#160;<span class="comment"> a valid index in the vector, offset+len</span></div><div class="line"><a name="l07164"></a><span class="lineno"> 7164</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07165"></a><span class="lineno"> 7165</span>&#160;<span class="comment"> @param[in] size size of the byte vector</span></div><div class="line"><a name="l07166"></a><span class="lineno"> 7166</span>&#160;<span class="comment"> @param[in] len number of bytes to read</span></div><div class="line"><a name="l07167"></a><span class="lineno"> 7167</span>&#160;<span class="comment"> @param[in] offset offset where to start reading</span></div><div class="line"><a name="l07168"></a><span class="lineno"> 7168</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07169"></a><span class="lineno"> 7169</span>&#160;<span class="comment"> vec: x x x x x X X X X X</span></div><div class="line"><a name="l07170"></a><span class="lineno"> 7170</span>&#160;<span class="comment"> ^ ^ ^</span></div><div class="line"><a name="l07171"></a><span class="lineno"> 7171</span>&#160;<span class="comment"> 0 offset len</span></div><div class="line"><a name="l07172"></a><span class="lineno"> 7172</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07173"></a><span class="lineno"> 7173</span>&#160;<span class="comment"> @throws out_of_range if `len &gt; v.size()`</span></div><div class="line"><a name="l07174"></a><span class="lineno"> 7174</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l07175"></a><span class="lineno"> 7175</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> check_length(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset)</div><div class="line"><a name="l07176"></a><span class="lineno"> 7176</span>&#160; {</div><div class="line"><a name="l07177"></a><span class="lineno"> 7177</span>&#160; <span class="comment">// simple case: requested length is greater than the vector&#39;s length</span></div><div class="line"><a name="l07178"></a><span class="lineno"> 7178</span>&#160; <span class="keywordflow">if</span> (len &gt; size or offset &gt; size)</div><div class="line"><a name="l07179"></a><span class="lineno"> 7179</span>&#160; {</div><div class="line"><a name="l07180"></a><span class="lineno"> 7180</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;len out of range&quot;</span>));</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;</div><div class="line"><a name="l07183"></a><span class="lineno"> 7183</span>&#160; <span class="comment">// second case: adding offset would result in overflow</span></div><div class="line"><a name="l07184"></a><span class="lineno"> 7184</span>&#160; <span class="keywordflow">if</span> ((size &gt; (std::numeric_limits&lt;size_t&gt;::max() - offset)))</div><div class="line"><a name="l07185"></a><span class="lineno"> 7185</span>&#160; {</div><div class="line"><a name="l07186"></a><span class="lineno"> 7186</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;len+offset out of range&quot;</span>));</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="comment">// last case: reading past the end of the vector</span></div><div class="line"><a name="l07190"></a><span class="lineno"> 7190</span>&#160; <span class="keywordflow">if</span> (len + offset &gt; size)</div><div class="line"><a name="l07191"></a><span class="lineno"> 7191</span>&#160; {</div><div class="line"><a name="l07192"></a><span class="lineno"> 7192</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;len+offset out of range&quot;</span>));</div><div class="line"><a name="l07193"></a><span class="lineno"> 7193</span>&#160; }</div><div class="line"><a name="l07194"></a><span class="lineno"> 7194</span>&#160; }</div><div class="line"><a name="l07195"></a><span class="lineno"> 7195</span>&#160;</div><div class="line"><a name="l07210"></a><span class="lineno"> 7210</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> from_msgpack_internal(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; v, <span class="keywordtype">size_t</span>&amp; idx)</div><div class="line"><a name="l07211"></a><span class="lineno"> 7211</span>&#160; {</div><div class="line"><a name="l07212"></a><span class="lineno"> 7212</span>&#160; <span class="comment">// make sure reading 1 byte is safe</span></div><div class="line"><a name="l07213"></a><span class="lineno"> 7213</span>&#160; check_length(v.size(), 1, idx);</div><div class="line"><a name="l07214"></a><span class="lineno"> 7214</span>&#160;</div><div class="line"><a name="l07215"></a><span class="lineno"> 7215</span>&#160; <span class="comment">// store and increment index</span></div><div class="line"><a name="l07216"></a><span class="lineno"> 7216</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> current_idx = idx++;</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="keywordflow">if</span> (v[current_idx] &lt;= 0xbf)</div><div class="line"><a name="l07219"></a><span class="lineno"> 7219</span>&#160; {</div><div class="line"><a name="l07220"></a><span class="lineno"> 7220</span>&#160; <span class="keywordflow">if</span> (v[current_idx] &lt;= 0x7f) <span class="comment">// positive fixint</span></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; <span class="keywordflow">return</span> v[current_idx];</div><div class="line"><a name="l07223"></a><span class="lineno"> 7223</span>&#160; }</div><div class="line"><a name="l07224"></a><span class="lineno"> 7224</span>&#160; <span class="keywordflow">if</span> (v[current_idx] &lt;= 0x8f) <span class="comment">// fixmap</span></div><div class="line"><a name="l07225"></a><span class="lineno"> 7225</span>&#160; {</div><div class="line"><a name="l07226"></a><span class="lineno"> 7226</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07227"></a><span class="lineno"> 7227</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = v[current_idx] &amp; 0x0f;</div><div class="line"><a name="l07228"></a><span class="lineno"> 7228</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07229"></a><span class="lineno"> 7229</span>&#160; {</div><div class="line"><a name="l07230"></a><span class="lineno"> 7230</span>&#160; std::string key = from_msgpack_internal(v, idx);</div><div class="line"><a name="l07231"></a><span class="lineno"> 7231</span>&#160; result[key] = from_msgpack_internal(v, idx);</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">return</span> result;</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">else</span> <span class="keywordflow">if</span> (v[current_idx] &lt;= 0x9f) <span class="comment">// fixarray</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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07238"></a><span class="lineno"> 7238</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = v[current_idx] &amp; 0x0f;</div><div class="line"><a name="l07239"></a><span class="lineno"> 7239</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07240"></a><span class="lineno"> 7240</span>&#160; {</div><div class="line"><a name="l07241"></a><span class="lineno"> 7241</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_msgpack_internal(v, idx));</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">return</span> result;</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">else</span> <span class="comment">// fixstr</span></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; <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = v[current_idx] &amp; 0x1f;</div><div class="line"><a name="l07248"></a><span class="lineno"> 7248</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 1;</div><div class="line"><a name="l07249"></a><span class="lineno"> 7249</span>&#160; idx += len; <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07250"></a><span class="lineno"> 7250</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07251"></a><span class="lineno"> 7251</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07252"></a><span class="lineno"> 7252</span>&#160; }</div><div class="line"><a name="l07253"></a><span class="lineno"> 7253</span>&#160; }</div><div class="line"><a name="l07254"></a><span class="lineno"> 7254</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v[current_idx] &gt;= 0xe0) <span class="comment">// negative fixint</span></div><div class="line"><a name="l07255"></a><span class="lineno"> 7255</span>&#160; {</div><div class="line"><a name="l07256"></a><span class="lineno"> 7256</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>int8_t<span class="keyword">&gt;</span>(v[current_idx]);</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">else</span></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">switch</span> (v[current_idx])</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">case</span> 0xc0: <span class="comment">// nil</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; <span class="keywordflow">return</span> value_t::null;</div><div class="line"><a name="l07265"></a><span class="lineno"> 7265</span>&#160; }</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">case</span> 0xc2: <span class="comment">// false</span></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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l07270"></a><span class="lineno"> 7270</span>&#160; }</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">case</span> 0xc3: <span class="comment">// true</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; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07275"></a><span class="lineno"> 7275</span>&#160; }</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">case</span> 0xca: <span class="comment">// float 32</span></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="comment">// copy bytes in reverse order into the double variable</span></div><div class="line"><a name="l07280"></a><span class="lineno"> 7280</span>&#160; <span class="keywordtype">float</span> res;</div><div class="line"><a name="l07281"></a><span class="lineno"> 7281</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> byte = 0; byte &lt; <span class="keyword">sizeof</span>(float); ++byte)</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="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(&amp;res)[<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) - byte - 1] = v.at(current_idx + 1 + byte);</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; idx += <span class="keyword">sizeof</span>(float); <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07286"></a><span class="lineno"> 7286</span>&#160; <span class="keywordflow">return</span> res;</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="l07289"></a><span class="lineno"> 7289</span>&#160; <span class="keywordflow">case</span> 0xcb: <span class="comment">// float 64</span></div><div class="line"><a name="l07290"></a><span class="lineno"> 7290</span>&#160; {</div><div class="line"><a name="l07291"></a><span class="lineno"> 7291</span>&#160; <span class="comment">// copy bytes in reverse order into the double variable</span></div><div class="line"><a name="l07292"></a><span class="lineno"> 7292</span>&#160; <span class="keywordtype">double</span> res;</div><div class="line"><a name="l07293"></a><span class="lineno"> 7293</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> byte = 0; byte &lt; <span class="keyword">sizeof</span>(double); ++byte)</div><div class="line"><a name="l07294"></a><span class="lineno"> 7294</span>&#160; {</div><div class="line"><a name="l07295"></a><span class="lineno"> 7295</span>&#160; <span class="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(&amp;res)[<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) - byte - 1] = v.at(current_idx + 1 + byte);</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; idx += <span class="keyword">sizeof</span>(double); <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07298"></a><span class="lineno"> 7298</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l07299"></a><span class="lineno"> 7299</span>&#160; }</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">case</span> 0xcc: <span class="comment">// uint 8</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; idx += 1; <span class="comment">// skip content byte</span></div><div class="line"><a name="l07304"></a><span class="lineno"> 7304</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint8_t&gt;(v, current_idx);</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="l07307"></a><span class="lineno"> 7307</span>&#160; <span class="keywordflow">case</span> 0xcd: <span class="comment">// uint 16</span></div><div class="line"><a name="l07308"></a><span class="lineno"> 7308</span>&#160; {</div><div class="line"><a name="l07309"></a><span class="lineno"> 7309</span>&#160; idx += 2; <span class="comment">// skip 2 content bytes</span></div><div class="line"><a name="l07310"></a><span class="lineno"> 7310</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint16_t&gt;(v, current_idx);</div><div class="line"><a name="l07311"></a><span class="lineno"> 7311</span>&#160; }</div><div class="line"><a name="l07312"></a><span class="lineno"> 7312</span>&#160;</div><div class="line"><a name="l07313"></a><span class="lineno"> 7313</span>&#160; <span class="keywordflow">case</span> 0xce: <span class="comment">// uint 32</span></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; idx += 4; <span class="comment">// skip 4 content bytes</span></div><div class="line"><a name="l07316"></a><span class="lineno"> 7316</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint32_t&gt;(v, current_idx);</div><div class="line"><a name="l07317"></a><span class="lineno"> 7317</span>&#160; }</div><div class="line"><a name="l07318"></a><span class="lineno"> 7318</span>&#160;</div><div class="line"><a name="l07319"></a><span class="lineno"> 7319</span>&#160; <span class="keywordflow">case</span> 0xcf: <span class="comment">// uint 64</span></div><div class="line"><a name="l07320"></a><span class="lineno"> 7320</span>&#160; {</div><div class="line"><a name="l07321"></a><span class="lineno"> 7321</span>&#160; idx += 8; <span class="comment">// skip 8 content bytes</span></div><div class="line"><a name="l07322"></a><span class="lineno"> 7322</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint64_t&gt;(v, current_idx);</div><div class="line"><a name="l07323"></a><span class="lineno"> 7323</span>&#160; }</div><div class="line"><a name="l07324"></a><span class="lineno"> 7324</span>&#160;</div><div class="line"><a name="l07325"></a><span class="lineno"> 7325</span>&#160; <span class="keywordflow">case</span> 0xd0: <span class="comment">// int 8</span></div><div class="line"><a name="l07326"></a><span class="lineno"> 7326</span>&#160; {</div><div class="line"><a name="l07327"></a><span class="lineno"> 7327</span>&#160; idx += 1; <span class="comment">// skip content byte</span></div><div class="line"><a name="l07328"></a><span class="lineno"> 7328</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;int8_t&gt;(v, current_idx);</div><div class="line"><a name="l07329"></a><span class="lineno"> 7329</span>&#160; }</div><div class="line"><a name="l07330"></a><span class="lineno"> 7330</span>&#160;</div><div class="line"><a name="l07331"></a><span class="lineno"> 7331</span>&#160; <span class="keywordflow">case</span> 0xd1: <span class="comment">// int 16</span></div><div class="line"><a name="l07332"></a><span class="lineno"> 7332</span>&#160; {</div><div class="line"><a name="l07333"></a><span class="lineno"> 7333</span>&#160; idx += 2; <span class="comment">// skip 2 content bytes</span></div><div class="line"><a name="l07334"></a><span class="lineno"> 7334</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;int16_t&gt;(v, current_idx);</div><div class="line"><a name="l07335"></a><span class="lineno"> 7335</span>&#160; }</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="keywordflow">case</span> 0xd2: <span class="comment">// int 32</span></div><div class="line"><a name="l07338"></a><span class="lineno"> 7338</span>&#160; {</div><div class="line"><a name="l07339"></a><span class="lineno"> 7339</span>&#160; idx += 4; <span class="comment">// skip 4 content bytes</span></div><div class="line"><a name="l07340"></a><span class="lineno"> 7340</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;int32_t&gt;(v, current_idx);</div><div class="line"><a name="l07341"></a><span class="lineno"> 7341</span>&#160; }</div><div class="line"><a name="l07342"></a><span class="lineno"> 7342</span>&#160;</div><div class="line"><a name="l07343"></a><span class="lineno"> 7343</span>&#160; <span class="keywordflow">case</span> 0xd3: <span class="comment">// int 64</span></div><div class="line"><a name="l07344"></a><span class="lineno"> 7344</span>&#160; {</div><div class="line"><a name="l07345"></a><span class="lineno"> 7345</span>&#160; idx += 8; <span class="comment">// skip 8 content bytes</span></div><div class="line"><a name="l07346"></a><span class="lineno"> 7346</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;int64_t&gt;(v, current_idx);</div><div class="line"><a name="l07347"></a><span class="lineno"> 7347</span>&#160; }</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; <span class="keywordflow">case</span> 0xd9: <span class="comment">// str 8</span></div><div class="line"><a name="l07350"></a><span class="lineno"> 7350</span>&#160; {</div><div class="line"><a name="l07351"></a><span class="lineno"> 7351</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint8_t&gt;(v, current_idx));</div><div class="line"><a name="l07352"></a><span class="lineno"> 7352</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 2;</div><div class="line"><a name="l07353"></a><span class="lineno"> 7353</span>&#160; idx += len + 1; <span class="comment">// skip size byte + content bytes</span></div><div class="line"><a name="l07354"></a><span class="lineno"> 7354</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07355"></a><span class="lineno"> 7355</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07356"></a><span class="lineno"> 7356</span>&#160; }</div><div class="line"><a name="l07357"></a><span class="lineno"> 7357</span>&#160;</div><div class="line"><a name="l07358"></a><span class="lineno"> 7358</span>&#160; <span class="keywordflow">case</span> 0xda: <span class="comment">// str 16</span></div><div class="line"><a name="l07359"></a><span class="lineno"> 7359</span>&#160; {</div><div class="line"><a name="l07360"></a><span class="lineno"> 7360</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07361"></a><span class="lineno"> 7361</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 3;</div><div class="line"><a name="l07362"></a><span class="lineno"> 7362</span>&#160; idx += len + 2; <span class="comment">// skip 2 size bytes + content bytes</span></div><div class="line"><a name="l07363"></a><span class="lineno"> 7363</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07364"></a><span class="lineno"> 7364</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</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="l07367"></a><span class="lineno"> 7367</span>&#160; <span class="keywordflow">case</span> 0xdb: <span class="comment">// str 32</span></div><div class="line"><a name="l07368"></a><span class="lineno"> 7368</span>&#160; {</div><div class="line"><a name="l07369"></a><span class="lineno"> 7369</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07370"></a><span class="lineno"> 7370</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 5;</div><div class="line"><a name="l07371"></a><span class="lineno"> 7371</span>&#160; idx += len + 4; <span class="comment">// skip 4 size bytes + content bytes</span></div><div class="line"><a name="l07372"></a><span class="lineno"> 7372</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07373"></a><span class="lineno"> 7373</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07374"></a><span class="lineno"> 7374</span>&#160; }</div><div class="line"><a name="l07375"></a><span class="lineno"> 7375</span>&#160;</div><div class="line"><a name="l07376"></a><span class="lineno"> 7376</span>&#160; <span class="keywordflow">case</span> 0xdc: <span class="comment">// array 16</span></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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07379"></a><span class="lineno"> 7379</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07380"></a><span class="lineno"> 7380</span>&#160; idx += 2; <span class="comment">// skip 2 size bytes</span></div><div class="line"><a name="l07381"></a><span class="lineno"> 7381</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07382"></a><span class="lineno"> 7382</span>&#160; {</div><div class="line"><a name="l07383"></a><span class="lineno"> 7383</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_msgpack_internal(v, idx));</div><div class="line"><a name="l07384"></a><span class="lineno"> 7384</span>&#160; }</div><div class="line"><a name="l07385"></a><span class="lineno"> 7385</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07386"></a><span class="lineno"> 7386</span>&#160; }</div><div class="line"><a name="l07387"></a><span class="lineno"> 7387</span>&#160;</div><div class="line"><a name="l07388"></a><span class="lineno"> 7388</span>&#160; <span class="keywordflow">case</span> 0xdd: <span class="comment">// array 32</span></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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07391"></a><span class="lineno"> 7391</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07392"></a><span class="lineno"> 7392</span>&#160; idx += 4; <span class="comment">// skip 4 size bytes</span></div><div class="line"><a name="l07393"></a><span class="lineno"> 7393</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07394"></a><span class="lineno"> 7394</span>&#160; {</div><div class="line"><a name="l07395"></a><span class="lineno"> 7395</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_msgpack_internal(v, idx));</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; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07398"></a><span class="lineno"> 7398</span>&#160; }</div><div class="line"><a name="l07399"></a><span class="lineno"> 7399</span>&#160;</div><div class="line"><a name="l07400"></a><span class="lineno"> 7400</span>&#160; <span class="keywordflow">case</span> 0xde: <span class="comment">// map 16</span></div><div class="line"><a name="l07401"></a><span class="lineno"> 7401</span>&#160; {</div><div class="line"><a name="l07402"></a><span class="lineno"> 7402</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07403"></a><span class="lineno"> 7403</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07404"></a><span class="lineno"> 7404</span>&#160; idx += 2; <span class="comment">// skip 2 size bytes</span></div><div class="line"><a name="l07405"></a><span class="lineno"> 7405</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07406"></a><span class="lineno"> 7406</span>&#160; {</div><div class="line"><a name="l07407"></a><span class="lineno"> 7407</span>&#160; std::string key = from_msgpack_internal(v, idx);</div><div class="line"><a name="l07408"></a><span class="lineno"> 7408</span>&#160; result[key] = from_msgpack_internal(v, idx);</div><div class="line"><a name="l07409"></a><span class="lineno"> 7409</span>&#160; }</div><div class="line"><a name="l07410"></a><span class="lineno"> 7410</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l07413"></a><span class="lineno"> 7413</span>&#160; <span class="keywordflow">case</span> 0xdf: <span class="comment">// map 32</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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07416"></a><span class="lineno"> 7416</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07417"></a><span class="lineno"> 7417</span>&#160; idx += 4; <span class="comment">// skip 4 size bytes</span></div><div class="line"><a name="l07418"></a><span class="lineno"> 7418</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07419"></a><span class="lineno"> 7419</span>&#160; {</div><div class="line"><a name="l07420"></a><span class="lineno"> 7420</span>&#160; std::string key = from_msgpack_internal(v, idx);</div><div class="line"><a name="l07421"></a><span class="lineno"> 7421</span>&#160; result[key] = from_msgpack_internal(v, idx);</div><div class="line"><a name="l07422"></a><span class="lineno"> 7422</span>&#160; }</div><div class="line"><a name="l07423"></a><span class="lineno"> 7423</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07424"></a><span class="lineno"> 7424</span>&#160; }</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="keywordflow">default</span>:</div><div class="line"><a name="l07427"></a><span class="lineno"> 7427</span>&#160; {</div><div class="line"><a name="l07428"></a><span class="lineno"> 7428</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;error parsing a msgpack @ &quot;</span> + std::to_string(current_idx) + <span class="stringliteral">&quot;: &quot;</span> + std::to_string(static_cast&lt;int&gt;(v[current_idx]))));</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="l07431"></a><span class="lineno"> 7431</span>&#160; }</div><div class="line"><a name="l07432"></a><span class="lineno"> 7432</span>&#160; }</div><div class="line"><a name="l07433"></a><span class="lineno"> 7433</span>&#160;</div><div class="line"><a name="l07448"></a><span class="lineno"> 7448</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> from_cbor_internal(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; v, <span class="keywordtype">size_t</span>&amp; idx)</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; <span class="comment">// store and increment index</span></div><div class="line"><a name="l07451"></a><span class="lineno"> 7451</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> current_idx = idx++;</div><div class="line"><a name="l07452"></a><span class="lineno"> 7452</span>&#160;</div><div class="line"><a name="l07453"></a><span class="lineno"> 7453</span>&#160; <span class="keywordflow">switch</span> (v.at(current_idx))</div><div class="line"><a name="l07454"></a><span class="lineno"> 7454</span>&#160; {</div><div class="line"><a name="l07455"></a><span class="lineno"> 7455</span>&#160; <span class="comment">// Integer 0x00..0x17 (0..23)</span></div><div class="line"><a name="l07456"></a><span class="lineno"> 7456</span>&#160; <span class="keywordflow">case</span> 0x00:</div><div class="line"><a name="l07457"></a><span class="lineno"> 7457</span>&#160; <span class="keywordflow">case</span> 0x01:</div><div class="line"><a name="l07458"></a><span class="lineno"> 7458</span>&#160; <span class="keywordflow">case</span> 0x02:</div><div class="line"><a name="l07459"></a><span class="lineno"> 7459</span>&#160; <span class="keywordflow">case</span> 0x03:</div><div class="line"><a name="l07460"></a><span class="lineno"> 7460</span>&#160; <span class="keywordflow">case</span> 0x04:</div><div class="line"><a name="l07461"></a><span class="lineno"> 7461</span>&#160; <span class="keywordflow">case</span> 0x05:</div><div class="line"><a name="l07462"></a><span class="lineno"> 7462</span>&#160; <span class="keywordflow">case</span> 0x06:</div><div class="line"><a name="l07463"></a><span class="lineno"> 7463</span>&#160; <span class="keywordflow">case</span> 0x07:</div><div class="line"><a name="l07464"></a><span class="lineno"> 7464</span>&#160; <span class="keywordflow">case</span> 0x08:</div><div class="line"><a name="l07465"></a><span class="lineno"> 7465</span>&#160; <span class="keywordflow">case</span> 0x09:</div><div class="line"><a name="l07466"></a><span class="lineno"> 7466</span>&#160; <span class="keywordflow">case</span> 0x0a:</div><div class="line"><a name="l07467"></a><span class="lineno"> 7467</span>&#160; <span class="keywordflow">case</span> 0x0b:</div><div class="line"><a name="l07468"></a><span class="lineno"> 7468</span>&#160; <span class="keywordflow">case</span> 0x0c:</div><div class="line"><a name="l07469"></a><span class="lineno"> 7469</span>&#160; <span class="keywordflow">case</span> 0x0d:</div><div class="line"><a name="l07470"></a><span class="lineno"> 7470</span>&#160; <span class="keywordflow">case</span> 0x0e:</div><div class="line"><a name="l07471"></a><span class="lineno"> 7471</span>&#160; <span class="keywordflow">case</span> 0x0f:</div><div class="line"><a name="l07472"></a><span class="lineno"> 7472</span>&#160; <span class="keywordflow">case</span> 0x10:</div><div class="line"><a name="l07473"></a><span class="lineno"> 7473</span>&#160; <span class="keywordflow">case</span> 0x11:</div><div class="line"><a name="l07474"></a><span class="lineno"> 7474</span>&#160; <span class="keywordflow">case</span> 0x12:</div><div class="line"><a name="l07475"></a><span class="lineno"> 7475</span>&#160; <span class="keywordflow">case</span> 0x13:</div><div class="line"><a name="l07476"></a><span class="lineno"> 7476</span>&#160; <span class="keywordflow">case</span> 0x14:</div><div class="line"><a name="l07477"></a><span class="lineno"> 7477</span>&#160; <span class="keywordflow">case</span> 0x15:</div><div class="line"><a name="l07478"></a><span class="lineno"> 7478</span>&#160; <span class="keywordflow">case</span> 0x16:</div><div class="line"><a name="l07479"></a><span class="lineno"> 7479</span>&#160; <span class="keywordflow">case</span> 0x17:</div><div class="line"><a name="l07480"></a><span class="lineno"> 7480</span>&#160; {</div><div class="line"><a name="l07481"></a><span class="lineno"> 7481</span>&#160; <span class="keywordflow">return</span> v[current_idx];</div><div class="line"><a name="l07482"></a><span class="lineno"> 7482</span>&#160; }</div><div class="line"><a name="l07483"></a><span class="lineno"> 7483</span>&#160;</div><div class="line"><a name="l07484"></a><span class="lineno"> 7484</span>&#160; <span class="keywordflow">case</span> 0x18: <span class="comment">// Unsigned integer (one-byte uint8_t follows)</span></div><div class="line"><a name="l07485"></a><span class="lineno"> 7485</span>&#160; {</div><div class="line"><a name="l07486"></a><span class="lineno"> 7486</span>&#160; idx += 1; <span class="comment">// skip content byte</span></div><div class="line"><a name="l07487"></a><span class="lineno"> 7487</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint8_t&gt;(v, current_idx);</div><div class="line"><a name="l07488"></a><span class="lineno"> 7488</span>&#160; }</div><div class="line"><a name="l07489"></a><span class="lineno"> 7489</span>&#160;</div><div class="line"><a name="l07490"></a><span class="lineno"> 7490</span>&#160; <span class="keywordflow">case</span> 0x19: <span class="comment">// Unsigned integer (two-byte uint16_t follows)</span></div><div class="line"><a name="l07491"></a><span class="lineno"> 7491</span>&#160; {</div><div class="line"><a name="l07492"></a><span class="lineno"> 7492</span>&#160; idx += 2; <span class="comment">// skip 2 content bytes</span></div><div class="line"><a name="l07493"></a><span class="lineno"> 7493</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint16_t&gt;(v, current_idx);</div><div class="line"><a name="l07494"></a><span class="lineno"> 7494</span>&#160; }</div><div class="line"><a name="l07495"></a><span class="lineno"> 7495</span>&#160;</div><div class="line"><a name="l07496"></a><span class="lineno"> 7496</span>&#160; <span class="keywordflow">case</span> 0x1a: <span class="comment">// Unsigned integer (four-byte uint32_t follows)</span></div><div class="line"><a name="l07497"></a><span class="lineno"> 7497</span>&#160; {</div><div class="line"><a name="l07498"></a><span class="lineno"> 7498</span>&#160; idx += 4; <span class="comment">// skip 4 content bytes</span></div><div class="line"><a name="l07499"></a><span class="lineno"> 7499</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint32_t&gt;(v, current_idx);</div><div class="line"><a name="l07500"></a><span class="lineno"> 7500</span>&#160; }</div><div class="line"><a name="l07501"></a><span class="lineno"> 7501</span>&#160;</div><div class="line"><a name="l07502"></a><span class="lineno"> 7502</span>&#160; <span class="keywordflow">case</span> 0x1b: <span class="comment">// Unsigned integer (eight-byte uint64_t follows)</span></div><div class="line"><a name="l07503"></a><span class="lineno"> 7503</span>&#160; {</div><div class="line"><a name="l07504"></a><span class="lineno"> 7504</span>&#160; idx += 8; <span class="comment">// skip 8 content bytes</span></div><div class="line"><a name="l07505"></a><span class="lineno"> 7505</span>&#160; <span class="keywordflow">return</span> get_from_vector&lt;uint64_t&gt;(v, current_idx);</div><div class="line"><a name="l07506"></a><span class="lineno"> 7506</span>&#160; }</div><div class="line"><a name="l07507"></a><span class="lineno"> 7507</span>&#160;</div><div class="line"><a name="l07508"></a><span class="lineno"> 7508</span>&#160; <span class="comment">// Negative integer -1-0x00..-1-0x17 (-1..-24)</span></div><div class="line"><a name="l07509"></a><span class="lineno"> 7509</span>&#160; <span class="keywordflow">case</span> 0x20:</div><div class="line"><a name="l07510"></a><span class="lineno"> 7510</span>&#160; <span class="keywordflow">case</span> 0x21:</div><div class="line"><a name="l07511"></a><span class="lineno"> 7511</span>&#160; <span class="keywordflow">case</span> 0x22:</div><div class="line"><a name="l07512"></a><span class="lineno"> 7512</span>&#160; <span class="keywordflow">case</span> 0x23:</div><div class="line"><a name="l07513"></a><span class="lineno"> 7513</span>&#160; <span class="keywordflow">case</span> 0x24:</div><div class="line"><a name="l07514"></a><span class="lineno"> 7514</span>&#160; <span class="keywordflow">case</span> 0x25:</div><div class="line"><a name="l07515"></a><span class="lineno"> 7515</span>&#160; <span class="keywordflow">case</span> 0x26:</div><div class="line"><a name="l07516"></a><span class="lineno"> 7516</span>&#160; <span class="keywordflow">case</span> 0x27:</div><div class="line"><a name="l07517"></a><span class="lineno"> 7517</span>&#160; <span class="keywordflow">case</span> 0x28:</div><div class="line"><a name="l07518"></a><span class="lineno"> 7518</span>&#160; <span class="keywordflow">case</span> 0x29:</div><div class="line"><a name="l07519"></a><span class="lineno"> 7519</span>&#160; <span class="keywordflow">case</span> 0x2a:</div><div class="line"><a name="l07520"></a><span class="lineno"> 7520</span>&#160; <span class="keywordflow">case</span> 0x2b:</div><div class="line"><a name="l07521"></a><span class="lineno"> 7521</span>&#160; <span class="keywordflow">case</span> 0x2c:</div><div class="line"><a name="l07522"></a><span class="lineno"> 7522</span>&#160; <span class="keywordflow">case</span> 0x2d:</div><div class="line"><a name="l07523"></a><span class="lineno"> 7523</span>&#160; <span class="keywordflow">case</span> 0x2e:</div><div class="line"><a name="l07524"></a><span class="lineno"> 7524</span>&#160; <span class="keywordflow">case</span> 0x2f:</div><div class="line"><a name="l07525"></a><span class="lineno"> 7525</span>&#160; <span class="keywordflow">case</span> 0x30:</div><div class="line"><a name="l07526"></a><span class="lineno"> 7526</span>&#160; <span class="keywordflow">case</span> 0x31:</div><div class="line"><a name="l07527"></a><span class="lineno"> 7527</span>&#160; <span class="keywordflow">case</span> 0x32:</div><div class="line"><a name="l07528"></a><span class="lineno"> 7528</span>&#160; <span class="keywordflow">case</span> 0x33:</div><div class="line"><a name="l07529"></a><span class="lineno"> 7529</span>&#160; <span class="keywordflow">case</span> 0x34:</div><div class="line"><a name="l07530"></a><span class="lineno"> 7530</span>&#160; <span class="keywordflow">case</span> 0x35:</div><div class="line"><a name="l07531"></a><span class="lineno"> 7531</span>&#160; <span class="keywordflow">case</span> 0x36:</div><div class="line"><a name="l07532"></a><span class="lineno"> 7532</span>&#160; <span class="keywordflow">case</span> 0x37:</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; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>int8_t<span class="keyword">&gt;</span>(0x20 - 1 - v[current_idx]);</div><div class="line"><a name="l07535"></a><span class="lineno"> 7535</span>&#160; }</div><div class="line"><a name="l07536"></a><span class="lineno"> 7536</span>&#160;</div><div class="line"><a name="l07537"></a><span class="lineno"> 7537</span>&#160; <span class="keywordflow">case</span> 0x38: <span class="comment">// Negative integer (one-byte uint8_t follows)</span></div><div class="line"><a name="l07538"></a><span class="lineno"> 7538</span>&#160; {</div><div class="line"><a name="l07539"></a><span class="lineno"> 7539</span>&#160; idx += 1; <span class="comment">// skip content byte</span></div><div class="line"><a name="l07540"></a><span class="lineno"> 7540</span>&#160; <span class="comment">// must be uint8_t !</span></div><div class="line"><a name="l07541"></a><span class="lineno"> 7541</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(-1) - get_from_vector&lt;uint8_t&gt;(v, current_idx);</div><div class="line"><a name="l07542"></a><span class="lineno"> 7542</span>&#160; }</div><div class="line"><a name="l07543"></a><span class="lineno"> 7543</span>&#160;</div><div class="line"><a name="l07544"></a><span class="lineno"> 7544</span>&#160; <span class="keywordflow">case</span> 0x39: <span class="comment">// Negative integer -1-n (two-byte uint16_t follows)</span></div><div class="line"><a name="l07545"></a><span class="lineno"> 7545</span>&#160; {</div><div class="line"><a name="l07546"></a><span class="lineno"> 7546</span>&#160; idx += 2; <span class="comment">// skip 2 content bytes</span></div><div class="line"><a name="l07547"></a><span class="lineno"> 7547</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(-1) - get_from_vector&lt;uint16_t&gt;(v, current_idx);</div><div class="line"><a name="l07548"></a><span class="lineno"> 7548</span>&#160; }</div><div class="line"><a name="l07549"></a><span class="lineno"> 7549</span>&#160;</div><div class="line"><a name="l07550"></a><span class="lineno"> 7550</span>&#160; <span class="keywordflow">case</span> 0x3a: <span class="comment">// Negative integer -1-n (four-byte uint32_t follows)</span></div><div class="line"><a name="l07551"></a><span class="lineno"> 7551</span>&#160; {</div><div class="line"><a name="l07552"></a><span class="lineno"> 7552</span>&#160; idx += 4; <span class="comment">// skip 4 content bytes</span></div><div class="line"><a name="l07553"></a><span class="lineno"> 7553</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(-1) - get_from_vector&lt;uint32_t&gt;(v, current_idx);</div><div class="line"><a name="l07554"></a><span class="lineno"> 7554</span>&#160; }</div><div class="line"><a name="l07555"></a><span class="lineno"> 7555</span>&#160;</div><div class="line"><a name="l07556"></a><span class="lineno"> 7556</span>&#160; <span class="keywordflow">case</span> 0x3b: <span class="comment">// Negative integer -1-n (eight-byte uint64_t follows)</span></div><div class="line"><a name="l07557"></a><span class="lineno"> 7557</span>&#160; {</div><div class="line"><a name="l07558"></a><span class="lineno"> 7558</span>&#160; idx += 8; <span class="comment">// skip 8 content bytes</span></div><div class="line"><a name="l07559"></a><span class="lineno"> 7559</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a><span class="keyword">&gt;</span>(-1) - static_cast&lt;number_integer_t&gt;(get_from_vector&lt;uint64_t&gt;(v, current_idx));</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="l07562"></a><span class="lineno"> 7562</span>&#160; <span class="comment">// UTF-8 string (0x00..0x17 bytes follow)</span></div><div class="line"><a name="l07563"></a><span class="lineno"> 7563</span>&#160; <span class="keywordflow">case</span> 0x60:</div><div class="line"><a name="l07564"></a><span class="lineno"> 7564</span>&#160; <span class="keywordflow">case</span> 0x61:</div><div class="line"><a name="l07565"></a><span class="lineno"> 7565</span>&#160; <span class="keywordflow">case</span> 0x62:</div><div class="line"><a name="l07566"></a><span class="lineno"> 7566</span>&#160; <span class="keywordflow">case</span> 0x63:</div><div class="line"><a name="l07567"></a><span class="lineno"> 7567</span>&#160; <span class="keywordflow">case</span> 0x64:</div><div class="line"><a name="l07568"></a><span class="lineno"> 7568</span>&#160; <span class="keywordflow">case</span> 0x65:</div><div class="line"><a name="l07569"></a><span class="lineno"> 7569</span>&#160; <span class="keywordflow">case</span> 0x66:</div><div class="line"><a name="l07570"></a><span class="lineno"> 7570</span>&#160; <span class="keywordflow">case</span> 0x67:</div><div class="line"><a name="l07571"></a><span class="lineno"> 7571</span>&#160; <span class="keywordflow">case</span> 0x68:</div><div class="line"><a name="l07572"></a><span class="lineno"> 7572</span>&#160; <span class="keywordflow">case</span> 0x69:</div><div class="line"><a name="l07573"></a><span class="lineno"> 7573</span>&#160; <span class="keywordflow">case</span> 0x6a:</div><div class="line"><a name="l07574"></a><span class="lineno"> 7574</span>&#160; <span class="keywordflow">case</span> 0x6b:</div><div class="line"><a name="l07575"></a><span class="lineno"> 7575</span>&#160; <span class="keywordflow">case</span> 0x6c:</div><div class="line"><a name="l07576"></a><span class="lineno"> 7576</span>&#160; <span class="keywordflow">case</span> 0x6d:</div><div class="line"><a name="l07577"></a><span class="lineno"> 7577</span>&#160; <span class="keywordflow">case</span> 0x6e:</div><div class="line"><a name="l07578"></a><span class="lineno"> 7578</span>&#160; <span class="keywordflow">case</span> 0x6f:</div><div class="line"><a name="l07579"></a><span class="lineno"> 7579</span>&#160; <span class="keywordflow">case</span> 0x70:</div><div class="line"><a name="l07580"></a><span class="lineno"> 7580</span>&#160; <span class="keywordflow">case</span> 0x71:</div><div class="line"><a name="l07581"></a><span class="lineno"> 7581</span>&#160; <span class="keywordflow">case</span> 0x72:</div><div class="line"><a name="l07582"></a><span class="lineno"> 7582</span>&#160; <span class="keywordflow">case</span> 0x73:</div><div class="line"><a name="l07583"></a><span class="lineno"> 7583</span>&#160; <span class="keywordflow">case</span> 0x74:</div><div class="line"><a name="l07584"></a><span class="lineno"> 7584</span>&#160; <span class="keywordflow">case</span> 0x75:</div><div class="line"><a name="l07585"></a><span class="lineno"> 7585</span>&#160; <span class="keywordflow">case</span> 0x76:</div><div class="line"><a name="l07586"></a><span class="lineno"> 7586</span>&#160; <span class="keywordflow">case</span> 0x77:</div><div class="line"><a name="l07587"></a><span class="lineno"> 7587</span>&#160; {</div><div class="line"><a name="l07588"></a><span class="lineno"> 7588</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(v[current_idx] - 0x60);</div><div class="line"><a name="l07589"></a><span class="lineno"> 7589</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 1;</div><div class="line"><a name="l07590"></a><span class="lineno"> 7590</span>&#160; idx += len; <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07591"></a><span class="lineno"> 7591</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07592"></a><span class="lineno"> 7592</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07593"></a><span class="lineno"> 7593</span>&#160; }</div><div class="line"><a name="l07594"></a><span class="lineno"> 7594</span>&#160;</div><div class="line"><a name="l07595"></a><span class="lineno"> 7595</span>&#160; <span class="keywordflow">case</span> 0x78: <span class="comment">// UTF-8 string (one-byte uint8_t for n follows)</span></div><div class="line"><a name="l07596"></a><span class="lineno"> 7596</span>&#160; {</div><div class="line"><a name="l07597"></a><span class="lineno"> 7597</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint8_t&gt;(v, current_idx));</div><div class="line"><a name="l07598"></a><span class="lineno"> 7598</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 2;</div><div class="line"><a name="l07599"></a><span class="lineno"> 7599</span>&#160; idx += len + 1; <span class="comment">// skip size byte + content bytes</span></div><div class="line"><a name="l07600"></a><span class="lineno"> 7600</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07601"></a><span class="lineno"> 7601</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07602"></a><span class="lineno"> 7602</span>&#160; }</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; <span class="keywordflow">case</span> 0x79: <span class="comment">// UTF-8 string (two-byte uint16_t for n follow)</span></div><div class="line"><a name="l07605"></a><span class="lineno"> 7605</span>&#160; {</div><div class="line"><a name="l07606"></a><span class="lineno"> 7606</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07607"></a><span class="lineno"> 7607</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 3;</div><div class="line"><a name="l07608"></a><span class="lineno"> 7608</span>&#160; idx += len + 2; <span class="comment">// skip 2 size bytes + content bytes</span></div><div class="line"><a name="l07609"></a><span class="lineno"> 7609</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07610"></a><span class="lineno"> 7610</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</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;</div><div class="line"><a name="l07613"></a><span class="lineno"> 7613</span>&#160; <span class="keywordflow">case</span> 0x7a: <span class="comment">// UTF-8 string (four-byte uint32_t for n follow)</span></div><div class="line"><a name="l07614"></a><span class="lineno"> 7614</span>&#160; {</div><div class="line"><a name="l07615"></a><span class="lineno"> 7615</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07616"></a><span class="lineno"> 7616</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 5;</div><div class="line"><a name="l07617"></a><span class="lineno"> 7617</span>&#160; idx += len + 4; <span class="comment">// skip 4 size bytes + content bytes</span></div><div class="line"><a name="l07618"></a><span class="lineno"> 7618</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07619"></a><span class="lineno"> 7619</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</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;</div><div class="line"><a name="l07622"></a><span class="lineno"> 7622</span>&#160; <span class="keywordflow">case</span> 0x7b: <span class="comment">// UTF-8 string (eight-byte uint64_t for n follow)</span></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; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint64_t&gt;(v, current_idx));</div><div class="line"><a name="l07625"></a><span class="lineno"> 7625</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = current_idx + 9;</div><div class="line"><a name="l07626"></a><span class="lineno"> 7626</span>&#160; idx += len + 8; <span class="comment">// skip 8 size bytes + content bytes</span></div><div class="line"><a name="l07627"></a><span class="lineno"> 7627</span>&#160; check_length(v.size(), len, offset);</div><div class="line"><a name="l07628"></a><span class="lineno"> 7628</span>&#160; <span class="keywordflow">return</span> std::string(reinterpret_cast&lt;const char*&gt;(v.data()) + offset, len);</div><div class="line"><a name="l07629"></a><span class="lineno"> 7629</span>&#160; }</div><div class="line"><a name="l07630"></a><span class="lineno"> 7630</span>&#160;</div><div class="line"><a name="l07631"></a><span class="lineno"> 7631</span>&#160; <span class="keywordflow">case</span> 0x7f: <span class="comment">// UTF-8 string (indefinite length)</span></div><div class="line"><a name="l07632"></a><span class="lineno"> 7632</span>&#160; {</div><div class="line"><a name="l07633"></a><span class="lineno"> 7633</span>&#160; std::string result;</div><div class="line"><a name="l07634"></a><span class="lineno"> 7634</span>&#160; <span class="keywordflow">while</span> (v.at(idx) != 0xff)</div><div class="line"><a name="l07635"></a><span class="lineno"> 7635</span>&#160; {</div><div class="line"><a name="l07636"></a><span class="lineno"> 7636</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> s = from_cbor_internal(v, idx);</div><div class="line"><a name="l07637"></a><span class="lineno"> 7637</span>&#160; result += s;</div><div class="line"><a name="l07638"></a><span class="lineno"> 7638</span>&#160; }</div><div class="line"><a name="l07639"></a><span class="lineno"> 7639</span>&#160; <span class="comment">// skip break byte (0xFF)</span></div><div class="line"><a name="l07640"></a><span class="lineno"> 7640</span>&#160; idx += 1;</div><div class="line"><a name="l07641"></a><span class="lineno"> 7641</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07642"></a><span class="lineno"> 7642</span>&#160; }</div><div class="line"><a name="l07643"></a><span class="lineno"> 7643</span>&#160;</div><div class="line"><a name="l07644"></a><span class="lineno"> 7644</span>&#160; <span class="comment">// array (0x00..0x17 data items follow)</span></div><div class="line"><a name="l07645"></a><span class="lineno"> 7645</span>&#160; <span class="keywordflow">case</span> 0x80:</div><div class="line"><a name="l07646"></a><span class="lineno"> 7646</span>&#160; <span class="keywordflow">case</span> 0x81:</div><div class="line"><a name="l07647"></a><span class="lineno"> 7647</span>&#160; <span class="keywordflow">case</span> 0x82:</div><div class="line"><a name="l07648"></a><span class="lineno"> 7648</span>&#160; <span class="keywordflow">case</span> 0x83:</div><div class="line"><a name="l07649"></a><span class="lineno"> 7649</span>&#160; <span class="keywordflow">case</span> 0x84:</div><div class="line"><a name="l07650"></a><span class="lineno"> 7650</span>&#160; <span class="keywordflow">case</span> 0x85:</div><div class="line"><a name="l07651"></a><span class="lineno"> 7651</span>&#160; <span class="keywordflow">case</span> 0x86:</div><div class="line"><a name="l07652"></a><span class="lineno"> 7652</span>&#160; <span class="keywordflow">case</span> 0x87:</div><div class="line"><a name="l07653"></a><span class="lineno"> 7653</span>&#160; <span class="keywordflow">case</span> 0x88:</div><div class="line"><a name="l07654"></a><span class="lineno"> 7654</span>&#160; <span class="keywordflow">case</span> 0x89:</div><div class="line"><a name="l07655"></a><span class="lineno"> 7655</span>&#160; <span class="keywordflow">case</span> 0x8a:</div><div class="line"><a name="l07656"></a><span class="lineno"> 7656</span>&#160; <span class="keywordflow">case</span> 0x8b:</div><div class="line"><a name="l07657"></a><span class="lineno"> 7657</span>&#160; <span class="keywordflow">case</span> 0x8c:</div><div class="line"><a name="l07658"></a><span class="lineno"> 7658</span>&#160; <span class="keywordflow">case</span> 0x8d:</div><div class="line"><a name="l07659"></a><span class="lineno"> 7659</span>&#160; <span class="keywordflow">case</span> 0x8e:</div><div class="line"><a name="l07660"></a><span class="lineno"> 7660</span>&#160; <span class="keywordflow">case</span> 0x8f:</div><div class="line"><a name="l07661"></a><span class="lineno"> 7661</span>&#160; <span class="keywordflow">case</span> 0x90:</div><div class="line"><a name="l07662"></a><span class="lineno"> 7662</span>&#160; <span class="keywordflow">case</span> 0x91:</div><div class="line"><a name="l07663"></a><span class="lineno"> 7663</span>&#160; <span class="keywordflow">case</span> 0x92:</div><div class="line"><a name="l07664"></a><span class="lineno"> 7664</span>&#160; <span class="keywordflow">case</span> 0x93:</div><div class="line"><a name="l07665"></a><span class="lineno"> 7665</span>&#160; <span class="keywordflow">case</span> 0x94:</div><div class="line"><a name="l07666"></a><span class="lineno"> 7666</span>&#160; <span class="keywordflow">case</span> 0x95:</div><div class="line"><a name="l07667"></a><span class="lineno"> 7667</span>&#160; <span class="keywordflow">case</span> 0x96:</div><div class="line"><a name="l07668"></a><span class="lineno"> 7668</span>&#160; <span class="keywordflow">case</span> 0x97:</div><div class="line"><a name="l07669"></a><span class="lineno"> 7669</span>&#160; {</div><div class="line"><a name="l07670"></a><span class="lineno"> 7670</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07671"></a><span class="lineno"> 7671</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(v[current_idx] - 0x80);</div><div class="line"><a name="l07672"></a><span class="lineno"> 7672</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07673"></a><span class="lineno"> 7673</span>&#160; {</div><div class="line"><a name="l07674"></a><span class="lineno"> 7674</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</div><div class="line"><a name="l07675"></a><span class="lineno"> 7675</span>&#160; }</div><div class="line"><a name="l07676"></a><span class="lineno"> 7676</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07677"></a><span class="lineno"> 7677</span>&#160; }</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; <span class="keywordflow">case</span> 0x98: <span class="comment">// array (one-byte uint8_t for n follows)</span></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.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07682"></a><span class="lineno"> 7682</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint8_t&gt;(v, current_idx));</div><div class="line"><a name="l07683"></a><span class="lineno"> 7683</span>&#160; idx += 1; <span class="comment">// skip 1 size byte</span></div><div class="line"><a name="l07684"></a><span class="lineno"> 7684</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07685"></a><span class="lineno"> 7685</span>&#160; {</div><div class="line"><a name="l07686"></a><span class="lineno"> 7686</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</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">return</span> result;</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;</div><div class="line"><a name="l07691"></a><span class="lineno"> 7691</span>&#160; <span class="keywordflow">case</span> 0x99: <span class="comment">// array (two-byte uint16_t for n follow)</span></div><div class="line"><a name="l07692"></a><span class="lineno"> 7692</span>&#160; {</div><div class="line"><a name="l07693"></a><span class="lineno"> 7693</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07694"></a><span class="lineno"> 7694</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07695"></a><span class="lineno"> 7695</span>&#160; idx += 2; <span class="comment">// skip 4 size bytes</span></div><div class="line"><a name="l07696"></a><span class="lineno"> 7696</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07697"></a><span class="lineno"> 7697</span>&#160; {</div><div class="line"><a name="l07698"></a><span class="lineno"> 7698</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</div><div class="line"><a name="l07699"></a><span class="lineno"> 7699</span>&#160; }</div><div class="line"><a name="l07700"></a><span class="lineno"> 7700</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07701"></a><span class="lineno"> 7701</span>&#160; }</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="keywordflow">case</span> 0x9a: <span class="comment">// array (four-byte uint32_t for n follow)</span></div><div class="line"><a name="l07704"></a><span class="lineno"> 7704</span>&#160; {</div><div class="line"><a name="l07705"></a><span class="lineno"> 7705</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07706"></a><span class="lineno"> 7706</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07707"></a><span class="lineno"> 7707</span>&#160; idx += 4; <span class="comment">// skip 4 size bytes</span></div><div class="line"><a name="l07708"></a><span class="lineno"> 7708</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07709"></a><span class="lineno"> 7709</span>&#160; {</div><div class="line"><a name="l07710"></a><span class="lineno"> 7710</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</div><div class="line"><a name="l07711"></a><span class="lineno"> 7711</span>&#160; }</div><div class="line"><a name="l07712"></a><span class="lineno"> 7712</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l07715"></a><span class="lineno"> 7715</span>&#160; <span class="keywordflow">case</span> 0x9b: <span class="comment">// array (eight-byte uint64_t for n follow)</span></div><div class="line"><a name="l07716"></a><span class="lineno"> 7716</span>&#160; {</div><div class="line"><a name="l07717"></a><span class="lineno"> 7717</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07718"></a><span class="lineno"> 7718</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint64_t&gt;(v, current_idx));</div><div class="line"><a name="l07719"></a><span class="lineno"> 7719</span>&#160; idx += 8; <span class="comment">// skip 8 size bytes</span></div><div class="line"><a name="l07720"></a><span class="lineno"> 7720</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</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; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</div><div class="line"><a name="l07723"></a><span class="lineno"> 7723</span>&#160; }</div><div class="line"><a name="l07724"></a><span class="lineno"> 7724</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07725"></a><span class="lineno"> 7725</span>&#160; }</div><div class="line"><a name="l07726"></a><span class="lineno"> 7726</span>&#160;</div><div class="line"><a name="l07727"></a><span class="lineno"> 7727</span>&#160; <span class="keywordflow">case</span> 0x9f: <span class="comment">// array (indefinite length)</span></div><div class="line"><a name="l07728"></a><span class="lineno"> 7728</span>&#160; {</div><div class="line"><a name="l07729"></a><span class="lineno"> 7729</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::array;</div><div class="line"><a name="l07730"></a><span class="lineno"> 7730</span>&#160; <span class="keywordflow">while</span> (v.at(idx) != 0xff)</div><div class="line"><a name="l07731"></a><span class="lineno"> 7731</span>&#160; {</div><div class="line"><a name="l07732"></a><span class="lineno"> 7732</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(from_cbor_internal(v, idx));</div><div class="line"><a name="l07733"></a><span class="lineno"> 7733</span>&#160; }</div><div class="line"><a name="l07734"></a><span class="lineno"> 7734</span>&#160; <span class="comment">// skip break byte (0xFF)</span></div><div class="line"><a name="l07735"></a><span class="lineno"> 7735</span>&#160; idx += 1;</div><div class="line"><a name="l07736"></a><span class="lineno"> 7736</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07737"></a><span class="lineno"> 7737</span>&#160; }</div><div class="line"><a name="l07738"></a><span class="lineno"> 7738</span>&#160;</div><div class="line"><a name="l07739"></a><span class="lineno"> 7739</span>&#160; <span class="comment">// map (0x00..0x17 pairs of data items follow)</span></div><div class="line"><a name="l07740"></a><span class="lineno"> 7740</span>&#160; <span class="keywordflow">case</span> 0xa0:</div><div class="line"><a name="l07741"></a><span class="lineno"> 7741</span>&#160; <span class="keywordflow">case</span> 0xa1:</div><div class="line"><a name="l07742"></a><span class="lineno"> 7742</span>&#160; <span class="keywordflow">case</span> 0xa2:</div><div class="line"><a name="l07743"></a><span class="lineno"> 7743</span>&#160; <span class="keywordflow">case</span> 0xa3:</div><div class="line"><a name="l07744"></a><span class="lineno"> 7744</span>&#160; <span class="keywordflow">case</span> 0xa4:</div><div class="line"><a name="l07745"></a><span class="lineno"> 7745</span>&#160; <span class="keywordflow">case</span> 0xa5:</div><div class="line"><a name="l07746"></a><span class="lineno"> 7746</span>&#160; <span class="keywordflow">case</span> 0xa6:</div><div class="line"><a name="l07747"></a><span class="lineno"> 7747</span>&#160; <span class="keywordflow">case</span> 0xa7:</div><div class="line"><a name="l07748"></a><span class="lineno"> 7748</span>&#160; <span class="keywordflow">case</span> 0xa8:</div><div class="line"><a name="l07749"></a><span class="lineno"> 7749</span>&#160; <span class="keywordflow">case</span> 0xa9:</div><div class="line"><a name="l07750"></a><span class="lineno"> 7750</span>&#160; <span class="keywordflow">case</span> 0xaa:</div><div class="line"><a name="l07751"></a><span class="lineno"> 7751</span>&#160; <span class="keywordflow">case</span> 0xab:</div><div class="line"><a name="l07752"></a><span class="lineno"> 7752</span>&#160; <span class="keywordflow">case</span> 0xac:</div><div class="line"><a name="l07753"></a><span class="lineno"> 7753</span>&#160; <span class="keywordflow">case</span> 0xad:</div><div class="line"><a name="l07754"></a><span class="lineno"> 7754</span>&#160; <span class="keywordflow">case</span> 0xae:</div><div class="line"><a name="l07755"></a><span class="lineno"> 7755</span>&#160; <span class="keywordflow">case</span> 0xaf:</div><div class="line"><a name="l07756"></a><span class="lineno"> 7756</span>&#160; <span class="keywordflow">case</span> 0xb0:</div><div class="line"><a name="l07757"></a><span class="lineno"> 7757</span>&#160; <span class="keywordflow">case</span> 0xb1:</div><div class="line"><a name="l07758"></a><span class="lineno"> 7758</span>&#160; <span class="keywordflow">case</span> 0xb2:</div><div class="line"><a name="l07759"></a><span class="lineno"> 7759</span>&#160; <span class="keywordflow">case</span> 0xb3:</div><div class="line"><a name="l07760"></a><span class="lineno"> 7760</span>&#160; <span class="keywordflow">case</span> 0xb4:</div><div class="line"><a name="l07761"></a><span class="lineno"> 7761</span>&#160; <span class="keywordflow">case</span> 0xb5:</div><div class="line"><a name="l07762"></a><span class="lineno"> 7762</span>&#160; <span class="keywordflow">case</span> 0xb6:</div><div class="line"><a name="l07763"></a><span class="lineno"> 7763</span>&#160; <span class="keywordflow">case</span> 0xb7:</div><div class="line"><a name="l07764"></a><span class="lineno"> 7764</span>&#160; {</div><div class="line"><a name="l07765"></a><span class="lineno"> 7765</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07766"></a><span class="lineno"> 7766</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(v[current_idx] - 0xa0);</div><div class="line"><a name="l07767"></a><span class="lineno"> 7767</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07768"></a><span class="lineno"> 7768</span>&#160; {</div><div class="line"><a name="l07769"></a><span class="lineno"> 7769</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07770"></a><span class="lineno"> 7770</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07771"></a><span class="lineno"> 7771</span>&#160; }</div><div class="line"><a name="l07772"></a><span class="lineno"> 7772</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07773"></a><span class="lineno"> 7773</span>&#160; }</div><div class="line"><a name="l07774"></a><span class="lineno"> 7774</span>&#160;</div><div class="line"><a name="l07775"></a><span class="lineno"> 7775</span>&#160; <span class="keywordflow">case</span> 0xb8: <span class="comment">// map (one-byte uint8_t for n follows)</span></div><div class="line"><a name="l07776"></a><span class="lineno"> 7776</span>&#160; {</div><div class="line"><a name="l07777"></a><span class="lineno"> 7777</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07778"></a><span class="lineno"> 7778</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint8_t&gt;(v, current_idx));</div><div class="line"><a name="l07779"></a><span class="lineno"> 7779</span>&#160; idx += 1; <span class="comment">// skip 1 size byte</span></div><div class="line"><a name="l07780"></a><span class="lineno"> 7780</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07781"></a><span class="lineno"> 7781</span>&#160; {</div><div class="line"><a name="l07782"></a><span class="lineno"> 7782</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07783"></a><span class="lineno"> 7783</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07784"></a><span class="lineno"> 7784</span>&#160; }</div><div class="line"><a name="l07785"></a><span class="lineno"> 7785</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07786"></a><span class="lineno"> 7786</span>&#160; }</div><div class="line"><a name="l07787"></a><span class="lineno"> 7787</span>&#160;</div><div class="line"><a name="l07788"></a><span class="lineno"> 7788</span>&#160; <span class="keywordflow">case</span> 0xb9: <span class="comment">// map (two-byte uint16_t for n follow)</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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07791"></a><span class="lineno"> 7791</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint16_t&gt;(v, current_idx));</div><div class="line"><a name="l07792"></a><span class="lineno"> 7792</span>&#160; idx += 2; <span class="comment">// skip 2 size bytes</span></div><div class="line"><a name="l07793"></a><span class="lineno"> 7793</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07794"></a><span class="lineno"> 7794</span>&#160; {</div><div class="line"><a name="l07795"></a><span class="lineno"> 7795</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07796"></a><span class="lineno"> 7796</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07797"></a><span class="lineno"> 7797</span>&#160; }</div><div class="line"><a name="l07798"></a><span class="lineno"> 7798</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07799"></a><span class="lineno"> 7799</span>&#160; }</div><div class="line"><a name="l07800"></a><span class="lineno"> 7800</span>&#160;</div><div class="line"><a name="l07801"></a><span class="lineno"> 7801</span>&#160; <span class="keywordflow">case</span> 0xba: <span class="comment">// map (four-byte uint32_t for n follow)</span></div><div class="line"><a name="l07802"></a><span class="lineno"> 7802</span>&#160; {</div><div class="line"><a name="l07803"></a><span class="lineno"> 7803</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07804"></a><span class="lineno"> 7804</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint32_t&gt;(v, current_idx));</div><div class="line"><a name="l07805"></a><span class="lineno"> 7805</span>&#160; idx += 4; <span class="comment">// skip 4 size bytes</span></div><div class="line"><a name="l07806"></a><span class="lineno"> 7806</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07807"></a><span class="lineno"> 7807</span>&#160; {</div><div class="line"><a name="l07808"></a><span class="lineno"> 7808</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07809"></a><span class="lineno"> 7809</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07810"></a><span class="lineno"> 7810</span>&#160; }</div><div class="line"><a name="l07811"></a><span class="lineno"> 7811</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07812"></a><span class="lineno"> 7812</span>&#160; }</div><div class="line"><a name="l07813"></a><span class="lineno"> 7813</span>&#160;</div><div class="line"><a name="l07814"></a><span class="lineno"> 7814</span>&#160; <span class="keywordflow">case</span> 0xbb: <span class="comment">// map (eight-byte uint64_t for n follow)</span></div><div class="line"><a name="l07815"></a><span class="lineno"> 7815</span>&#160; {</div><div class="line"><a name="l07816"></a><span class="lineno"> 7816</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07817"></a><span class="lineno"> 7817</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(get_from_vector&lt;uint64_t&gt;(v, current_idx));</div><div class="line"><a name="l07818"></a><span class="lineno"> 7818</span>&#160; idx += 8; <span class="comment">// skip 8 size bytes</span></div><div class="line"><a name="l07819"></a><span class="lineno"> 7819</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l07820"></a><span class="lineno"> 7820</span>&#160; {</div><div class="line"><a name="l07821"></a><span class="lineno"> 7821</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07822"></a><span class="lineno"> 7822</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07823"></a><span class="lineno"> 7823</span>&#160; }</div><div class="line"><a name="l07824"></a><span class="lineno"> 7824</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07825"></a><span class="lineno"> 7825</span>&#160; }</div><div class="line"><a name="l07826"></a><span class="lineno"> 7826</span>&#160;</div><div class="line"><a name="l07827"></a><span class="lineno"> 7827</span>&#160; <span class="keywordflow">case</span> 0xbf: <span class="comment">// map (indefinite length)</span></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; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = value_t::object;</div><div class="line"><a name="l07830"></a><span class="lineno"> 7830</span>&#160; <span class="keywordflow">while</span> (v.at(idx) != 0xff)</div><div class="line"><a name="l07831"></a><span class="lineno"> 7831</span>&#160; {</div><div class="line"><a name="l07832"></a><span class="lineno"> 7832</span>&#160; std::string key = from_cbor_internal(v, idx);</div><div class="line"><a name="l07833"></a><span class="lineno"> 7833</span>&#160; result[key] = from_cbor_internal(v, idx);</div><div class="line"><a name="l07834"></a><span class="lineno"> 7834</span>&#160; }</div><div class="line"><a name="l07835"></a><span class="lineno"> 7835</span>&#160; <span class="comment">// skip break byte (0xFF)</span></div><div class="line"><a name="l07836"></a><span class="lineno"> 7836</span>&#160; idx += 1;</div><div class="line"><a name="l07837"></a><span class="lineno"> 7837</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07838"></a><span class="lineno"> 7838</span>&#160; }</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">case</span> 0xf4: <span class="comment">// false</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">return</span> <span class="keyword">false</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;</div><div class="line"><a name="l07845"></a><span class="lineno"> 7845</span>&#160; <span class="keywordflow">case</span> 0xf5: <span class="comment">// true</span></div><div class="line"><a name="l07846"></a><span class="lineno"> 7846</span>&#160; {</div><div class="line"><a name="l07847"></a><span class="lineno"> 7847</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07848"></a><span class="lineno"> 7848</span>&#160; }</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">case</span> 0xf6: <span class="comment">// null</span></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">return</span> value_t::null;</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;</div><div class="line"><a name="l07855"></a><span class="lineno"> 7855</span>&#160; <span class="keywordflow">case</span> 0xf9: <span class="comment">// Half-Precision Float (two-byte IEEE 754)</span></div><div class="line"><a name="l07856"></a><span class="lineno"> 7856</span>&#160; {</div><div class="line"><a name="l07857"></a><span class="lineno"> 7857</span>&#160; idx += 2; <span class="comment">// skip two content bytes</span></div><div class="line"><a name="l07858"></a><span class="lineno"> 7858</span>&#160;</div><div class="line"><a name="l07859"></a><span class="lineno"> 7859</span>&#160; <span class="comment">// code from RFC 7049, Appendix D, Figure 3:</span></div><div class="line"><a name="l07860"></a><span class="lineno"> 7860</span>&#160; <span class="comment">// As half-precision floating-point numbers were only added to</span></div><div class="line"><a name="l07861"></a><span class="lineno"> 7861</span>&#160; <span class="comment">// IEEE 754 in 2008, today&#39;s programming platforms often still</span></div><div class="line"><a name="l07862"></a><span class="lineno"> 7862</span>&#160; <span class="comment">// only have limited support for them. It is very easy to</span></div><div class="line"><a name="l07863"></a><span class="lineno"> 7863</span>&#160; <span class="comment">// include at least decoding support for them even without such</span></div><div class="line"><a name="l07864"></a><span class="lineno"> 7864</span>&#160; <span class="comment">// support. An example of a small decoder for half-precision</span></div><div class="line"><a name="l07865"></a><span class="lineno"> 7865</span>&#160; <span class="comment">// floating-point numbers in the C language is shown in Fig. 3.</span></div><div class="line"><a name="l07866"></a><span class="lineno"> 7866</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> half = (v.at(current_idx + 1) &lt;&lt; 8) + v.at(current_idx + 2);</div><div class="line"><a name="l07867"></a><span class="lineno"> 7867</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> exp = (half &gt;&gt; 10) &amp; 0x1f;</div><div class="line"><a name="l07868"></a><span class="lineno"> 7868</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> mant = half &amp; 0x3ff;</div><div class="line"><a name="l07869"></a><span class="lineno"> 7869</span>&#160; <span class="keywordtype">double</span> val;</div><div class="line"><a name="l07870"></a><span class="lineno"> 7870</span>&#160; <span class="keywordflow">if</span> (exp == 0)</div><div class="line"><a name="l07871"></a><span class="lineno"> 7871</span>&#160; {</div><div class="line"><a name="l07872"></a><span class="lineno"> 7872</span>&#160; val = std::ldexp(mant, -24);</div><div class="line"><a name="l07873"></a><span class="lineno"> 7873</span>&#160; }</div><div class="line"><a name="l07874"></a><span class="lineno"> 7874</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exp != 31)</div><div class="line"><a name="l07875"></a><span class="lineno"> 7875</span>&#160; {</div><div class="line"><a name="l07876"></a><span class="lineno"> 7876</span>&#160; val = std::ldexp(mant + 1024, exp - 25);</div><div class="line"><a name="l07877"></a><span class="lineno"> 7877</span>&#160; }</div><div class="line"><a name="l07878"></a><span class="lineno"> 7878</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07879"></a><span class="lineno"> 7879</span>&#160; {</div><div class="line"><a name="l07880"></a><span class="lineno"> 7880</span>&#160; val = mant == 0</div><div class="line"><a name="l07881"></a><span class="lineno"> 7881</span>&#160; ? std::numeric_limits&lt;double&gt;::infinity()</div><div class="line"><a name="l07882"></a><span class="lineno"> 7882</span>&#160; : std::numeric_limits&lt;double&gt;::quiet_NaN();</div><div class="line"><a name="l07883"></a><span class="lineno"> 7883</span>&#160; }</div><div class="line"><a name="l07884"></a><span class="lineno"> 7884</span>&#160; <span class="keywordflow">return</span> (half &amp; 0x8000) != 0 ? -val : val;</div><div class="line"><a name="l07885"></a><span class="lineno"> 7885</span>&#160; }</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">case</span> 0xfa: <span class="comment">// Single-Precision Float (four-byte IEEE 754)</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="comment">// copy bytes in reverse order into the float variable</span></div><div class="line"><a name="l07890"></a><span class="lineno"> 7890</span>&#160; <span class="keywordtype">float</span> res;</div><div class="line"><a name="l07891"></a><span class="lineno"> 7891</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> byte = 0; byte &lt; <span class="keyword">sizeof</span>(float); ++byte)</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; <span class="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(&amp;res)[<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) - byte - 1] = v.at(current_idx + 1 + byte);</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; idx += <span class="keyword">sizeof</span>(float); <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07896"></a><span class="lineno"> 7896</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l07897"></a><span class="lineno"> 7897</span>&#160; }</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">case</span> 0xfb: <span class="comment">// Double-Precision Float (eight-byte IEEE 754)</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="comment">// copy bytes in reverse order into the double variable</span></div><div class="line"><a name="l07902"></a><span class="lineno"> 7902</span>&#160; <span class="keywordtype">double</span> res;</div><div class="line"><a name="l07903"></a><span class="lineno"> 7903</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> byte = 0; byte &lt; <span class="keyword">sizeof</span>(double); ++byte)</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="keyword">reinterpret_cast&lt;</span>uint8_t*<span class="keyword">&gt;</span>(&amp;res)[<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) - byte - 1] = v.at(current_idx + 1 + byte);</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; idx += <span class="keyword">sizeof</span>(double); <span class="comment">// skip content bytes</span></div><div class="line"><a name="l07908"></a><span class="lineno"> 7908</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l07909"></a><span class="lineno"> 7909</span>&#160; }</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">default</span>: <span class="comment">// anything else (0xFF is handled inside the other types)</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; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;error parsing a CBOR @ &quot;</span> + std::to_string(current_idx) + <span class="stringliteral">&quot;: &quot;</span> + std::to_string(static_cast&lt;int&gt;(v[current_idx]))));</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; }</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;</div><div class="line"><a name="l07918"></a><span class="lineno"> 7918</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07941"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a09ca1dc273d226afe0ca83a9d7438d9c.html#a09ca1dc273d226afe0ca83a9d7438d9c"> 7941</a></span>&#160; <span class="keyword">static</span> std::vector&lt;uint8_t&gt; <a class="code" href="classnlohmann_1_1basic__json_a09ca1dc273d226afe0ca83a9d7438d9c.html#a09ca1dc273d226afe0ca83a9d7438d9c">to_msgpack</a>(<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="l07942"></a><span class="lineno"> 7942</span>&#160; {</div><div class="line"><a name="l07943"></a><span class="lineno"> 7943</span>&#160; std::vector&lt;uint8_t&gt; result;</div><div class="line"><a name="l07944"></a><span class="lineno"> 7944</span>&#160; to_msgpack_internal(j, result);</div><div class="line"><a name="l07945"></a><span class="lineno"> 7945</span>&#160; <span class="keywordflow">return</span> result;</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="l07974"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3eafe0b1fb2f2c443f1b3fea55c8a470.html#a3eafe0b1fb2f2c443f1b3fea55c8a470"> 7974</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_a3eafe0b1fb2f2c443f1b3fea55c8a470.html#a3eafe0b1fb2f2c443f1b3fea55c8a470">from_msgpack</a>(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; v,</div><div class="line"><a name="l07975"></a><span class="lineno"> 7975</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_index = 0)</div><div class="line"><a name="l07976"></a><span class="lineno"> 7976</span>&#160; {</div><div class="line"><a name="l07977"></a><span class="lineno"> 7977</span>&#160; <span class="keywordtype">size_t</span> i = start_index;</div><div class="line"><a name="l07978"></a><span class="lineno"> 7978</span>&#160; <span class="keywordflow">return</span> from_msgpack_internal(v, i);</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;</div><div class="line"><a name="l08004"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2566783e190dec524bf3445b322873b8.html#a2566783e190dec524bf3445b322873b8"> 8004</a></span>&#160; <span class="keyword">static</span> std::vector&lt;uint8_t&gt; <a class="code" href="classnlohmann_1_1basic__json_a2566783e190dec524bf3445b322873b8.html#a2566783e190dec524bf3445b322873b8">to_cbor</a>(<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="l08005"></a><span class="lineno"> 8005</span>&#160; {</div><div class="line"><a name="l08006"></a><span class="lineno"> 8006</span>&#160; std::vector&lt;uint8_t&gt; result;</div><div class="line"><a name="l08007"></a><span class="lineno"> 8007</span>&#160; to_cbor_internal(j, result);</div><div class="line"><a name="l08008"></a><span class="lineno"> 8008</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08009"></a><span class="lineno"> 8009</span>&#160; }</div><div class="line"><a name="l08010"></a><span class="lineno"> 8010</span>&#160;</div><div class="line"><a name="l08037"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab5e3e1758c1a52ffe89b1d379ef7fbe1.html#ab5e3e1758c1a52ffe89b1d379ef7fbe1"> 8037</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_ab5e3e1758c1a52ffe89b1d379ef7fbe1.html#ab5e3e1758c1a52ffe89b1d379ef7fbe1">from_cbor</a>(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; v,</div><div class="line"><a name="l08038"></a><span class="lineno"> 8038</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_index = 0)</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="keywordtype">size_t</span> i = start_index;</div><div class="line"><a name="l08041"></a><span class="lineno"> 8041</span>&#160; <span class="keywordflow">return</span> from_cbor_internal(v, i);</div><div class="line"><a name="l08042"></a><span class="lineno"> 8042</span>&#160; }</div><div class="line"><a name="l08043"></a><span class="lineno"> 8043</span>&#160;</div><div class="line"><a name="l08045"></a><span class="lineno"> 8045</span>&#160;</div><div class="line"><a name="l08047"></a><span class="lineno"> 8047</span>&#160; <span class="comment">// convenience functions //</span></div><div class="line"><a name="l08049"></a><span class="lineno"> 8049</span>&#160;<span class="comment"></span></div><div class="line"><a name="l08065"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6b75862bdb4d26650616cf9821430755.html#a6b75862bdb4d26650616cf9821430755"> 8065</a></span>&#160; std::string type_name()<span class="keyword"> const</span></div><div class="line"><a name="l08066"></a><span class="lineno"> 8066</span>&#160;<span class="keyword"> </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; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l08069"></a><span class="lineno"> 8069</span>&#160; {</div><div class="line"><a name="l08070"></a><span class="lineno"> 8070</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l08071"></a><span class="lineno"> 8071</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;null&quot;</span>;</div><div class="line"><a name="l08072"></a><span class="lineno"> 8072</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l08073"></a><span class="lineno"> 8073</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;object&quot;</span>;</div><div class="line"><a name="l08074"></a><span class="lineno"> 8074</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l08075"></a><span class="lineno"> 8075</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;array&quot;</span>;</div><div class="line"><a name="l08076"></a><span class="lineno"> 8076</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l08077"></a><span class="lineno"> 8077</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;string&quot;</span>;</div><div class="line"><a name="l08078"></a><span class="lineno"> 8078</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l08079"></a><span class="lineno"> 8079</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;boolean&quot;</span>;</div><div class="line"><a name="l08080"></a><span class="lineno"> 8080</span>&#160; <span class="keywordflow">case</span> value_t::discarded:</div><div class="line"><a name="l08081"></a><span class="lineno"> 8081</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;discarded&quot;</span>;</div><div class="line"><a name="l08082"></a><span class="lineno"> 8082</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l08083"></a><span class="lineno"> 8083</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;number&quot;</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; }</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;</div><div class="line"><a name="l08088"></a><span class="lineno"> 8088</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08097"></a><span class="lineno"> 8097</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_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>&amp; s) noexcept</div><div class="line"><a name="l08098"></a><span class="lineno"> 8098</span>&#160; {</div><div class="line"><a name="l08099"></a><span class="lineno"> 8099</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="l08100"></a><span class="lineno"> 8100</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="l08101"></a><span class="lineno"> 8101</span>&#160; {</div><div class="line"><a name="l08102"></a><span class="lineno"> 8102</span>&#160; <span class="keywordflow">switch</span> (c)</div><div class="line"><a name="l08103"></a><span class="lineno"> 8103</span>&#160; {</div><div class="line"><a name="l08104"></a><span class="lineno"> 8104</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l08105"></a><span class="lineno"> 8105</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l08106"></a><span class="lineno"> 8106</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\b&#39;</span>:</div><div class="line"><a name="l08107"></a><span class="lineno"> 8107</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\f&#39;</span>:</div><div class="line"><a name="l08108"></a><span class="lineno"> 8108</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\n&#39;</span>:</div><div class="line"><a name="l08109"></a><span class="lineno"> 8109</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\r&#39;</span>:</div><div class="line"><a name="l08110"></a><span class="lineno"> 8110</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</div><div class="line"><a name="l08111"></a><span class="lineno"> 8111</span>&#160; {</div><div class="line"><a name="l08112"></a><span class="lineno"> 8112</span>&#160; <span class="comment">// from c (1 byte) to \x (2 bytes)</span></div><div class="line"><a name="l08113"></a><span class="lineno"> 8113</span>&#160; <span class="keywordflow">return</span> res + 1;</div><div class="line"><a name="l08114"></a><span class="lineno"> 8114</span>&#160; }</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; <span class="keywordflow">default</span>:</div><div class="line"><a name="l08117"></a><span class="lineno"> 8117</span>&#160; {</div><div class="line"><a name="l08118"></a><span class="lineno"> 8118</span>&#160; <span class="keywordflow">if</span> (c &gt;= 0x00 and c &lt;= 0x1f)</div><div class="line"><a name="l08119"></a><span class="lineno"> 8119</span>&#160; {</div><div class="line"><a name="l08120"></a><span class="lineno"> 8120</span>&#160; <span class="comment">// from c (1 byte) to \uxxxx (6 bytes)</span></div><div class="line"><a name="l08121"></a><span class="lineno"> 8121</span>&#160; <span class="keywordflow">return</span> res + 5;</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;</div><div class="line"><a name="l08124"></a><span class="lineno"> 8124</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l08125"></a><span class="lineno"> 8125</span>&#160; }</div><div class="line"><a name="l08126"></a><span class="lineno"> 8126</span>&#160; }</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; }</div><div class="line"><a name="l08129"></a><span class="lineno"> 8129</span>&#160;</div><div class="line"><a name="l08143"></a><span class="lineno"> 8143</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> escape_string(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>&amp; s)</div><div class="line"><a name="l08144"></a><span class="lineno"> 8144</span>&#160; {</div><div class="line"><a name="l08145"></a><span class="lineno"> 8145</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> space = extra_space(s);</div><div class="line"><a name="l08146"></a><span class="lineno"> 8146</span>&#160; <span class="keywordflow">if</span> (space == 0)</div><div class="line"><a name="l08147"></a><span class="lineno"> 8147</span>&#160; {</div><div class="line"><a name="l08148"></a><span class="lineno"> 8148</span>&#160; <span class="keywordflow">return</span> s;</div><div class="line"><a name="l08149"></a><span class="lineno"> 8149</span>&#160; }</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="comment">// create a result string of necessary size</span></div><div class="line"><a name="l08152"></a><span class="lineno"> 8152</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> result(s.size() + space, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l08153"></a><span class="lineno"> 8153</span>&#160; std::size_t pos = 0;</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; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; c : s)</div><div class="line"><a name="l08156"></a><span class="lineno"> 8156</span>&#160; {</div><div class="line"><a name="l08157"></a><span class="lineno"> 8157</span>&#160; <span class="keywordflow">switch</span> (c)</div><div class="line"><a name="l08158"></a><span class="lineno"> 8158</span>&#160; {</div><div class="line"><a name="l08159"></a><span class="lineno"> 8159</span>&#160; <span class="comment">// quotation mark (0x22)</span></div><div class="line"><a name="l08160"></a><span class="lineno"> 8160</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l08161"></a><span class="lineno"> 8161</span>&#160; {</div><div class="line"><a name="l08162"></a><span class="lineno"> 8162</span>&#160; result[pos + 1] = <span class="charliteral">&#39;&quot;&#39;</span>;</div><div class="line"><a name="l08163"></a><span class="lineno"> 8163</span>&#160; pos += 2;</div><div class="line"><a name="l08164"></a><span class="lineno"> 8164</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08165"></a><span class="lineno"> 8165</span>&#160; }</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; <span class="comment">// reverse solidus (0x5c)</span></div><div class="line"><a name="l08168"></a><span class="lineno"> 8168</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#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="comment">// nothing to change</span></div><div class="line"><a name="l08171"></a><span class="lineno"> 8171</span>&#160; pos += 2;</div><div class="line"><a name="l08172"></a><span class="lineno"> 8172</span>&#160; <span class="keywordflow">break</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;</div><div class="line"><a name="l08175"></a><span class="lineno"> 8175</span>&#160; <span class="comment">// backspace (0x08)</span></div><div class="line"><a name="l08176"></a><span class="lineno"> 8176</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\b&#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; result[pos + 1] = <span class="charliteral">&#39;b&#39;</span>;</div><div class="line"><a name="l08179"></a><span class="lineno"> 8179</span>&#160; pos += 2;</div><div class="line"><a name="l08180"></a><span class="lineno"> 8180</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l08183"></a><span class="lineno"> 8183</span>&#160; <span class="comment">// formfeed (0x0c)</span></div><div class="line"><a name="l08184"></a><span class="lineno"> 8184</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\f&#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; result[pos + 1] = <span class="charliteral">&#39;f&#39;</span>;</div><div class="line"><a name="l08187"></a><span class="lineno"> 8187</span>&#160; pos += 2;</div><div class="line"><a name="l08188"></a><span class="lineno"> 8188</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l08191"></a><span class="lineno"> 8191</span>&#160; <span class="comment">// newline (0x0a)</span></div><div class="line"><a name="l08192"></a><span class="lineno"> 8192</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\n&#39;</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; result[pos + 1] = <span class="charliteral">&#39;n&#39;</span>;</div><div class="line"><a name="l08195"></a><span class="lineno"> 8195</span>&#160; pos += 2;</div><div class="line"><a name="l08196"></a><span class="lineno"> 8196</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l08199"></a><span class="lineno"> 8199</span>&#160; <span class="comment">// carriage return (0x0d)</span></div><div class="line"><a name="l08200"></a><span class="lineno"> 8200</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\r&#39;</span>:</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; result[pos + 1] = <span class="charliteral">&#39;r&#39;</span>;</div><div class="line"><a name="l08203"></a><span class="lineno"> 8203</span>&#160; pos += 2;</div><div class="line"><a name="l08204"></a><span class="lineno"> 8204</span>&#160; <span class="keywordflow">break</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;</div><div class="line"><a name="l08207"></a><span class="lineno"> 8207</span>&#160; <span class="comment">// horizontal tab (0x09)</span></div><div class="line"><a name="l08208"></a><span class="lineno"> 8208</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</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; result[pos + 1] = <span class="charliteral">&#39;t&#39;</span>;</div><div class="line"><a name="l08211"></a><span class="lineno"> 8211</span>&#160; pos += 2;</div><div class="line"><a name="l08212"></a><span class="lineno"> 8212</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l08215"></a><span class="lineno"> 8215</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l08216"></a><span class="lineno"> 8216</span>&#160; {</div><div class="line"><a name="l08217"></a><span class="lineno"> 8217</span>&#160; <span class="keywordflow">if</span> (c &gt;= 0x00 and c &lt;= 0x1f)</div><div class="line"><a name="l08218"></a><span class="lineno"> 8218</span>&#160; {</div><div class="line"><a name="l08219"></a><span class="lineno"> 8219</span>&#160; <span class="comment">// convert a number 0..15 to its hex representation</span></div><div class="line"><a name="l08220"></a><span class="lineno"> 8220</span>&#160; <span class="comment">// (0..f)</span></div><div class="line"><a name="l08221"></a><span class="lineno"> 8221</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="l08222"></a><span class="lineno"> 8222</span>&#160; {</div><div class="line"><a name="l08223"></a><span class="lineno"> 8223</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="l08224"></a><span class="lineno"> 8224</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="l08225"></a><span class="lineno"> 8225</span>&#160; };</div><div class="line"><a name="l08226"></a><span class="lineno"> 8226</span>&#160;</div><div class="line"><a name="l08227"></a><span class="lineno"> 8227</span>&#160; <span class="comment">// print character c as \uxxxx</span></div><div class="line"><a name="l08228"></a><span class="lineno"> 8228</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> m :</div><div class="line"><a name="l08229"></a><span class="lineno"> 8229</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="l08230"></a><span class="lineno"> 8230</span>&#160; })</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; result[++pos] = m;</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;</div><div class="line"><a name="l08235"></a><span class="lineno"> 8235</span>&#160; ++pos;</div><div class="line"><a name="l08236"></a><span class="lineno"> 8236</span>&#160; }</div><div class="line"><a name="l08237"></a><span class="lineno"> 8237</span>&#160; <span class="keywordflow">else</span></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; <span class="comment">// all other characters are added as-is</span></div><div class="line"><a name="l08240"></a><span class="lineno"> 8240</span>&#160; result[pos++] = c;</div><div class="line"><a name="l08241"></a><span class="lineno"> 8241</span>&#160; }</div><div class="line"><a name="l08242"></a><span class="lineno"> 8242</span>&#160; <span class="keywordflow">break</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; }</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;</div><div class="line"><a name="l08247"></a><span class="lineno"> 8247</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08248"></a><span class="lineno"> 8248</span>&#160; }</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;</div><div class="line"><a name="l08254"></a><span class="lineno"> 8254</span>&#160; <span class="keyword">struct </span>numtostr</div><div class="line"><a name="l08255"></a><span class="lineno"> 8255</span>&#160; {</div><div class="line"><a name="l08256"></a><span class="lineno"> 8256</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08257"></a><span class="lineno"> 8257</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> NumberType&gt;</div><div class="line"><a name="l08258"></a><span class="lineno"> 8258</span>&#160; numtostr(NumberType value)</div><div class="line"><a name="l08259"></a><span class="lineno"> 8259</span>&#160; {</div><div class="line"><a name="l08260"></a><span class="lineno"> 8260</span>&#160; x_write(value, std::is_integral&lt;NumberType&gt;());</div><div class="line"><a name="l08261"></a><span class="lineno"> 8261</span>&#160; }</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="keyword">const</span> <span class="keywordtype">char</span>* c_str()<span class="keyword"> const</span></div><div class="line"><a name="l08264"></a><span class="lineno"> 8264</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08265"></a><span class="lineno"> 8265</span>&#160; <span class="keywordflow">return</span> m_buf.data();</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;</div><div class="line"><a name="l08268"></a><span class="lineno"> 8268</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08270"></a><span class="lineno"> 8270</span>&#160; std::array &lt; char, 64 &gt; m_buf{{}};</div><div class="line"><a name="l08271"></a><span class="lineno"> 8271</span>&#160;</div><div class="line"><a name="l08272"></a><span class="lineno"> 8272</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> NumberType&gt;</div><div class="line"><a name="l08273"></a><span class="lineno"> 8273</span>&#160; <span class="keywordtype">void</span> x_write(NumberType x, <span class="comment">/*is_integral=*/</span>std::true_type)</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="comment">// special case for &quot;0&quot;</span></div><div class="line"><a name="l08276"></a><span class="lineno"> 8276</span>&#160; <span class="keywordflow">if</span> (x == 0)</div><div class="line"><a name="l08277"></a><span class="lineno"> 8277</span>&#160; {</div><div class="line"><a name="l08278"></a><span class="lineno"> 8278</span>&#160; m_buf[0] = <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l08279"></a><span class="lineno"> 8279</span>&#160; <span class="keywordflow">return</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;</div><div class="line"><a name="l08282"></a><span class="lineno"> 8282</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> is_negative = x &lt; 0;</div><div class="line"><a name="l08283"></a><span class="lineno"> 8283</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l08284"></a><span class="lineno"> 8284</span>&#160;</div><div class="line"><a name="l08285"></a><span class="lineno"> 8285</span>&#160; <span class="comment">// spare 1 byte for &#39;\0&#39;</span></div><div class="line"><a name="l08286"></a><span class="lineno"> 8286</span>&#160; <span class="keywordflow">while</span> (x != 0 and i &lt; m_buf.size() - 1)</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="keyword">const</span> <span class="keyword">auto</span> digit = std::labs(static_cast&lt;long&gt;(x % 10));</div><div class="line"><a name="l08289"></a><span class="lineno"> 8289</span>&#160; m_buf[i++] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(<span class="charliteral">&#39;0&#39;</span> + digit);</div><div class="line"><a name="l08290"></a><span class="lineno"> 8290</span>&#160; x /= 10;</div><div class="line"><a name="l08291"></a><span class="lineno"> 8291</span>&#160; }</div><div class="line"><a name="l08292"></a><span class="lineno"> 8292</span>&#160;</div><div class="line"><a name="l08293"></a><span class="lineno"> 8293</span>&#160; <span class="comment">// make sure the number has been processed completely</span></div><div class="line"><a name="l08294"></a><span class="lineno"> 8294</span>&#160; assert(x == 0);</div><div class="line"><a name="l08295"></a><span class="lineno"> 8295</span>&#160;</div><div class="line"><a name="l08296"></a><span class="lineno"> 8296</span>&#160; <span class="keywordflow">if</span> (is_negative)</div><div class="line"><a name="l08297"></a><span class="lineno"> 8297</span>&#160; {</div><div class="line"><a name="l08298"></a><span class="lineno"> 8298</span>&#160; <span class="comment">// make sure there is capacity for the &#39;-&#39;</span></div><div class="line"><a name="l08299"></a><span class="lineno"> 8299</span>&#160; assert(i &lt; m_buf.size() - 2);</div><div class="line"><a name="l08300"></a><span class="lineno"> 8300</span>&#160; m_buf[i++] = <span class="charliteral">&#39;-&#39;</span>;</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;</div><div class="line"><a name="l08303"></a><span class="lineno"> 8303</span>&#160; std::reverse(m_buf.begin(), m_buf.begin() + i);</div><div class="line"><a name="l08304"></a><span class="lineno"> 8304</span>&#160; }</div><div class="line"><a name="l08305"></a><span class="lineno"> 8305</span>&#160;</div><div class="line"><a name="l08306"></a><span class="lineno"> 8306</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> NumberType&gt;</div><div class="line"><a name="l08307"></a><span class="lineno"> 8307</span>&#160; <span class="keywordtype">void</span> x_write(NumberType x, <span class="comment">/*is_integral=*/</span>std::false_type)</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; <span class="comment">// special case for 0.0 and -0.0</span></div><div class="line"><a name="l08310"></a><span class="lineno"> 8310</span>&#160; <span class="keywordflow">if</span> (x == 0)</div><div class="line"><a name="l08311"></a><span class="lineno"> 8311</span>&#160; {</div><div class="line"><a name="l08312"></a><span class="lineno"> 8312</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l08313"></a><span class="lineno"> 8313</span>&#160; <span class="keywordflow">if</span> (std::signbit(x))</div><div class="line"><a name="l08314"></a><span class="lineno"> 8314</span>&#160; {</div><div class="line"><a name="l08315"></a><span class="lineno"> 8315</span>&#160; m_buf[i++] = <span class="charliteral">&#39;-&#39;</span>;</div><div class="line"><a name="l08316"></a><span class="lineno"> 8316</span>&#160; }</div><div class="line"><a name="l08317"></a><span class="lineno"> 8317</span>&#160; m_buf[i++] = <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l08318"></a><span class="lineno"> 8318</span>&#160; m_buf[i++] = <span class="charliteral">&#39;.&#39;</span>;</div><div class="line"><a name="l08319"></a><span class="lineno"> 8319</span>&#160; m_buf[i] = <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l08320"></a><span class="lineno"> 8320</span>&#160; <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l08323"></a><span class="lineno"> 8323</span>&#160; <span class="comment">// get number of digits for a text -&gt; float -&gt; text round-trip</span></div><div class="line"><a name="l08324"></a><span class="lineno"> 8324</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> d = std::numeric_limits&lt;NumberType&gt;::digits10;</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="comment">// the actual conversion</span></div><div class="line"><a name="l08327"></a><span class="lineno"> 8327</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> written_bytes = snprintf(m_buf.data(), m_buf.size(), <span class="stringliteral">&quot;%.*g&quot;</span>, d, x);</div><div class="line"><a name="l08328"></a><span class="lineno"> 8328</span>&#160;</div><div class="line"><a name="l08329"></a><span class="lineno"> 8329</span>&#160; <span class="comment">// negative value indicates an error</span></div><div class="line"><a name="l08330"></a><span class="lineno"> 8330</span>&#160; assert(written_bytes &gt; 0);</div><div class="line"><a name="l08331"></a><span class="lineno"> 8331</span>&#160; <span class="comment">// check if buffer was large enough</span></div><div class="line"><a name="l08332"></a><span class="lineno"> 8332</span>&#160; assert(static_cast&lt;size_t&gt;(written_bytes) &lt; m_buf.size());</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="comment">// read information from locale</span></div><div class="line"><a name="l08335"></a><span class="lineno"> 8335</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> loc = localeconv();</div><div class="line"><a name="l08336"></a><span class="lineno"> 8336</span>&#160; assert(loc != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08337"></a><span class="lineno"> 8337</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> thousands_sep = !loc-&gt;thousands_sep ? <span class="charliteral">&#39;\0&#39;</span></div><div class="line"><a name="l08338"></a><span class="lineno"> 8338</span>&#160; : loc-&gt;thousands_sep[0];</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; <span class="keyword">const</span> <span class="keywordtype">char</span> decimal_point = !loc-&gt;decimal_point ? <span class="charliteral">&#39;\0&#39;</span></div><div class="line"><a name="l08341"></a><span class="lineno"> 8341</span>&#160; : loc-&gt;decimal_point[0];</div><div class="line"><a name="l08342"></a><span class="lineno"> 8342</span>&#160;</div><div class="line"><a name="l08343"></a><span class="lineno"> 8343</span>&#160; <span class="comment">// erase thousands separator</span></div><div class="line"><a name="l08344"></a><span class="lineno"> 8344</span>&#160; <span class="keywordflow">if</span> (thousands_sep != <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l08345"></a><span class="lineno"> 8345</span>&#160; {</div><div class="line"><a name="l08346"></a><span class="lineno"> 8346</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> end = std::remove(m_buf.begin(), m_buf.begin() + written_bytes, thousands_sep);</div><div class="line"><a name="l08347"></a><span class="lineno"> 8347</span>&#160; std::fill(end, m_buf.end(), <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l08348"></a><span class="lineno"> 8348</span>&#160; }</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="comment">// convert decimal point to &#39;.&#39;</span></div><div class="line"><a name="l08351"></a><span class="lineno"> 8351</span>&#160; <span class="keywordflow">if</span> (decimal_point != <span class="charliteral">&#39;\0&#39;</span> and decimal_point != <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l08352"></a><span class="lineno"> 8352</span>&#160; {</div><div class="line"><a name="l08353"></a><span class="lineno"> 8353</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; c : m_buf)</div><div class="line"><a name="l08354"></a><span class="lineno"> 8354</span>&#160; {</div><div class="line"><a name="l08355"></a><span class="lineno"> 8355</span>&#160; <span class="keywordflow">if</span> (c == decimal_point)</div><div class="line"><a name="l08356"></a><span class="lineno"> 8356</span>&#160; {</div><div class="line"><a name="l08357"></a><span class="lineno"> 8357</span>&#160; c = <span class="charliteral">&#39;.&#39;</span>;</div><div class="line"><a name="l08358"></a><span class="lineno"> 8358</span>&#160; <span class="keywordflow">break</span>;</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; }</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;</div><div class="line"><a name="l08363"></a><span class="lineno"> 8363</span>&#160; <span class="comment">// determine if need to append &quot;.0&quot;</span></div><div class="line"><a name="l08364"></a><span class="lineno"> 8364</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l08365"></a><span class="lineno"> 8365</span>&#160; <span class="keywordtype">bool</span> value_is_int_like = <span class="keyword">true</span>;</div><div class="line"><a name="l08366"></a><span class="lineno"> 8366</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; m_buf.size(); ++i)</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="comment">// break when end of number is reached</span></div><div class="line"><a name="l08369"></a><span class="lineno"> 8369</span>&#160; <span class="keywordflow">if</span> (m_buf[i] == <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l08370"></a><span class="lineno"> 8370</span>&#160; {</div><div class="line"><a name="l08371"></a><span class="lineno"> 8371</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08372"></a><span class="lineno"> 8372</span>&#160; }</div><div class="line"><a name="l08373"></a><span class="lineno"> 8373</span>&#160;</div><div class="line"><a name="l08374"></a><span class="lineno"> 8374</span>&#160; <span class="comment">// check if we find non-int character</span></div><div class="line"><a name="l08375"></a><span class="lineno"> 8375</span>&#160; value_is_int_like = value_is_int_like and m_buf[i] != <span class="charliteral">&#39;.&#39;</span> and</div><div class="line"><a name="l08376"></a><span class="lineno"> 8376</span>&#160; m_buf[i] != <span class="charliteral">&#39;e&#39;</span> and m_buf[i] != <span class="charliteral">&#39;E&#39;</span>;</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;</div><div class="line"><a name="l08379"></a><span class="lineno"> 8379</span>&#160; <span class="keywordflow">if</span> (value_is_int_like)</div><div class="line"><a name="l08380"></a><span class="lineno"> 8380</span>&#160; {</div><div class="line"><a name="l08381"></a><span class="lineno"> 8381</span>&#160; <span class="comment">// there must be 2 bytes left for &quot;.0&quot;</span></div><div class="line"><a name="l08382"></a><span class="lineno"> 8382</span>&#160; assert((i + 2) &lt; m_buf.size());</div><div class="line"><a name="l08383"></a><span class="lineno"> 8383</span>&#160; <span class="comment">// we write to the end of the number</span></div><div class="line"><a name="l08384"></a><span class="lineno"> 8384</span>&#160; assert(m_buf[i] == <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l08385"></a><span class="lineno"> 8385</span>&#160; assert(m_buf[i - 1] != <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l08386"></a><span class="lineno"> 8386</span>&#160;</div><div class="line"><a name="l08387"></a><span class="lineno"> 8387</span>&#160; <span class="comment">// add &quot;.0&quot;</span></div><div class="line"><a name="l08388"></a><span class="lineno"> 8388</span>&#160; m_buf[i] = <span class="charliteral">&#39;.&#39;</span>;</div><div class="line"><a name="l08389"></a><span class="lineno"> 8389</span>&#160; m_buf[i + 1] = <span class="charliteral">&#39;0&#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="comment">// the resulting string is properly terminated</span></div><div class="line"><a name="l08392"></a><span class="lineno"> 8392</span>&#160; assert(m_buf[i + 2] == <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l08393"></a><span class="lineno"> 8393</span>&#160; }</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; };</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;</div><div class="line"><a name="l08415"></a><span class="lineno"> 8415</span>&#160; <span class="keywordtype">void</span> dump(std::ostream&amp; o,</div><div class="line"><a name="l08416"></a><span class="lineno"> 8416</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> pretty_print,</div><div class="line"><a name="l08417"></a><span class="lineno"> 8417</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="l08418"></a><span class="lineno"> 8418</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="l08419"></a><span class="lineno"> 8419</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08420"></a><span class="lineno"> 8420</span>&#160; <span class="comment">// variable to hold indentation for recursive calls</span></div><div class="line"><a name="l08421"></a><span class="lineno"> 8421</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> new_indent = current_indent;</div><div class="line"><a name="l08422"></a><span class="lineno"> 8422</span>&#160;</div><div class="line"><a name="l08423"></a><span class="lineno"> 8423</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l08424"></a><span class="lineno"> 8424</span>&#160; {</div><div class="line"><a name="l08425"></a><span class="lineno"> 8425</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l08426"></a><span class="lineno"> 8426</span>&#160; {</div><div class="line"><a name="l08427"></a><span class="lineno"> 8427</span>&#160; <span class="keywordflow">if</span> (m_value.object-&gt;empty())</div><div class="line"><a name="l08428"></a><span class="lineno"> 8428</span>&#160; {</div><div class="line"><a name="l08429"></a><span class="lineno"> 8429</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;{}&quot;</span>;</div><div class="line"><a name="l08430"></a><span class="lineno"> 8430</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08431"></a><span class="lineno"> 8431</span>&#160; }</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; o &lt;&lt; <span class="stringliteral">&quot;{&quot;</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="comment">// increase indentation</span></div><div class="line"><a name="l08436"></a><span class="lineno"> 8436</span>&#160; <span class="keywordflow">if</span> (pretty_print)</div><div class="line"><a name="l08437"></a><span class="lineno"> 8437</span>&#160; {</div><div class="line"><a name="l08438"></a><span class="lineno"> 8438</span>&#160; new_indent += indent_step;</div><div class="line"><a name="l08439"></a><span class="lineno"> 8439</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;</div><div class="line"><a name="l08442"></a><span class="lineno"> 8442</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="l08443"></a><span class="lineno"> 8443</span>&#160; {</div><div class="line"><a name="l08444"></a><span class="lineno"> 8444</span>&#160; <span class="keywordflow">if</span> (i != m_value.object-&gt;cbegin())</div><div class="line"><a name="l08445"></a><span class="lineno"> 8445</span>&#160; {</div><div class="line"><a name="l08446"></a><span class="lineno"> 8446</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="l08447"></a><span class="lineno"> 8447</span>&#160; }</div><div class="line"><a name="l08448"></a><span class="lineno"> 8448</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">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="l08449"></a><span class="lineno"> 8449</span>&#160; &lt;&lt; escape_string(i-&gt;first) &lt;&lt; <span class="stringliteral">&quot;\&quot;:&quot;</span></div><div class="line"><a name="l08450"></a><span class="lineno"> 8450</span>&#160; &lt;&lt; (pretty_print ? <span class="stringliteral">&quot; &quot;</span> : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l08451"></a><span class="lineno"> 8451</span>&#160; i-&gt;second.dump(o, pretty_print, indent_step, new_indent);</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;</div><div class="line"><a name="l08454"></a><span class="lineno"> 8454</span>&#160; <span class="comment">// decrease indentation</span></div><div class="line"><a name="l08455"></a><span class="lineno"> 8455</span>&#160; <span class="keywordflow">if</span> (pretty_print)</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; new_indent -= indent_step;</div><div class="line"><a name="l08458"></a><span class="lineno"> 8458</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l08459"></a><span class="lineno"> 8459</span>&#160; }</div><div class="line"><a name="l08460"></a><span class="lineno"> 8460</span>&#160;</div><div class="line"><a name="l08461"></a><span class="lineno"> 8461</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>) + <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l08462"></a><span class="lineno"> 8462</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08463"></a><span class="lineno"> 8463</span>&#160; }</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">case</span> value_t::array:</div><div class="line"><a name="l08466"></a><span class="lineno"> 8466</span>&#160; {</div><div class="line"><a name="l08467"></a><span class="lineno"> 8467</span>&#160; <span class="keywordflow">if</span> (m_value.array-&gt;empty())</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; o &lt;&lt; <span class="stringliteral">&quot;[]&quot;</span>;</div><div class="line"><a name="l08470"></a><span class="lineno"> 8470</span>&#160; <span class="keywordflow">return</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;</div><div class="line"><a name="l08473"></a><span class="lineno"> 8473</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</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; <span class="comment">// increase indentation</span></div><div class="line"><a name="l08476"></a><span class="lineno"> 8476</span>&#160; <span class="keywordflow">if</span> (pretty_print)</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; new_indent += indent_step;</div><div class="line"><a name="l08479"></a><span class="lineno"> 8479</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l08480"></a><span class="lineno"> 8480</span>&#160; }</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; <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="l08483"></a><span class="lineno"> 8483</span>&#160; {</div><div class="line"><a name="l08484"></a><span class="lineno"> 8484</span>&#160; <span class="keywordflow">if</span> (i != m_value.array-&gt;cbegin())</div><div class="line"><a name="l08485"></a><span class="lineno"> 8485</span>&#160; {</div><div class="line"><a name="l08486"></a><span class="lineno"> 8486</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="l08487"></a><span class="lineno"> 8487</span>&#160; }</div><div class="line"><a name="l08488"></a><span class="lineno"> 8488</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l08489"></a><span class="lineno"> 8489</span>&#160; i-&gt;dump(o, pretty_print, indent_step, new_indent);</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;</div><div class="line"><a name="l08492"></a><span class="lineno"> 8492</span>&#160; <span class="comment">// decrease indentation</span></div><div class="line"><a name="l08493"></a><span class="lineno"> 8493</span>&#160; <span class="keywordflow">if</span> (pretty_print)</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; new_indent -= indent_step;</div><div class="line"><a name="l08496"></a><span class="lineno"> 8496</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l08497"></a><span class="lineno"> 8497</span>&#160; }</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; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">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="l08500"></a><span class="lineno"> 8500</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08501"></a><span class="lineno"> 8501</span>&#160; }</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">case</span> value_t::string:</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; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">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="l08506"></a><span class="lineno"> 8506</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08507"></a><span class="lineno"> 8507</span>&#160; }</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">case</span> value_t::boolean:</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; 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="l08512"></a><span class="lineno"> 8512</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08513"></a><span class="lineno"> 8513</span>&#160; }</div><div class="line"><a name="l08514"></a><span class="lineno"> 8514</span>&#160;</div><div class="line"><a name="l08515"></a><span class="lineno"> 8515</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l08516"></a><span class="lineno"> 8516</span>&#160; {</div><div class="line"><a name="l08517"></a><span class="lineno"> 8517</span>&#160; o &lt;&lt; numtostr(m_value.number_integer).c_str();</div><div class="line"><a name="l08518"></a><span class="lineno"> 8518</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08519"></a><span class="lineno"> 8519</span>&#160; }</div><div class="line"><a name="l08520"></a><span class="lineno"> 8520</span>&#160;</div><div class="line"><a name="l08521"></a><span class="lineno"> 8521</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</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; o &lt;&lt; numtostr(m_value.number_unsigned).c_str();</div><div class="line"><a name="l08524"></a><span class="lineno"> 8524</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l08525"></a><span class="lineno"> 8525</span>&#160; }</div><div class="line"><a name="l08526"></a><span class="lineno"> 8526</span>&#160;</div><div class="line"><a name="l08527"></a><span class="lineno"> 8527</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l08528"></a><span class="lineno"> 8528</span>&#160; {</div><div class="line"><a name="l08529"></a><span class="lineno"> 8529</span>&#160; o &lt;&lt; numtostr(m_value.number_float).c_str();</div><div class="line"><a name="l08530"></a><span class="lineno"> 8530</span>&#160; <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l08533"></a><span class="lineno"> 8533</span>&#160; <span class="keywordflow">case</span> value_t::discarded:</div><div class="line"><a name="l08534"></a><span class="lineno"> 8534</span>&#160; {</div><div class="line"><a name="l08535"></a><span class="lineno"> 8535</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;&lt;discarded&gt;&quot;</span>;</div><div class="line"><a name="l08536"></a><span class="lineno"> 8536</span>&#160; <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l08539"></a><span class="lineno"> 8539</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l08540"></a><span class="lineno"> 8540</span>&#160; {</div><div class="line"><a name="l08541"></a><span class="lineno"> 8541</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;null&quot;</span>;</div><div class="line"><a name="l08542"></a><span class="lineno"> 8542</span>&#160; <span class="keywordflow">return</span>;</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; }</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;</div><div class="line"><a name="l08547"></a><span class="lineno"> 8547</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08549"></a><span class="lineno"> 8549</span>&#160; <span class="comment">// member variables //</span></div><div class="line"><a name="l08551"></a><span class="lineno"> 8551</span>&#160;<span class="comment"></span></div><div class="line"><a name="l08553"></a><span class="lineno"> 8553</span>&#160; value_t m_type = value_t::null;</div><div class="line"><a name="l08554"></a><span class="lineno"> 8554</span>&#160;</div><div class="line"><a name="l08556"></a><span class="lineno"> 8556</span>&#160; json_value m_value = {};</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;</div><div class="line"><a name="l08559"></a><span class="lineno"> 8559</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08561"></a><span class="lineno"> 8561</span>&#160; <span class="comment">// iterators //</span></div><div class="line"><a name="l08563"></a><span class="lineno"> 8563</span>&#160;<span class="comment"></span></div><div class="line"><a name="l08573"></a><span class="lineno"> 8573</span>&#160; <span class="keyword">class </span>primitive_iterator_t</div><div class="line"><a name="l08574"></a><span class="lineno"> 8574</span>&#160; {</div><div class="line"><a name="l08575"></a><span class="lineno"> 8575</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08576"></a><span class="lineno"> 8576</span>&#160;</div><div class="line"><a name="l08577"></a><span class="lineno"> 8577</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> get_value() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l08578"></a><span class="lineno"> 8578</span>&#160; {</div><div class="line"><a name="l08579"></a><span class="lineno"> 8579</span>&#160; <span class="keywordflow">return</span> m_it;</div><div class="line"><a name="l08580"></a><span class="lineno"> 8580</span>&#160; }</div><div class="line"><a name="l08582"></a><span class="lineno"> 8582</span>&#160; <span class="keywordtype">void</span> set_begin() noexcept</div><div class="line"><a name="l08583"></a><span class="lineno"> 8583</span>&#160; {</div><div class="line"><a name="l08584"></a><span class="lineno"> 8584</span>&#160; m_it = begin_value;</div><div class="line"><a name="l08585"></a><span class="lineno"> 8585</span>&#160; }</div><div class="line"><a name="l08586"></a><span class="lineno"> 8586</span>&#160;</div><div class="line"><a name="l08588"></a><span class="lineno"> 8588</span>&#160; <span class="keywordtype">void</span> set_end() noexcept</div><div class="line"><a name="l08589"></a><span class="lineno"> 8589</span>&#160; {</div><div class="line"><a name="l08590"></a><span class="lineno"> 8590</span>&#160; m_it = end_value;</div><div class="line"><a name="l08591"></a><span class="lineno"> 8591</span>&#160; }</div><div class="line"><a name="l08592"></a><span class="lineno"> 8592</span>&#160;</div><div class="line"><a name="l08594"></a><span class="lineno"> 8594</span>&#160; constexpr <span class="keywordtype">bool</span> is_begin() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l08595"></a><span class="lineno"> 8595</span>&#160; {</div><div class="line"><a name="l08596"></a><span class="lineno"> 8596</span>&#160; <span class="keywordflow">return</span> (m_it == begin_value);</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;</div><div class="line"><a name="l08600"></a><span class="lineno"> 8600</span>&#160; constexpr <span class="keywordtype">bool</span> is_end() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l08601"></a><span class="lineno"> 8601</span>&#160; {</div><div class="line"><a name="l08602"></a><span class="lineno"> 8602</span>&#160; <span class="keywordflow">return</span> (m_it == end_value);</div><div class="line"><a name="l08603"></a><span class="lineno"> 8603</span>&#160; }</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; <span class="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</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; <span class="keywordflow">return</span> lhs.m_it == rhs.m_it;</div><div class="line"><a name="l08608"></a><span class="lineno"> 8608</span>&#160; }</div><div class="line"><a name="l08609"></a><span class="lineno"> 8609</span>&#160;</div><div class="line"><a name="l08610"></a><span class="lineno"> 8610</span>&#160; <span class="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator!=(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</div><div class="line"><a name="l08611"></a><span class="lineno"> 8611</span>&#160; {</div><div class="line"><a name="l08612"></a><span class="lineno"> 8612</span>&#160; <span class="keywordflow">return</span> !(lhs == rhs);</div><div class="line"><a name="l08613"></a><span class="lineno"> 8613</span>&#160; }</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="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator&lt;(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</div><div class="line"><a name="l08616"></a><span class="lineno"> 8616</span>&#160; {</div><div class="line"><a name="l08617"></a><span class="lineno"> 8617</span>&#160; <span class="keywordflow">return</span> lhs.m_it &lt; rhs.m_it;</div><div class="line"><a name="l08618"></a><span class="lineno"> 8618</span>&#160; }</div><div class="line"><a name="l08619"></a><span class="lineno"> 8619</span>&#160;</div><div class="line"><a name="l08620"></a><span class="lineno"> 8620</span>&#160; <span class="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator&lt;=(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</div><div class="line"><a name="l08621"></a><span class="lineno"> 8621</span>&#160; {</div><div class="line"><a name="l08622"></a><span class="lineno"> 8622</span>&#160; <span class="keywordflow">return</span> lhs.m_it &lt;= rhs.m_it;</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;</div><div class="line"><a name="l08625"></a><span class="lineno"> 8625</span>&#160; <span class="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator&gt;(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</div><div class="line"><a name="l08626"></a><span class="lineno"> 8626</span>&#160; {</div><div class="line"><a name="l08627"></a><span class="lineno"> 8627</span>&#160; <span class="keywordflow">return</span> lhs.m_it &gt; rhs.m_it;</div><div class="line"><a name="l08628"></a><span class="lineno"> 8628</span>&#160; }</div><div class="line"><a name="l08629"></a><span class="lineno"> 8629</span>&#160;</div><div class="line"><a name="l08630"></a><span class="lineno"> 8630</span>&#160; <span class="keyword">friend</span> constexpr <span class="keywordtype">bool</span> operator&gt;=(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</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; <span class="keywordflow">return</span> lhs.m_it &gt;= rhs.m_it;</div><div class="line"><a name="l08633"></a><span class="lineno"> 8633</span>&#160; }</div><div class="line"><a name="l08634"></a><span class="lineno"> 8634</span>&#160;</div><div class="line"><a name="l08635"></a><span class="lineno"> 8635</span>&#160; primitive_iterator_t operator+(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> i)</div><div class="line"><a name="l08636"></a><span class="lineno"> 8636</span>&#160; {</div><div class="line"><a name="l08637"></a><span class="lineno"> 8637</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l08638"></a><span class="lineno"> 8638</span>&#160; result += i;</div><div class="line"><a name="l08639"></a><span class="lineno"> 8639</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08640"></a><span class="lineno"> 8640</span>&#160; }</div><div class="line"><a name="l08641"></a><span class="lineno"> 8641</span>&#160;</div><div class="line"><a name="l08642"></a><span class="lineno"> 8642</span>&#160; <span class="keyword">friend</span> constexpr <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept</div><div class="line"><a name="l08643"></a><span class="lineno"> 8643</span>&#160; {</div><div class="line"><a name="l08644"></a><span class="lineno"> 8644</span>&#160; <span class="keywordflow">return</span> lhs.m_it - rhs.m_it;</div><div class="line"><a name="l08645"></a><span class="lineno"> 8645</span>&#160; }</div><div class="line"><a name="l08646"></a><span class="lineno"> 8646</span>&#160;</div><div class="line"><a name="l08647"></a><span class="lineno"> 8647</span>&#160; <span class="keyword">friend</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, primitive_iterator_t it)</div><div class="line"><a name="l08648"></a><span class="lineno"> 8648</span>&#160; {</div><div class="line"><a name="l08649"></a><span class="lineno"> 8649</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; it.m_it;</div><div class="line"><a name="l08650"></a><span class="lineno"> 8650</span>&#160; }</div><div class="line"><a name="l08651"></a><span class="lineno"> 8651</span>&#160;</div><div class="line"><a name="l08652"></a><span class="lineno"> 8652</span>&#160; primitive_iterator_t&amp; operator++()</div><div class="line"><a name="l08653"></a><span class="lineno"> 8653</span>&#160; {</div><div class="line"><a name="l08654"></a><span class="lineno"> 8654</span>&#160; ++m_it;</div><div class="line"><a name="l08655"></a><span class="lineno"> 8655</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08656"></a><span class="lineno"> 8656</span>&#160; }</div><div class="line"><a name="l08657"></a><span class="lineno"> 8657</span>&#160;</div><div class="line"><a name="l08658"></a><span class="lineno"> 8658</span>&#160; primitive_iterator_t operator++(<span class="keywordtype">int</span>)</div><div class="line"><a name="l08659"></a><span class="lineno"> 8659</span>&#160; {</div><div class="line"><a name="l08660"></a><span class="lineno"> 8660</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l08661"></a><span class="lineno"> 8661</span>&#160; m_it++;</div><div class="line"><a name="l08662"></a><span class="lineno"> 8662</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08663"></a><span class="lineno"> 8663</span>&#160; }</div><div class="line"><a name="l08664"></a><span class="lineno"> 8664</span>&#160;</div><div class="line"><a name="l08665"></a><span class="lineno"> 8665</span>&#160; primitive_iterator_t&amp; operator--()</div><div class="line"><a name="l08666"></a><span class="lineno"> 8666</span>&#160; {</div><div class="line"><a name="l08667"></a><span class="lineno"> 8667</span>&#160; --m_it;</div><div class="line"><a name="l08668"></a><span class="lineno"> 8668</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08669"></a><span class="lineno"> 8669</span>&#160; }</div><div class="line"><a name="l08670"></a><span class="lineno"> 8670</span>&#160;</div><div class="line"><a name="l08671"></a><span class="lineno"> 8671</span>&#160; primitive_iterator_t operator--(<span class="keywordtype">int</span>)</div><div class="line"><a name="l08672"></a><span class="lineno"> 8672</span>&#160; {</div><div class="line"><a name="l08673"></a><span class="lineno"> 8673</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l08674"></a><span class="lineno"> 8674</span>&#160; m_it--;</div><div class="line"><a name="l08675"></a><span class="lineno"> 8675</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08676"></a><span class="lineno"> 8676</span>&#160; }</div><div class="line"><a name="l08677"></a><span class="lineno"> 8677</span>&#160;</div><div class="line"><a name="l08678"></a><span class="lineno"> 8678</span>&#160; primitive_iterator_t&amp; operator+=(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> n)</div><div class="line"><a name="l08679"></a><span class="lineno"> 8679</span>&#160; {</div><div class="line"><a name="l08680"></a><span class="lineno"> 8680</span>&#160; m_it += n;</div><div class="line"><a name="l08681"></a><span class="lineno"> 8681</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08682"></a><span class="lineno"> 8682</span>&#160; }</div><div class="line"><a name="l08683"></a><span class="lineno"> 8683</span>&#160;</div><div class="line"><a name="l08684"></a><span class="lineno"> 8684</span>&#160; primitive_iterator_t&amp; operator-=(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> n)</div><div class="line"><a name="l08685"></a><span class="lineno"> 8685</span>&#160; {</div><div class="line"><a name="l08686"></a><span class="lineno"> 8686</span>&#160; m_it -= n;</div><div class="line"><a name="l08687"></a><span class="lineno"> 8687</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08688"></a><span class="lineno"> 8688</span>&#160; }</div><div class="line"><a name="l08689"></a><span class="lineno"> 8689</span>&#160;</div><div class="line"><a name="l08690"></a><span class="lineno"> 8690</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08691"></a><span class="lineno"> 8691</span>&#160; <span class="keyword">static</span> constexpr <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> begin_value = 0;</div><div class="line"><a name="l08692"></a><span class="lineno"> 8692</span>&#160; <span class="keyword">static</span> constexpr <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> end_value = begin_value + 1;</div><div class="line"><a name="l08693"></a><span class="lineno"> 8693</span>&#160;</div><div class="line"><a name="l08695"></a><span class="lineno"> 8695</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> m_it = std::numeric_limits&lt;std::ptrdiff_t&gt;::denorm_min();</div><div class="line"><a name="l08696"></a><span class="lineno"> 8696</span>&#160; };</div><div class="line"><a name="l08697"></a><span class="lineno"> 8697</span>&#160;</div><div class="line"><a name="l08705"></a><span class="lineno"> 8705</span>&#160; <span class="keyword">struct </span>internal_iterator</div><div class="line"><a name="l08706"></a><span class="lineno"> 8706</span>&#160; {</div><div class="line"><a name="l08708"></a><span class="lineno"> 8708</span>&#160; <span class="keyword">typename</span> object_t::iterator object_iterator;</div><div class="line"><a name="l08710"></a><span class="lineno"> 8710</span>&#160; <span class="keyword">typename</span> array_t::iterator array_iterator;</div><div class="line"><a name="l08712"></a><span class="lineno"> 8712</span>&#160; primitive_iterator_t primitive_iterator;</div><div class="line"><a name="l08713"></a><span class="lineno"> 8713</span>&#160;</div><div class="line"><a name="l08715"></a><span class="lineno"> 8715</span>&#160; internal_iterator() noexcept</div><div class="line"><a name="l08716"></a><span class="lineno"> 8716</span>&#160; : object_iterator(), array_iterator(), primitive_iterator()</div><div class="line"><a name="l08717"></a><span class="lineno"> 8717</span>&#160; {}</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;</div><div class="line"><a name="l08721"></a><span class="lineno"> 8721</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IteratorType&gt;</div><div class="line"><a name="l08722"></a><span class="lineno"> 8722</span>&#160; <span class="keyword">class </span>iteration_proxy</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; <span class="keyword">private</span>:</div><div class="line"><a name="l08726"></a><span class="lineno"> 8726</span>&#160; <span class="keyword">class </span>iteration_proxy_internal</div><div class="line"><a name="l08727"></a><span class="lineno"> 8727</span>&#160; {</div><div class="line"><a name="l08728"></a><span class="lineno"> 8728</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08730"></a><span class="lineno"> 8730</span>&#160; IteratorType anchor;</div><div class="line"><a name="l08732"></a><span class="lineno"> 8732</span>&#160; <span class="keywordtype">size_t</span> array_index = 0;</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; <span class="keyword">public</span>:</div><div class="line"><a name="l08735"></a><span class="lineno"> 8735</span>&#160; <span class="keyword">explicit</span> iteration_proxy_internal(IteratorType it) noexcept</div><div class="line"><a name="l08736"></a><span class="lineno"> 8736</span>&#160; : anchor(it)</div><div class="line"><a name="l08737"></a><span class="lineno"> 8737</span>&#160; {}</div><div class="line"><a name="l08738"></a><span class="lineno"> 8738</span>&#160;</div><div class="line"><a name="l08740"></a><span class="lineno"> 8740</span>&#160; iteration_proxy_internal&amp; operator*()</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">return</span> *<span class="keyword">this</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;</div><div class="line"><a name="l08746"></a><span class="lineno"> 8746</span>&#160; iteration_proxy_internal&amp; operator++()</div><div class="line"><a name="l08747"></a><span class="lineno"> 8747</span>&#160; {</div><div class="line"><a name="l08748"></a><span class="lineno"> 8748</span>&#160; ++anchor;</div><div class="line"><a name="l08749"></a><span class="lineno"> 8749</span>&#160; ++array_index;</div><div class="line"><a name="l08750"></a><span class="lineno"> 8750</span>&#160;</div><div class="line"><a name="l08751"></a><span class="lineno"> 8751</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08752"></a><span class="lineno"> 8752</span>&#160; }</div><div class="line"><a name="l08753"></a><span class="lineno"> 8753</span>&#160;</div><div class="line"><a name="l08755"></a><span class="lineno"> 8755</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="l08756"></a><span class="lineno"> 8756</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08757"></a><span class="lineno"> 8757</span>&#160; <span class="keywordflow">return</span> anchor != o.anchor;</div><div class="line"><a name="l08758"></a><span class="lineno"> 8758</span>&#160; }</div><div class="line"><a name="l08759"></a><span class="lineno"> 8759</span>&#160;</div><div class="line"><a name="l08761"></a><span class="lineno"> 8761</span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">basic_json::string_t</a> key()<span class="keyword"> const</span></div><div class="line"><a name="l08762"></a><span class="lineno"> 8762</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08763"></a><span class="lineno"> 8763</span>&#160; assert(anchor.m_object != <span class="keyword">nullptr</span>);</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="keywordflow">switch</span> (anchor.m_object-&gt;type())</div><div class="line"><a name="l08766"></a><span class="lineno"> 8766</span>&#160; {</div><div class="line"><a name="l08767"></a><span class="lineno"> 8767</span>&#160; <span class="comment">// use integer array index as key</span></div><div class="line"><a name="l08768"></a><span class="lineno"> 8768</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l08769"></a><span class="lineno"> 8769</span>&#160; {</div><div class="line"><a name="l08770"></a><span class="lineno"> 8770</span>&#160; <span class="keywordflow">return</span> std::to_string(array_index);</div><div class="line"><a name="l08771"></a><span class="lineno"> 8771</span>&#160; }</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; <span class="comment">// use key from the object</span></div><div class="line"><a name="l08774"></a><span class="lineno"> 8774</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l08775"></a><span class="lineno"> 8775</span>&#160; {</div><div class="line"><a name="l08776"></a><span class="lineno"> 8776</span>&#160; <span class="keywordflow">return</span> anchor.key();</div><div class="line"><a name="l08777"></a><span class="lineno"> 8777</span>&#160; }</div><div class="line"><a name="l08778"></a><span class="lineno"> 8778</span>&#160;</div><div class="line"><a name="l08779"></a><span class="lineno"> 8779</span>&#160; <span class="comment">// use an empty key for all primitive types</span></div><div class="line"><a name="l08780"></a><span class="lineno"> 8780</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l08781"></a><span class="lineno"> 8781</span>&#160; {</div><div class="line"><a name="l08782"></a><span class="lineno"> 8782</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l08783"></a><span class="lineno"> 8783</span>&#160; }</div><div class="line"><a name="l08784"></a><span class="lineno"> 8784</span>&#160; }</div><div class="line"><a name="l08785"></a><span class="lineno"> 8785</span>&#160; }</div><div class="line"><a name="l08786"></a><span class="lineno"> 8786</span>&#160;</div><div class="line"><a name="l08788"></a><span class="lineno"> 8788</span>&#160; <span class="keyword">typename</span> IteratorType::reference value()<span class="keyword"> const</span></div><div class="line"><a name="l08789"></a><span class="lineno"> 8789</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08790"></a><span class="lineno"> 8790</span>&#160; <span class="keywordflow">return</span> anchor.value();</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; };</div><div class="line"><a name="l08793"></a><span class="lineno"> 8793</span>&#160;</div><div class="line"><a name="l08795"></a><span class="lineno"> 8795</span>&#160; <span class="keyword">typename</span> IteratorType::reference container;</div><div class="line"><a name="l08796"></a><span class="lineno"> 8796</span>&#160;</div><div class="line"><a name="l08797"></a><span class="lineno"> 8797</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08799"></a><span class="lineno"> 8799</span>&#160; <span class="keyword">explicit</span> iteration_proxy(<span class="keyword">typename</span> IteratorType::reference cont)</div><div class="line"><a name="l08800"></a><span class="lineno"> 8800</span>&#160; : container(cont)</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="l08804"></a><span class="lineno"> 8804</span>&#160; iteration_proxy_internal begin() noexcept</div><div class="line"><a name="l08805"></a><span class="lineno"> 8805</span>&#160; {</div><div class="line"><a name="l08806"></a><span class="lineno"> 8806</span>&#160; <span class="keywordflow">return</span> iteration_proxy_internal(container.begin());</div><div class="line"><a name="l08807"></a><span class="lineno"> 8807</span>&#160; }</div><div class="line"><a name="l08808"></a><span class="lineno"> 8808</span>&#160;</div><div class="line"><a name="l08810"></a><span class="lineno"> 8810</span>&#160; iteration_proxy_internal end() noexcept</div><div class="line"><a name="l08811"></a><span class="lineno"> 8811</span>&#160; {</div><div class="line"><a name="l08812"></a><span class="lineno"> 8812</span>&#160; <span class="keywordflow">return</span> iteration_proxy_internal(container.end());</div><div class="line"><a name="l08813"></a><span class="lineno"> 8813</span>&#160; }</div><div class="line"><a name="l08814"></a><span class="lineno"> 8814</span>&#160; };</div><div class="line"><a name="l08815"></a><span class="lineno"> 8815</span>&#160;</div><div class="line"><a name="l08816"></a><span class="lineno"> 8816</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08836"></a><span class="lineno"> 8836</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l08837"></a><span class="lineno"> 8837</span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> : <span class="keyword">public</span> std::iterator&lt;std::random_access_iterator_tag, U&gt;</div><div class="line"><a name="l08838"></a><span class="lineno"> 8838</span>&#160; {</div><div class="line"><a name="l08840"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745"> 8840</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745">basic_json</a>;</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; <span class="comment">// make sure U is basic_json or const basic_json</span></div><div class="line"><a name="l08843"></a><span class="lineno"> 8843</span>&#160; static_assert(std::is_same&lt;U, basic_json&gt;::value</div><div class="line"><a name="l08844"></a><span class="lineno"> 8844</span>&#160; or std::is_same&lt;U, const basic_json&gt;::value,</div><div class="line"><a name="l08845"></a><span class="lineno"> 8845</span>&#160; <span class="stringliteral">&quot;iter_impl only accepts (const) basic_json&quot;</span>);</div><div class="line"><a name="l08846"></a><span class="lineno"> 8846</span>&#160;</div><div class="line"><a name="l08847"></a><span class="lineno"> 8847</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08849"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a4d0518f3f2edae9dbaf7ef02f4f20add.html#a4d0518f3f2edae9dbaf7ef02f4f20add"> 8849</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a4d0518f3f2edae9dbaf7ef02f4f20add.html#a4d0518f3f2edae9dbaf7ef02f4f20add">value_type</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a2b3297873b70c080837e8eedc4fec32f.html#a2b3297873b70c080837e8eedc4fec32f">basic_json::value_type</a>;</div><div class="line"><a name="l08851"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715"> 8851</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">basic_json::difference_type</a>;</div><div class="line"><a name="l08853"></a><span class="lineno"> 8853</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8">pointer</a> = <span class="keyword">typename</span> std::conditional&lt;std::is_const&lt;U&gt;::value,</div><div class="line"><a name="l08854"></a><span class="lineno"> 8854</span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58">basic_json::const_pointer</a>,</div><div class="line"><a name="l08855"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8"> 8855</a></span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">basic_json::pointer</a>&gt;::type;</div><div class="line"><a name="l08857"></a><span class="lineno"> 8857</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e">reference</a> = <span class="keyword">typename</span> std::conditional&lt;std::is_const&lt;U&gt;::value,</div><div class="line"><a name="l08858"></a><span class="lineno"> 8858</span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a4057c5425f4faacfe39a8046871786ca.html#a4057c5425f4faacfe39a8046871786ca">basic_json::const_reference</a>,</div><div class="line"><a name="l08859"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e"> 8859</a></span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json::reference</a>&gt;::type;</div><div class="line"><a name="l08861"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_adbe1b700b9cdc38f6991fc68683a9c2c.html#adbe1b700b9cdc38f6991fc68683a9c2c"> 8861</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_adbe1b700b9cdc38f6991fc68683a9c2c.html#adbe1b700b9cdc38f6991fc68683a9c2c">iterator_category</a> = std::bidirectional_iterator_tag;</div><div class="line"><a name="l08862"></a><span class="lineno"> 8862</span>&#160;</div><div class="line"><a name="l08864"></a><span class="lineno"> 8864</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l08865"></a><span class="lineno"> 8865</span>&#160;</div><div class="line"><a name="l08872"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_aa496f5348569e75d65592f25e1664770.html#aa496f5348569e75d65592f25e1664770"> 8872</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa496f5348569e75d65592f25e1664770.html#aa496f5348569e75d65592f25e1664770">iter_impl</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8">pointer</a> <span class="keywordtype">object</span>) noexcept</div><div class="line"><a name="l08873"></a><span class="lineno"> 8873</span>&#160; : m_object(<span class="keywordtype">object</span>)</div><div class="line"><a name="l08874"></a><span class="lineno"> 8874</span>&#160; {</div><div class="line"><a name="l08875"></a><span class="lineno"> 8875</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08876"></a><span class="lineno"> 8876</span>&#160;</div><div class="line"><a name="l08877"></a><span class="lineno"> 8877</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l08878"></a><span class="lineno"> 8878</span>&#160; {</div><div class="line"><a name="l08879"></a><span class="lineno"> 8879</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l08880"></a><span class="lineno"> 8880</span>&#160; {</div><div class="line"><a name="l08881"></a><span class="lineno"> 8881</span>&#160; m_it.object_iterator = <span class="keyword">typename</span> object_t::iterator();</div><div class="line"><a name="l08882"></a><span class="lineno"> 8882</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08883"></a><span class="lineno"> 8883</span>&#160; }</div><div class="line"><a name="l08884"></a><span class="lineno"> 8884</span>&#160;</div><div class="line"><a name="l08885"></a><span class="lineno"> 8885</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l08886"></a><span class="lineno"> 8886</span>&#160; {</div><div class="line"><a name="l08887"></a><span class="lineno"> 8887</span>&#160; m_it.array_iterator = <span class="keyword">typename</span> array_t::iterator();</div><div class="line"><a name="l08888"></a><span class="lineno"> 8888</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l08891"></a><span class="lineno"> 8891</span>&#160; <span class="keywordflow">default</span>:</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; m_it.primitive_iterator = primitive_iterator_t();</div><div class="line"><a name="l08894"></a><span class="lineno"> 8894</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l08897"></a><span class="lineno"> 8897</span>&#160; }</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">/*</span></div><div class="line"><a name="l08900"></a><span class="lineno"> 8900</span>&#160;<span class="comment"> Use operator `const_iterator` instead of `const_iterator(const iterator&amp;</span></div><div class="line"><a name="l08901"></a><span class="lineno"> 8901</span>&#160;<span class="comment"> other) noexcept` to avoid two class definitions for @ref iterator and</span></div><div class="line"><a name="l08902"></a><span class="lineno"> 8902</span>&#160;<span class="comment"> @ref const_iterator.</span></div><div class="line"><a name="l08903"></a><span class="lineno"> 8903</span>&#160;<span class="comment"></span></div><div class="line"><a name="l08904"></a><span class="lineno"> 8904</span>&#160;<span class="comment"> This function is only called if this class is an @ref iterator. If this</span></div><div class="line"><a name="l08905"></a><span class="lineno"> 8905</span>&#160;<span class="comment"> class is a @ref const_iterator this function is not called.</span></div><div class="line"><a name="l08906"></a><span class="lineno"> 8906</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l08907"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_af1963645f99993ac5d0d2f8516e07212.html#af1963645f99993ac5d0d2f8516e07212"> 8907</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a>()<span class="keyword"> const</span></div><div class="line"><a name="l08908"></a><span class="lineno"> 8908</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08909"></a><span class="lineno"> 8909</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">const_iterator</a> ret;</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; <span class="keywordflow">if</span> (m_object)</div><div class="line"><a name="l08912"></a><span class="lineno"> 8912</span>&#160; {</div><div class="line"><a name="l08913"></a><span class="lineno"> 8913</span>&#160; ret.m_object = m_object;</div><div class="line"><a name="l08914"></a><span class="lineno"> 8914</span>&#160; ret.m_it = m_it;</div><div class="line"><a name="l08915"></a><span class="lineno"> 8915</span>&#160; }</div><div class="line"><a name="l08916"></a><span class="lineno"> 8916</span>&#160;</div><div class="line"><a name="l08917"></a><span class="lineno"> 8917</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l08918"></a><span class="lineno"> 8918</span>&#160; }</div><div class="line"><a name="l08919"></a><span class="lineno"> 8919</span>&#160;</div><div class="line"><a name="l08925"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a94c010c069b5aed9e064e0579eac9a64.html#a94c010c069b5aed9e064e0579eac9a64"> 8925</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a94c010c069b5aed9e064e0579eac9a64.html#a94c010c069b5aed9e064e0579eac9a64">iter_impl</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other) noexcept</div><div class="line"><a name="l08926"></a><span class="lineno"> 8926</span>&#160; : m_object(other.m_object), m_it(other.m_it)</div><div class="line"><a name="l08927"></a><span class="lineno"> 8927</span>&#160; {}</div><div class="line"><a name="l08928"></a><span class="lineno"> 8928</span>&#160;</div><div class="line"><a name="l08934"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a083d9d5465de7ddfb6108f404ce54be3.html#a083d9d5465de7ddfb6108f404ce54be3"> 8934</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a083d9d5465de7ddfb6108f404ce54be3.html#a083d9d5465de7ddfb6108f404ce54be3">operator=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> other) noexcept(</div><div class="line"><a name="l08935"></a><span class="lineno"> 8935</span>&#160; std::is_nothrow_move_constructible&lt;pointer&gt;::value and</div><div class="line"><a name="l08936"></a><span class="lineno"> 8936</span>&#160; std::is_nothrow_move_assignable&lt;pointer&gt;::value and</div><div class="line"><a name="l08937"></a><span class="lineno"> 8937</span>&#160; std::is_nothrow_move_constructible&lt;internal_iterator&gt;::value and</div><div class="line"><a name="l08938"></a><span class="lineno"> 8938</span>&#160; std::is_nothrow_move_assignable&lt;internal_iterator&gt;::value</div><div class="line"><a name="l08939"></a><span class="lineno"> 8939</span>&#160; )</div><div class="line"><a name="l08940"></a><span class="lineno"> 8940</span>&#160; {</div><div class="line"><a name="l08941"></a><span class="lineno"> 8941</span>&#160; std::swap(m_object, other.m_object);</div><div class="line"><a name="l08942"></a><span class="lineno"> 8942</span>&#160; std::swap(m_it, other.m_it);</div><div class="line"><a name="l08943"></a><span class="lineno"> 8943</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l08944"></a><span class="lineno"> 8944</span>&#160; }</div><div class="line"><a name="l08945"></a><span class="lineno"> 8945</span>&#160;</div><div class="line"><a name="l08946"></a><span class="lineno"> 8946</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08951"></a><span class="lineno"> 8951</span>&#160; <span class="keywordtype">void</span> set_begin() noexcept</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; assert(m_object != <span class="keyword">nullptr</span>);</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">switch</span> (m_object-&gt;m_type)</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; <span class="keywordflow">case</span> basic_json::value_t::object:</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; m_it.object_iterator = m_object-&gt;m_value.object-&gt;begin();</div><div class="line"><a name="l08960"></a><span class="lineno"> 8960</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08961"></a><span class="lineno"> 8961</span>&#160; }</div><div class="line"><a name="l08962"></a><span class="lineno"> 8962</span>&#160;</div><div class="line"><a name="l08963"></a><span class="lineno"> 8963</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</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; m_it.array_iterator = m_object-&gt;m_value.array-&gt;begin();</div><div class="line"><a name="l08966"></a><span class="lineno"> 8966</span>&#160; <span class="keywordflow">break</span>;</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="keywordflow">case</span> basic_json::value_t::null:</div><div class="line"><a name="l08970"></a><span class="lineno"> 8970</span>&#160; {</div><div class="line"><a name="l08971"></a><span class="lineno"> 8971</span>&#160; <span class="comment">// set to end so begin()==end() is true: null is empty</span></div><div class="line"><a name="l08972"></a><span class="lineno"> 8972</span>&#160; m_it.primitive_iterator.set_end();</div><div class="line"><a name="l08973"></a><span class="lineno"> 8973</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08974"></a><span class="lineno"> 8974</span>&#160; }</div><div class="line"><a name="l08975"></a><span class="lineno"> 8975</span>&#160;</div><div class="line"><a name="l08976"></a><span class="lineno"> 8976</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l08977"></a><span class="lineno"> 8977</span>&#160; {</div><div class="line"><a name="l08978"></a><span class="lineno"> 8978</span>&#160; m_it.primitive_iterator.set_begin();</div><div class="line"><a name="l08979"></a><span class="lineno"> 8979</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08980"></a><span class="lineno"> 8980</span>&#160; }</div><div class="line"><a name="l08981"></a><span class="lineno"> 8981</span>&#160; }</div><div class="line"><a name="l08982"></a><span class="lineno"> 8982</span>&#160; }</div><div class="line"><a name="l08983"></a><span class="lineno"> 8983</span>&#160;</div><div class="line"><a name="l08988"></a><span class="lineno"> 8988</span>&#160; <span class="keywordtype">void</span> set_end() noexcept</div><div class="line"><a name="l08989"></a><span class="lineno"> 8989</span>&#160; {</div><div class="line"><a name="l08990"></a><span class="lineno"> 8990</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08991"></a><span class="lineno"> 8991</span>&#160;</div><div class="line"><a name="l08992"></a><span class="lineno"> 8992</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l08993"></a><span class="lineno"> 8993</span>&#160; {</div><div class="line"><a name="l08994"></a><span class="lineno"> 8994</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l08995"></a><span class="lineno"> 8995</span>&#160; {</div><div class="line"><a name="l08996"></a><span class="lineno"> 8996</span>&#160; m_it.object_iterator = m_object-&gt;m_value.object-&gt;end();</div><div class="line"><a name="l08997"></a><span class="lineno"> 8997</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08998"></a><span class="lineno"> 8998</span>&#160; }</div><div class="line"><a name="l08999"></a><span class="lineno"> 8999</span>&#160;</div><div class="line"><a name="l09000"></a><span class="lineno"> 9000</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09001"></a><span class="lineno"> 9001</span>&#160; {</div><div class="line"><a name="l09002"></a><span class="lineno"> 9002</span>&#160; m_it.array_iterator = m_object-&gt;m_value.array-&gt;end();</div><div class="line"><a name="l09003"></a><span class="lineno"> 9003</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09004"></a><span class="lineno"> 9004</span>&#160; }</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; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09007"></a><span class="lineno"> 9007</span>&#160; {</div><div class="line"><a name="l09008"></a><span class="lineno"> 9008</span>&#160; m_it.primitive_iterator.set_end();</div><div class="line"><a name="l09009"></a><span class="lineno"> 9009</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09010"></a><span class="lineno"> 9010</span>&#160; }</div><div class="line"><a name="l09011"></a><span class="lineno"> 9011</span>&#160; }</div><div class="line"><a name="l09012"></a><span class="lineno"> 9012</span>&#160; }</div><div class="line"><a name="l09013"></a><span class="lineno"> 9013</span>&#160;</div><div class="line"><a name="l09014"></a><span class="lineno"> 9014</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09019"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_ae0a628811b09b9adea6d68c3a5c4ca2a.html#ae0a628811b09b9adea6d68c3a5c4ca2a"> 9019</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae0a628811b09b9adea6d68c3a5c4ca2a.html#ae0a628811b09b9adea6d68c3a5c4ca2a">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09020"></a><span class="lineno"> 9020</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09021"></a><span class="lineno"> 9021</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09022"></a><span class="lineno"> 9022</span>&#160;</div><div class="line"><a name="l09023"></a><span class="lineno"> 9023</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09024"></a><span class="lineno"> 9024</span>&#160; {</div><div class="line"><a name="l09025"></a><span class="lineno"> 9025</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</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; assert(m_it.object_iterator != m_object-&gt;m_value.object-&gt;end());</div><div class="line"><a name="l09028"></a><span class="lineno"> 9028</span>&#160; <span class="keywordflow">return</span> m_it.object_iterator-&gt;second;</div><div class="line"><a name="l09029"></a><span class="lineno"> 9029</span>&#160; }</div><div class="line"><a name="l09030"></a><span class="lineno"> 9030</span>&#160;</div><div class="line"><a name="l09031"></a><span class="lineno"> 9031</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</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; assert(m_it.array_iterator != m_object-&gt;m_value.array-&gt;end());</div><div class="line"><a name="l09034"></a><span class="lineno"> 9034</span>&#160; <span class="keywordflow">return</span> *m_it.array_iterator;</div><div class="line"><a name="l09035"></a><span class="lineno"> 9035</span>&#160; }</div><div class="line"><a name="l09036"></a><span class="lineno"> 9036</span>&#160;</div><div class="line"><a name="l09037"></a><span class="lineno"> 9037</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::null:</div><div class="line"><a name="l09038"></a><span class="lineno"> 9038</span>&#160; {</div><div class="line"><a name="l09039"></a><span class="lineno"> 9039</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>));</div><div class="line"><a name="l09040"></a><span class="lineno"> 9040</span>&#160; }</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">default</span>:</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> (m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l09045"></a><span class="lineno"> 9045</span>&#160; {</div><div class="line"><a name="l09046"></a><span class="lineno"> 9046</span>&#160; <span class="keywordflow">return</span> *m_object;</div><div class="line"><a name="l09047"></a><span class="lineno"> 9047</span>&#160; }</div><div class="line"><a name="l09048"></a><span class="lineno"> 9048</span>&#160;</div><div class="line"><a name="l09049"></a><span class="lineno"> 9049</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>));</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; }</div><div class="line"><a name="l09053"></a><span class="lineno"> 9053</span>&#160;</div><div class="line"><a name="l09058"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_afd0d209ef3a07a8aa3ee46e03538ffa6.html#afd0d209ef3a07a8aa3ee46e03538ffa6"> 9058</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8">pointer</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_afd0d209ef3a07a8aa3ee46e03538ffa6.html#afd0d209ef3a07a8aa3ee46e03538ffa6">operator-&gt;</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09059"></a><span class="lineno"> 9059</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09060"></a><span class="lineno"> 9060</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09061"></a><span class="lineno"> 9061</span>&#160;</div><div class="line"><a name="l09062"></a><span class="lineno"> 9062</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09063"></a><span class="lineno"> 9063</span>&#160; {</div><div class="line"><a name="l09064"></a><span class="lineno"> 9064</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</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; assert(m_it.object_iterator != m_object-&gt;m_value.object-&gt;end());</div><div class="line"><a name="l09067"></a><span class="lineno"> 9067</span>&#160; <span class="keywordflow">return</span> &amp;(m_it.object_iterator-&gt;second);</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;</div><div class="line"><a name="l09070"></a><span class="lineno"> 9070</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</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; assert(m_it.array_iterator != m_object-&gt;m_value.array-&gt;end());</div><div class="line"><a name="l09073"></a><span class="lineno"> 9073</span>&#160; <span class="keywordflow">return</span> &amp;*m_it.array_iterator;</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;</div><div class="line"><a name="l09076"></a><span class="lineno"> 9076</span>&#160; <span class="keywordflow">default</span>:</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="keywordflow">if</span> (m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l09079"></a><span class="lineno"> 9079</span>&#160; {</div><div class="line"><a name="l09080"></a><span class="lineno"> 9080</span>&#160; <span class="keywordflow">return</span> m_object;</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;</div><div class="line"><a name="l09083"></a><span class="lineno"> 9083</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>));</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; }</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;</div><div class="line"><a name="l09092"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a74e26f187519bc7181b825b8f38a4e93.html#a74e26f187519bc7181b825b8f38a4e93"> 9092</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a74e26f187519bc7181b825b8f38a4e93.html#a74e26f187519bc7181b825b8f38a4e93">operator++</a>(<span class="keywordtype">int</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; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09095"></a><span class="lineno"> 9095</span>&#160; ++(*this);</div><div class="line"><a name="l09096"></a><span class="lineno"> 9096</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09097"></a><span class="lineno"> 9097</span>&#160; }</div><div class="line"><a name="l09098"></a><span class="lineno"> 9098</span>&#160;</div><div class="line"><a name="l09103"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a60e2723dae1c6d537fc914c664f1a81c.html#a60e2723dae1c6d537fc914c664f1a81c"> 9103</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a60e2723dae1c6d537fc914c664f1a81c.html#a60e2723dae1c6d537fc914c664f1a81c">operator++</a>()</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; assert(m_object != <span class="keyword">nullptr</span>);</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; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09108"></a><span class="lineno"> 9108</span>&#160; {</div><div class="line"><a name="l09109"></a><span class="lineno"> 9109</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l09110"></a><span class="lineno"> 9110</span>&#160; {</div><div class="line"><a name="l09111"></a><span class="lineno"> 9111</span>&#160; std::advance(m_it.object_iterator, 1);</div><div class="line"><a name="l09112"></a><span class="lineno"> 9112</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09113"></a><span class="lineno"> 9113</span>&#160; }</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; <span class="keywordflow">case</span> basic_json::value_t::array:</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; std::advance(m_it.array_iterator, 1);</div><div class="line"><a name="l09118"></a><span class="lineno"> 9118</span>&#160; <span class="keywordflow">break</span>;</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">default</span>:</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; ++m_it.primitive_iterator;</div><div class="line"><a name="l09124"></a><span class="lineno"> 9124</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l09127"></a><span class="lineno"> 9127</span>&#160;</div><div class="line"><a name="l09128"></a><span class="lineno"> 9128</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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="l09135"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a0c3a102ac61d4c6f869fe9a5d065e91e.html#a0c3a102ac61d4c6f869fe9a5d065e91e"> 9135</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a0c3a102ac61d4c6f869fe9a5d065e91e.html#a0c3a102ac61d4c6f869fe9a5d065e91e">operator--</a>(<span class="keywordtype">int</span>)</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; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09138"></a><span class="lineno"> 9138</span>&#160; --(*this);</div><div class="line"><a name="l09139"></a><span class="lineno"> 9139</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09140"></a><span class="lineno"> 9140</span>&#160; }</div><div class="line"><a name="l09141"></a><span class="lineno"> 9141</span>&#160;</div><div class="line"><a name="l09146"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a50c5d20f733bfe2b13d67366102ba3fe.html#a50c5d20f733bfe2b13d67366102ba3fe"> 9146</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a50c5d20f733bfe2b13d67366102ba3fe.html#a50c5d20f733bfe2b13d67366102ba3fe">operator--</a>()</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; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09149"></a><span class="lineno"> 9149</span>&#160;</div><div class="line"><a name="l09150"></a><span class="lineno"> 9150</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09151"></a><span class="lineno"> 9151</span>&#160; {</div><div class="line"><a name="l09152"></a><span class="lineno"> 9152</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</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; std::advance(m_it.object_iterator, -1);</div><div class="line"><a name="l09155"></a><span class="lineno"> 9155</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l09158"></a><span class="lineno"> 9158</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09159"></a><span class="lineno"> 9159</span>&#160; {</div><div class="line"><a name="l09160"></a><span class="lineno"> 9160</span>&#160; std::advance(m_it.array_iterator, -1);</div><div class="line"><a name="l09161"></a><span class="lineno"> 9161</span>&#160; <span class="keywordflow">break</span>;</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">default</span>:</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; --m_it.primitive_iterator;</div><div class="line"><a name="l09167"></a><span class="lineno"> 9167</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09168"></a><span class="lineno"> 9168</span>&#160; }</div><div class="line"><a name="l09169"></a><span class="lineno"> 9169</span>&#160; }</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; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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="l09178"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_af3beb0d08550188082ea64d8becd12fb.html#af3beb0d08550188082ea64d8becd12fb"> 9178</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_af3beb0d08550188082ea64d8becd12fb.html#af3beb0d08550188082ea64d8becd12fb">operator==</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09179"></a><span class="lineno"> 9179</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09180"></a><span class="lineno"> 9180</span>&#160; <span class="comment">// if objects are not the same, the comparison is undefined</span></div><div class="line"><a name="l09181"></a><span class="lineno"> 9181</span>&#160; <span class="keywordflow">if</span> (m_object != other.m_object)</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; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot compare iterators of different containers&quot;</span>));</div><div class="line"><a name="l09184"></a><span class="lineno"> 9184</span>&#160; }</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; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09187"></a><span class="lineno"> 9187</span>&#160;</div><div class="line"><a name="l09188"></a><span class="lineno"> 9188</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09189"></a><span class="lineno"> 9189</span>&#160; {</div><div class="line"><a name="l09190"></a><span class="lineno"> 9190</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</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">return</span> (m_it.object_iterator == other.m_it.object_iterator);</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;</div><div class="line"><a name="l09195"></a><span class="lineno"> 9195</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09196"></a><span class="lineno"> 9196</span>&#160; {</div><div class="line"><a name="l09197"></a><span class="lineno"> 9197</span>&#160; <span class="keywordflow">return</span> (m_it.array_iterator == other.m_it.array_iterator);</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">default</span>:</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; <span class="keywordflow">return</span> (m_it.primitive_iterator == other.m_it.primitive_iterator);</div><div class="line"><a name="l09203"></a><span class="lineno"> 9203</span>&#160; }</div><div class="line"><a name="l09204"></a><span class="lineno"> 9204</span>&#160; }</div><div class="line"><a name="l09205"></a><span class="lineno"> 9205</span>&#160; }</div><div class="line"><a name="l09206"></a><span class="lineno"> 9206</span>&#160;</div><div class="line"><a name="l09211"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_af6f10c91f59565b6c6e7205ab6969a89.html#af6f10c91f59565b6c6e7205ab6969a89"> 9211</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_af6f10c91f59565b6c6e7205ab6969a89.html#af6f10c91f59565b6c6e7205ab6969a89">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09212"></a><span class="lineno"> 9212</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09213"></a><span class="lineno"> 9213</span>&#160; <span class="keywordflow">return</span> not operator==(other);</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;</div><div class="line"><a name="l09220"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a63c655881b0b7b7499a333ba77a7e4d1.html#a63c655881b0b7b7499a333ba77a7e4d1"> 9220</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a63c655881b0b7b7499a333ba77a7e4d1.html#a63c655881b0b7b7499a333ba77a7e4d1">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09221"></a><span class="lineno"> 9221</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09222"></a><span class="lineno"> 9222</span>&#160; <span class="comment">// if objects are not the same, the comparison is undefined</span></div><div class="line"><a name="l09223"></a><span class="lineno"> 9223</span>&#160; <span class="keywordflow">if</span> (m_object != other.m_object)</div><div class="line"><a name="l09224"></a><span class="lineno"> 9224</span>&#160; {</div><div class="line"><a name="l09225"></a><span class="lineno"> 9225</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot compare iterators of different containers&quot;</span>));</div><div class="line"><a name="l09226"></a><span class="lineno"> 9226</span>&#160; }</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; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09229"></a><span class="lineno"> 9229</span>&#160;</div><div class="line"><a name="l09230"></a><span class="lineno"> 9230</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</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; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l09233"></a><span class="lineno"> 9233</span>&#160; {</div><div class="line"><a name="l09234"></a><span class="lineno"> 9234</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot compare order of object iterators&quot;</span>));</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;</div><div class="line"><a name="l09237"></a><span class="lineno"> 9237</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09238"></a><span class="lineno"> 9238</span>&#160; {</div><div class="line"><a name="l09239"></a><span class="lineno"> 9239</span>&#160; <span class="keywordflow">return</span> (m_it.array_iterator &lt; other.m_it.array_iterator);</div><div class="line"><a name="l09240"></a><span class="lineno"> 9240</span>&#160; }</div><div class="line"><a name="l09241"></a><span class="lineno"> 9241</span>&#160;</div><div class="line"><a name="l09242"></a><span class="lineno"> 9242</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09243"></a><span class="lineno"> 9243</span>&#160; {</div><div class="line"><a name="l09244"></a><span class="lineno"> 9244</span>&#160; <span class="keywordflow">return</span> (m_it.primitive_iterator &lt; other.m_it.primitive_iterator);</div><div class="line"><a name="l09245"></a><span class="lineno"> 9245</span>&#160; }</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="l09253"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a5ed57d38f57f669f5788cea881772403.html#a5ed57d38f57f669f5788cea881772403"> 9253</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a5ed57d38f57f669f5788cea881772403.html#a5ed57d38f57f669f5788cea881772403">operator&lt;=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09254"></a><span class="lineno"> 9254</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09255"></a><span class="lineno"> 9255</span>&#160; <span class="keywordflow">return</span> not other.operator &lt; (*this);</div><div class="line"><a name="l09256"></a><span class="lineno"> 9256</span>&#160; }</div><div class="line"><a name="l09257"></a><span class="lineno"> 9257</span>&#160;</div><div class="line"><a name="l09262"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_ae6c8e672ff064e0b92073b4dd939ada6.html#ae6c8e672ff064e0b92073b4dd939ada6"> 9262</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae6c8e672ff064e0b92073b4dd939ada6.html#ae6c8e672ff064e0b92073b4dd939ada6">operator&gt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09263"></a><span class="lineno"> 9263</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09264"></a><span class="lineno"> 9264</span>&#160; <span class="keywordflow">return</span> not operator&lt;=(other);</div><div class="line"><a name="l09265"></a><span class="lineno"> 9265</span>&#160; }</div><div class="line"><a name="l09266"></a><span class="lineno"> 9266</span>&#160;</div><div class="line"><a name="l09271"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a53a239bddcbd557f335d275c806535c1.html#a53a239bddcbd557f335d275c806535c1"> 9271</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a53a239bddcbd557f335d275c806535c1.html#a53a239bddcbd557f335d275c806535c1">operator&gt;=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l09272"></a><span class="lineno"> 9272</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09273"></a><span class="lineno"> 9273</span>&#160; <span class="keywordflow">return</span> not operator&lt;(other);</div><div class="line"><a name="l09274"></a><span class="lineno"> 9274</span>&#160; }</div><div class="line"><a name="l09275"></a><span class="lineno"> 9275</span>&#160;</div><div class="line"><a name="l09280"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a170970e99b7a6d124da0fffa4cb76dba.html#a170970e99b7a6d124da0fffa4cb76dba"> 9280</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a170970e99b7a6d124da0fffa4cb76dba.html#a170970e99b7a6d124da0fffa4cb76dba">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> i)</div><div class="line"><a name="l09281"></a><span class="lineno"> 9281</span>&#160; {</div><div class="line"><a name="l09282"></a><span class="lineno"> 9282</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09283"></a><span class="lineno"> 9283</span>&#160;</div><div class="line"><a name="l09284"></a><span class="lineno"> 9284</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09285"></a><span class="lineno"> 9285</span>&#160; {</div><div class="line"><a name="l09286"></a><span class="lineno"> 9286</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l09287"></a><span class="lineno"> 9287</span>&#160; {</div><div class="line"><a name="l09288"></a><span class="lineno"> 9288</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use offsets with object iterators&quot;</span>));</div><div class="line"><a name="l09289"></a><span class="lineno"> 9289</span>&#160; }</div><div class="line"><a name="l09290"></a><span class="lineno"> 9290</span>&#160;</div><div class="line"><a name="l09291"></a><span class="lineno"> 9291</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09292"></a><span class="lineno"> 9292</span>&#160; {</div><div class="line"><a name="l09293"></a><span class="lineno"> 9293</span>&#160; std::advance(m_it.array_iterator, i);</div><div class="line"><a name="l09294"></a><span class="lineno"> 9294</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09295"></a><span class="lineno"> 9295</span>&#160; }</div><div class="line"><a name="l09296"></a><span class="lineno"> 9296</span>&#160;</div><div class="line"><a name="l09297"></a><span class="lineno"> 9297</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09298"></a><span class="lineno"> 9298</span>&#160; {</div><div class="line"><a name="l09299"></a><span class="lineno"> 9299</span>&#160; m_it.primitive_iterator += i;</div><div class="line"><a name="l09300"></a><span class="lineno"> 9300</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09301"></a><span class="lineno"> 9301</span>&#160; }</div><div class="line"><a name="l09302"></a><span class="lineno"> 9302</span>&#160; }</div><div class="line"><a name="l09303"></a><span class="lineno"> 9303</span>&#160;</div><div class="line"><a name="l09304"></a><span class="lineno"> 9304</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l09305"></a><span class="lineno"> 9305</span>&#160; }</div><div class="line"><a name="l09306"></a><span class="lineno"> 9306</span>&#160;</div><div class="line"><a name="l09311"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a9fd84e884e8474c000dc966d331a4854.html#a9fd84e884e8474c000dc966d331a4854"> 9311</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a9fd84e884e8474c000dc966d331a4854.html#a9fd84e884e8474c000dc966d331a4854">operator-=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> i)</div><div class="line"><a name="l09312"></a><span class="lineno"> 9312</span>&#160; {</div><div class="line"><a name="l09313"></a><span class="lineno"> 9313</span>&#160; <span class="keywordflow">return</span> operator+=(-i);</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="l09320"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a3b4cd7db9a93609f8e05f1759d38d633.html#a3b4cd7db9a93609f8e05f1759d38d633"> 9320</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3b4cd7db9a93609f8e05f1759d38d633.html#a3b4cd7db9a93609f8e05f1759d38d633">operator+</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> i)</div><div class="line"><a name="l09321"></a><span class="lineno"> 9321</span>&#160; {</div><div class="line"><a name="l09322"></a><span class="lineno"> 9322</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09323"></a><span class="lineno"> 9323</span>&#160; result += i;</div><div class="line"><a name="l09324"></a><span class="lineno"> 9324</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09325"></a><span class="lineno"> 9325</span>&#160; }</div><div class="line"><a name="l09326"></a><span class="lineno"> 9326</span>&#160;</div><div class="line"><a name="l09331"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a926f2f9189403e72e4f694a06d4d021a.html#a926f2f9189403e72e4f694a06d4d021a"> 9331</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a926f2f9189403e72e4f694a06d4d021a.html#a926f2f9189403e72e4f694a06d4d021a">operator-</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> i)</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="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09334"></a><span class="lineno"> 9334</span>&#160; result -= i;</div><div class="line"><a name="l09335"></a><span class="lineno"> 9335</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l09342"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a3bedce4ada748251e86c7924be54e210.html#a3bedce4ada748251e86c7924be54e210"> 9342</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3bedce4ada748251e86c7924be54e210.html#a3bedce4ada748251e86c7924be54e210">operator-</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl.html">iter_impl</a>&amp; other)<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; assert(m_object != <span class="keyword">nullptr</span>);</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"> 9346</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09347"></a><span class="lineno"> 9347</span>&#160; {</div><div class="line"><a name="l09348"></a><span class="lineno"> 9348</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l09349"></a><span class="lineno"> 9349</span>&#160; {</div><div class="line"><a name="l09350"></a><span class="lineno"> 9350</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use offsets with object iterators&quot;</span>));</div><div class="line"><a name="l09351"></a><span class="lineno"> 9351</span>&#160; }</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">case</span> basic_json::value_t::array:</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; <span class="keywordflow">return</span> m_it.array_iterator - other.m_it.array_iterator;</div><div class="line"><a name="l09356"></a><span class="lineno"> 9356</span>&#160; }</div><div class="line"><a name="l09357"></a><span class="lineno"> 9357</span>&#160;</div><div class="line"><a name="l09358"></a><span class="lineno"> 9358</span>&#160; <span class="keywordflow">default</span>:</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; <span class="keywordflow">return</span> m_it.primitive_iterator - other.m_it.primitive_iterator;</div><div class="line"><a name="l09361"></a><span class="lineno"> 9361</span>&#160; }</div><div class="line"><a name="l09362"></a><span class="lineno"> 9362</span>&#160; }</div><div class="line"><a name="l09363"></a><span class="lineno"> 9363</span>&#160; }</div><div class="line"><a name="l09364"></a><span class="lineno"> 9364</span>&#160;</div><div class="line"><a name="l09369"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_ab58eb87c2362183da21c70be74c2b38c.html#ab58eb87c2362183da21c70be74c2b38c"> 9369</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ab58eb87c2362183da21c70be74c2b38c.html#ab58eb87c2362183da21c70be74c2b38c">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">difference_type</a> n)<span class="keyword"> const</span></div><div class="line"><a name="l09370"></a><span class="lineno"> 9370</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09371"></a><span class="lineno"> 9371</span>&#160; assert(m_object != <span class="keyword">nullptr</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; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l09374"></a><span class="lineno"> 9374</span>&#160; {</div><div class="line"><a name="l09375"></a><span class="lineno"> 9375</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::object:</div><div class="line"><a name="l09376"></a><span class="lineno"> 9376</span>&#160; {</div><div class="line"><a name="l09377"></a><span class="lineno"> 9377</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use operator[] for object iterators&quot;</span>));</div><div class="line"><a name="l09378"></a><span class="lineno"> 9378</span>&#160; }</div><div class="line"><a name="l09379"></a><span class="lineno"> 9379</span>&#160;</div><div class="line"><a name="l09380"></a><span class="lineno"> 9380</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::array:</div><div class="line"><a name="l09381"></a><span class="lineno"> 9381</span>&#160; {</div><div class="line"><a name="l09382"></a><span class="lineno"> 9382</span>&#160; <span class="keywordflow">return</span> *std::next(m_it.array_iterator, n);</div><div class="line"><a name="l09383"></a><span class="lineno"> 9383</span>&#160; }</div><div class="line"><a name="l09384"></a><span class="lineno"> 9384</span>&#160;</div><div class="line"><a name="l09385"></a><span class="lineno"> 9385</span>&#160; <span class="keywordflow">case</span> basic_json::value_t::null:</div><div class="line"><a name="l09386"></a><span class="lineno"> 9386</span>&#160; {</div><div class="line"><a name="l09387"></a><span class="lineno"> 9387</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>));</div><div class="line"><a name="l09388"></a><span class="lineno"> 9388</span>&#160; }</div><div class="line"><a name="l09389"></a><span class="lineno"> 9389</span>&#160;</div><div class="line"><a name="l09390"></a><span class="lineno"> 9390</span>&#160; <span class="keywordflow">default</span>:</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">if</span> (m_it.primitive_iterator.get_value() == -n)</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">return</span> *m_object;</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;</div><div class="line"><a name="l09397"></a><span class="lineno"> 9397</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>));</div><div class="line"><a name="l09398"></a><span class="lineno"> 9398</span>&#160; }</div><div class="line"><a name="l09399"></a><span class="lineno"> 9399</span>&#160; }</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;</div><div class="line"><a name="l09406"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a030a45b63b70e12b18ad4f6c1c4f1239.html#a030a45b63b70e12b18ad4f6c1c4f1239"> 9406</a></span>&#160; <span class="keyword">typename</span> object_t::key_type <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a030a45b63b70e12b18ad4f6c1c4f1239.html#a030a45b63b70e12b18ad4f6c1c4f1239">key</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09407"></a><span class="lineno"> 9407</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09408"></a><span class="lineno"> 9408</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09409"></a><span class="lineno"> 9409</span>&#160;</div><div class="line"><a name="l09410"></a><span class="lineno"> 9410</span>&#160; <span class="keywordflow">if</span> (m_object-&gt;is_object())</div><div class="line"><a name="l09411"></a><span class="lineno"> 9411</span>&#160; {</div><div class="line"><a name="l09412"></a><span class="lineno"> 9412</span>&#160; <span class="keywordflow">return</span> m_it.object_iterator-&gt;first;</div><div class="line"><a name="l09413"></a><span class="lineno"> 9413</span>&#160; }</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; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;cannot use key() for non-object iterators&quot;</span>));</div><div class="line"><a name="l09416"></a><span class="lineno"> 9416</span>&#160; }</div><div class="line"><a name="l09417"></a><span class="lineno"> 9417</span>&#160;</div><div class="line"><a name="l09422"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iter__impl_a92e849ca687355935c02f492be936b68.html#a92e849ca687355935c02f492be936b68"> 9422</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a92e849ca687355935c02f492be936b68.html#a92e849ca687355935c02f492be936b68">value</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09423"></a><span class="lineno"> 9423</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09424"></a><span class="lineno"> 9424</span>&#160; <span class="keywordflow">return</span> operator*();</div><div class="line"><a name="l09425"></a><span class="lineno"> 9425</span>&#160; }</div><div class="line"><a name="l09426"></a><span class="lineno"> 9426</span>&#160;</div><div class="line"><a name="l09427"></a><span class="lineno"> 9427</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09429"></a><span class="lineno"> 9429</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8">pointer</a> m_object = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l09431"></a><span class="lineno"> 9431</span>&#160; internal_iterator m_it = internal_iterator();</div><div class="line"><a name="l09432"></a><span class="lineno"> 9432</span>&#160; };</div><div class="line"><a name="l09433"></a><span class="lineno"> 9433</span>&#160;</div><div class="line"><a name="l09451"></a><span class="lineno"> 9451</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Base&gt;</div><div class="line"><a name="l09452"></a><span class="lineno"> 9452</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="l09453"></a><span class="lineno"> 9453</span>&#160; {</div><div class="line"><a name="l09454"></a><span class="lineno"> 9454</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09456"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261"> 9456</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261">base_iterator</a> = std::reverse_iterator&lt;Base&gt;;</div><div class="line"><a name="l09458"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e.html#ab0021ef2007fd338615360af404dcd4e"> 9458</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e.html#ab0021ef2007fd338615360af404dcd4e">reference</a> = <span class="keyword">typename</span> Base::reference;</div><div class="line"><a name="l09459"></a><span class="lineno"> 9459</span>&#160;</div><div class="line"><a name="l09461"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a1270fe04d4801caf51e7464273305ba8.html#a1270fe04d4801caf51e7464273305ba8"> 9461</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a1270fe04d4801caf51e7464273305ba8.html#a1270fe04d4801caf51e7464273305ba8">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="l09462"></a><span class="lineno"> 9462</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261">base_iterator</a>(it)</div><div class="line"><a name="l09463"></a><span class="lineno"> 9463</span>&#160; {}</div><div class="line"><a name="l09464"></a><span class="lineno"> 9464</span>&#160;</div><div class="line"><a name="l09466"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af04099cd32946ab37cfa6004ad5a7863.html#af04099cd32946ab37cfa6004ad5a7863"> 9466</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af04099cd32946ab37cfa6004ad5a7863.html#af04099cd32946ab37cfa6004ad5a7863">json_reverse_iterator</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261">base_iterator</a>&amp; it) noexcept</div><div class="line"><a name="l09467"></a><span class="lineno"> 9467</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261">base_iterator</a>(it)</div><div class="line"><a name="l09468"></a><span class="lineno"> 9468</span>&#160; {}</div><div class="line"><a name="l09469"></a><span class="lineno"> 9469</span>&#160;</div><div class="line"><a name="l09471"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a060bdfaef94d3ca21dd6e7034980ea9c.html#a060bdfaef94d3ca21dd6e7034980ea9c"> 9471</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_a060bdfaef94d3ca21dd6e7034980ea9c.html#a060bdfaef94d3ca21dd6e7034980ea9c">operator++</a>(<span class="keywordtype">int</span>)</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; <span class="keywordflow">return</span> base_iterator::operator++(1);</div><div class="line"><a name="l09474"></a><span class="lineno"> 9474</span>&#160; }</div><div class="line"><a name="l09475"></a><span class="lineno"> 9475</span>&#160;</div><div class="line"><a name="l09477"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_aa10b55b0c57a849cfe0cba15e7818e97.html#aa10b55b0c57a849cfe0cba15e7818e97"> 9477</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_aa10b55b0c57a849cfe0cba15e7818e97.html#aa10b55b0c57a849cfe0cba15e7818e97">operator++</a>()</div><div class="line"><a name="l09478"></a><span class="lineno"> 9478</span>&#160; {</div><div class="line"><a name="l09479"></a><span class="lineno"> 9479</span>&#160; base_iterator::operator++();</div><div class="line"><a name="l09480"></a><span class="lineno"> 9480</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div><div class="line"><a name="l09484"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_abc37aca3fee5d832f254c94e1cd2f216.html#abc37aca3fee5d832f254c94e1cd2f216"> 9484</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_abc37aca3fee5d832f254c94e1cd2f216.html#abc37aca3fee5d832f254c94e1cd2f216">operator--</a>(<span class="keywordtype">int</span>)</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">return</span> base_iterator::operator--(1);</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;</div><div class="line"><a name="l09490"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ae446e535faf6bf4a20d75ffc8525d20d.html#ae446e535faf6bf4a20d75ffc8525d20d"> 9490</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_ae446e535faf6bf4a20d75ffc8525d20d.html#ae446e535faf6bf4a20d75ffc8525d20d">operator--</a>()</div><div class="line"><a name="l09491"></a><span class="lineno"> 9491</span>&#160; {</div><div class="line"><a name="l09492"></a><span class="lineno"> 9492</span>&#160; base_iterator::operator--();</div><div class="line"><a name="l09493"></a><span class="lineno"> 9493</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div><div class="line"><a name="l09497"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3b884d9fc5de7013be144b304df9c068.html#a3b884d9fc5de7013be144b304df9c068"> 9497</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_a3b884d9fc5de7013be144b304df9c068.html#a3b884d9fc5de7013be144b304df9c068">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> i)</div><div class="line"><a name="l09498"></a><span class="lineno"> 9498</span>&#160; {</div><div class="line"><a name="l09499"></a><span class="lineno"> 9499</span>&#160; base_iterator::operator+=(i);</div><div class="line"><a name="l09500"></a><span class="lineno"> 9500</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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="l09504"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a87a33e1b5bf42674ebe9c43ac41f8660.html#a87a33e1b5bf42674ebe9c43ac41f8660"> 9504</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_a87a33e1b5bf42674ebe9c43ac41f8660.html#a87a33e1b5bf42674ebe9c43ac41f8660">operator+</a>(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> i)<span class="keyword"> const</span></div><div class="line"><a name="l09505"></a><span class="lineno"> 9505</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09506"></a><span class="lineno"> 9506</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09507"></a><span class="lineno"> 9507</span>&#160; result += i;</div><div class="line"><a name="l09508"></a><span class="lineno"> 9508</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l09512"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99b0f5e39f0edc9311e28d06e4f28db8.html#a99b0f5e39f0edc9311e28d06e4f28db8"> 9512</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_a99b0f5e39f0edc9311e28d06e4f28db8.html#a99b0f5e39f0edc9311e28d06e4f28db8">operator-</a>(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> i)<span class="keyword"> const</span></div><div class="line"><a name="l09513"></a><span class="lineno"> 9513</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09514"></a><span class="lineno"> 9514</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09515"></a><span class="lineno"> 9515</span>&#160; result -= i;</div><div class="line"><a name="l09516"></a><span class="lineno"> 9516</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l09520"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a344164ae696f1c5e672d1e7d3ac20fd9.html#a344164ae696f1c5e672d1e7d3ac20fd9"> 9520</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a344164ae696f1c5e672d1e7d3ac20fd9.html#a344164ae696f1c5e672d1e7d3ac20fd9">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="l09521"></a><span class="lineno"> 9521</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09522"></a><span class="lineno"> 9522</span>&#160; <span class="keywordflow">return</span> this-&gt;base() - other.base();</div><div class="line"><a name="l09523"></a><span class="lineno"> 9523</span>&#160; }</div><div class="line"><a name="l09524"></a><span class="lineno"> 9524</span>&#160;</div><div class="line"><a name="l09526"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af4879af64a0f24bd308b13b859808f84.html#af4879af64a0f24bd308b13b859808f84"> 9526</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e.html#ab0021ef2007fd338615360af404dcd4e">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af4879af64a0f24bd308b13b859808f84.html#af4879af64a0f24bd308b13b859808f84">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a> n)<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">return</span> *(this-&gt;operator+(n));</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;</div><div class="line"><a name="l09532"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a26c551e1cee90ee52be00b5165804598.html#a26c551e1cee90ee52be00b5165804598"> 9532</a></span>&#160; <span class="keyword">typename</span> object_t::key_type <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a26c551e1cee90ee52be00b5165804598.html#a26c551e1cee90ee52be00b5165804598">key</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09533"></a><span class="lineno"> 9533</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09534"></a><span class="lineno"> 9534</span>&#160; <span class="keyword">auto</span> it = --this-&gt;base();</div><div class="line"><a name="l09535"></a><span class="lineno"> 9535</span>&#160; <span class="keywordflow">return</span> it.key();</div><div class="line"><a name="l09536"></a><span class="lineno"> 9536</span>&#160; }</div><div class="line"><a name="l09537"></a><span class="lineno"> 9537</span>&#160;</div><div class="line"><a name="l09539"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af51506d91ecf911c97521e10a047c841.html#af51506d91ecf911c97521e10a047c841"> 9539</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e.html#ab0021ef2007fd338615360af404dcd4e">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af51506d91ecf911c97521e10a047c841.html#af51506d91ecf911c97521e10a047c841">value</a>()<span class="keyword"> const</span></div><div class="line"><a name="l09540"></a><span class="lineno"> 9540</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09541"></a><span class="lineno"> 9541</span>&#160; <span class="keyword">auto</span> it = --this-&gt;base();</div><div class="line"><a name="l09542"></a><span class="lineno"> 9542</span>&#160; <span class="keywordflow">return</span> it.operator * ();</div><div class="line"><a name="l09543"></a><span class="lineno"> 9543</span>&#160; }</div><div class="line"><a name="l09544"></a><span class="lineno"> 9544</span>&#160; };</div><div class="line"><a name="l09545"></a><span class="lineno"> 9545</span>&#160;</div><div class="line"><a name="l09546"></a><span class="lineno"> 9546</span>&#160;</div><div class="line"><a name="l09547"></a><span class="lineno"> 9547</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09549"></a><span class="lineno"> 9549</span>&#160; <span class="comment">// lexer and parser //</span></div><div class="line"><a name="l09551"></a><span class="lineno"> 9551</span>&#160;<span class="comment"></span></div><div class="line"><a name="l09559"></a><span class="lineno"> 9559</span>&#160; <span class="keyword">class </span>lexer</div><div class="line"><a name="l09560"></a><span class="lineno"> 9560</span>&#160; {</div><div class="line"><a name="l09561"></a><span class="lineno"> 9561</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09563"></a><span class="lineno"> 9563</span>&#160; <span class="keyword">enum class</span> token_type</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; uninitialized, </div><div class="line"><a name="l09566"></a><span class="lineno"> 9566</span>&#160; literal_true, </div><div class="line"><a name="l09567"></a><span class="lineno"> 9567</span>&#160; literal_false, </div><div class="line"><a name="l09568"></a><span class="lineno"> 9568</span>&#160; literal_null, </div><div class="line"><a name="l09569"></a><span class="lineno"> 9569</span>&#160; value_string, </div><div class="line"><a name="l09570"></a><span class="lineno"> 9570</span>&#160; value_unsigned, </div><div class="line"><a name="l09571"></a><span class="lineno"> 9571</span>&#160; value_integer, </div><div class="line"><a name="l09572"></a><span class="lineno"> 9572</span>&#160; value_float, </div><div class="line"><a name="l09573"></a><span class="lineno"> 9573</span>&#160; begin_array, </div><div class="line"><a name="l09574"></a><span class="lineno"> 9574</span>&#160; begin_object, </div><div class="line"><a name="l09575"></a><span class="lineno"> 9575</span>&#160; end_array, </div><div class="line"><a name="l09576"></a><span class="lineno"> 9576</span>&#160; end_object, </div><div class="line"><a name="l09577"></a><span class="lineno"> 9577</span>&#160; name_separator, </div><div class="line"><a name="l09578"></a><span class="lineno"> 9578</span>&#160; value_separator, </div><div class="line"><a name="l09579"></a><span class="lineno"> 9579</span>&#160; parse_error, </div><div class="line"><a name="l09580"></a><span class="lineno"> 9580</span>&#160; end_of_input </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;</div><div class="line"><a name="l09584"></a><span class="lineno"> 9584</span>&#160; <span class="keyword">using</span> lexer_char_t = <span class="keywordtype">unsigned</span> char;</div><div class="line"><a name="l09585"></a><span class="lineno"> 9585</span>&#160;</div><div class="line"><a name="l09587"></a><span class="lineno"> 9587</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="l09588"></a><span class="lineno"> 9588</span>&#160; : m_content(buff)</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; assert(m_content != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09591"></a><span class="lineno"> 9591</span>&#160; m_start = m_cursor = m_content;</div><div class="line"><a name="l09592"></a><span class="lineno"> 9592</span>&#160; m_limit = m_content + len;</div><div class="line"><a name="l09593"></a><span class="lineno"> 9593</span>&#160; }</div><div class="line"><a name="l09594"></a><span class="lineno"> 9594</span>&#160;</div><div class="line"><a name="l09596"></a><span class="lineno"> 9596</span>&#160; <span class="keyword">explicit</span> lexer(std::istream&amp; s)</div><div class="line"><a name="l09597"></a><span class="lineno"> 9597</span>&#160; : m_stream(&amp;s), m_line_buffer()</div><div class="line"><a name="l09598"></a><span class="lineno"> 9598</span>&#160; {</div><div class="line"><a name="l09599"></a><span class="lineno"> 9599</span>&#160; <span class="comment">// immediately abort if stream is erroneous</span></div><div class="line"><a name="l09600"></a><span class="lineno"> 9600</span>&#160; <span class="keywordflow">if</span> (s.fail())</div><div class="line"><a name="l09601"></a><span class="lineno"> 9601</span>&#160; {</div><div class="line"><a name="l09602"></a><span class="lineno"> 9602</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;stream error&quot;</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;</div><div class="line"><a name="l09605"></a><span class="lineno"> 9605</span>&#160; <span class="comment">// fill buffer</span></div><div class="line"><a name="l09606"></a><span class="lineno"> 9606</span>&#160; fill_line_buffer();</div><div class="line"><a name="l09607"></a><span class="lineno"> 9607</span>&#160;</div><div class="line"><a name="l09608"></a><span class="lineno"> 9608</span>&#160; <span class="comment">// skip UTF-8 byte-order mark</span></div><div class="line"><a name="l09609"></a><span class="lineno"> 9609</span>&#160; <span class="keywordflow">if</span> (m_line_buffer.size() &gt;= 3 and m_line_buffer.substr(0, 3) == <span class="stringliteral">&quot;\xEF\xBB\xBF&quot;</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; m_line_buffer[0] = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l09612"></a><span class="lineno"> 9612</span>&#160; m_line_buffer[1] = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l09613"></a><span class="lineno"> 9613</span>&#160; m_line_buffer[2] = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l09614"></a><span class="lineno"> 9614</span>&#160; }</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; <span class="comment">// switch off unwanted functions (due to pointer members)</span></div><div class="line"><a name="l09618"></a><span class="lineno"> 9618</span>&#160; lexer() = <span class="keyword">delete</span>;</div><div class="line"><a name="l09619"></a><span class="lineno"> 9619</span>&#160; lexer(<span class="keyword">const</span> lexer&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l09620"></a><span class="lineno"> 9620</span>&#160; lexer operator=(<span class="keyword">const</span> lexer&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l09621"></a><span class="lineno"> 9621</span>&#160;</div><div class="line"><a name="l09645"></a><span class="lineno"> 9645</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> to_unicode(<span class="keyword">const</span> std::size_t codepoint1,</div><div class="line"><a name="l09646"></a><span class="lineno"> 9646</span>&#160; <span class="keyword">const</span> std::size_t codepoint2 = 0)</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="comment">// calculate the code point from the given code points</span></div><div class="line"><a name="l09649"></a><span class="lineno"> 9649</span>&#160; std::size_t codepoint = codepoint1;</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">// check if codepoint1 is a high surrogate</span></div><div class="line"><a name="l09652"></a><span class="lineno"> 9652</span>&#160; <span class="keywordflow">if</span> (codepoint1 &gt;= 0xD800 and codepoint1 &lt;= 0xDBFF)</div><div class="line"><a name="l09653"></a><span class="lineno"> 9653</span>&#160; {</div><div class="line"><a name="l09654"></a><span class="lineno"> 9654</span>&#160; <span class="comment">// check if codepoint2 is a low surrogate</span></div><div class="line"><a name="l09655"></a><span class="lineno"> 9655</span>&#160; <span class="keywordflow">if</span> (codepoint2 &gt;= 0xDC00 and codepoint2 &lt;= 0xDFFF)</div><div class="line"><a name="l09656"></a><span class="lineno"> 9656</span>&#160; {</div><div class="line"><a name="l09657"></a><span class="lineno"> 9657</span>&#160; codepoint =</div><div class="line"><a name="l09658"></a><span class="lineno"> 9658</span>&#160; <span class="comment">// high surrogate occupies the most significant 22 bits</span></div><div class="line"><a name="l09659"></a><span class="lineno"> 9659</span>&#160; (codepoint1 &lt;&lt; 10)</div><div class="line"><a name="l09660"></a><span class="lineno"> 9660</span>&#160; <span class="comment">// low surrogate occupies the least significant 15 bits</span></div><div class="line"><a name="l09661"></a><span class="lineno"> 9661</span>&#160; + codepoint2</div><div class="line"><a name="l09662"></a><span class="lineno"> 9662</span>&#160; <span class="comment">// there is still the 0xD800, 0xDC00 and 0x10000 noise</span></div><div class="line"><a name="l09663"></a><span class="lineno"> 9663</span>&#160; <span class="comment">// in the result so we have to subtract with:</span></div><div class="line"><a name="l09664"></a><span class="lineno"> 9664</span>&#160; <span class="comment">// (0xD800 &lt;&lt; 10) + DC00 - 0x10000 = 0x35FDC00</span></div><div class="line"><a name="l09665"></a><span class="lineno"> 9665</span>&#160; - 0x35FDC00;</div><div class="line"><a name="l09666"></a><span class="lineno"> 9666</span>&#160; }</div><div class="line"><a name="l09667"></a><span class="lineno"> 9667</span>&#160; <span class="keywordflow">else</span></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; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;missing or wrong low surrogate&quot;</span>));</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; }</div><div class="line"><a name="l09672"></a><span class="lineno"> 9672</span>&#160;</div><div class="line"><a name="l09673"></a><span class="lineno"> 9673</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> result;</div><div class="line"><a name="l09674"></a><span class="lineno"> 9674</span>&#160;</div><div class="line"><a name="l09675"></a><span class="lineno"> 9675</span>&#160; <span class="keywordflow">if</span> (codepoint &lt; 0x80)</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">// 1-byte characters: 0xxxxxxx (ASCII)</span></div><div class="line"><a name="l09678"></a><span class="lineno"> 9678</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(codepoint));</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">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0x7ff)</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; <span class="comment">// 2-byte characters: 110xxxxx 10xxxxxx</span></div><div class="line"><a name="l09683"></a><span class="lineno"> 9683</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="l09684"></a><span class="lineno"> 9684</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l09685"></a><span class="lineno"> 9685</span>&#160; }</div><div class="line"><a name="l09686"></a><span class="lineno"> 9686</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0xffff)</div><div class="line"><a name="l09687"></a><span class="lineno"> 9687</span>&#160; {</div><div class="line"><a name="l09688"></a><span class="lineno"> 9688</span>&#160; <span class="comment">// 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l09689"></a><span class="lineno"> 9689</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="l09690"></a><span class="lineno"> 9690</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="l09691"></a><span class="lineno"> 9691</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l09692"></a><span class="lineno"> 9692</span>&#160; }</div><div class="line"><a name="l09693"></a><span class="lineno"> 9693</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0x10ffff)</div><div class="line"><a name="l09694"></a><span class="lineno"> 9694</span>&#160; {</div><div class="line"><a name="l09695"></a><span class="lineno"> 9695</span>&#160; <span class="comment">// 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l09696"></a><span class="lineno"> 9696</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="l09697"></a><span class="lineno"> 9697</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="l09698"></a><span class="lineno"> 9698</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="l09699"></a><span class="lineno"> 9699</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l09700"></a><span class="lineno"> 9700</span>&#160; }</div><div class="line"><a name="l09701"></a><span class="lineno"> 9701</span>&#160; <span class="keywordflow">else</span></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; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;code points above 0x10FFFF are invalid&quot;</span>));</div><div class="line"><a name="l09704"></a><span class="lineno"> 9704</span>&#160; }</div><div class="line"><a name="l09705"></a><span class="lineno"> 9705</span>&#160;</div><div class="line"><a name="l09706"></a><span class="lineno"> 9706</span>&#160; <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l09710"></a><span class="lineno"> 9710</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="l09711"></a><span class="lineno"> 9711</span>&#160; {</div><div class="line"><a name="l09712"></a><span class="lineno"> 9712</span>&#160; <span class="keywordflow">switch</span> (t)</div><div class="line"><a name="l09713"></a><span class="lineno"> 9713</span>&#160; {</div><div class="line"><a name="l09714"></a><span class="lineno"> 9714</span>&#160; <span class="keywordflow">case</span> token_type::uninitialized:</div><div class="line"><a name="l09715"></a><span class="lineno"> 9715</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;uninitialized&gt;&quot;</span>;</div><div class="line"><a name="l09716"></a><span class="lineno"> 9716</span>&#160; <span class="keywordflow">case</span> token_type::literal_true:</div><div class="line"><a name="l09717"></a><span class="lineno"> 9717</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;true literal&quot;</span>;</div><div class="line"><a name="l09718"></a><span class="lineno"> 9718</span>&#160; <span class="keywordflow">case</span> token_type::literal_false:</div><div class="line"><a name="l09719"></a><span class="lineno"> 9719</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;false literal&quot;</span>;</div><div class="line"><a name="l09720"></a><span class="lineno"> 9720</span>&#160; <span class="keywordflow">case</span> token_type::literal_null:</div><div class="line"><a name="l09721"></a><span class="lineno"> 9721</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;null literal&quot;</span>;</div><div class="line"><a name="l09722"></a><span class="lineno"> 9722</span>&#160; <span class="keywordflow">case</span> token_type::value_string:</div><div class="line"><a name="l09723"></a><span class="lineno"> 9723</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;string literal&quot;</span>;</div><div class="line"><a name="l09724"></a><span class="lineno"> 9724</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_unsigned:</div><div class="line"><a name="l09725"></a><span class="lineno"> 9725</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_integer:</div><div class="line"><a name="l09726"></a><span class="lineno"> 9726</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_float:</div><div class="line"><a name="l09727"></a><span class="lineno"> 9727</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;number literal&quot;</span>;</div><div class="line"><a name="l09728"></a><span class="lineno"> 9728</span>&#160; <span class="keywordflow">case</span> token_type::begin_array:</div><div class="line"><a name="l09729"></a><span class="lineno"> 9729</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;[&#39;&quot;</span>;</div><div class="line"><a name="l09730"></a><span class="lineno"> 9730</span>&#160; <span class="keywordflow">case</span> token_type::begin_object:</div><div class="line"><a name="l09731"></a><span class="lineno"> 9731</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;{&#39;&quot;</span>;</div><div class="line"><a name="l09732"></a><span class="lineno"> 9732</span>&#160; <span class="keywordflow">case</span> token_type::end_array:</div><div class="line"><a name="l09733"></a><span class="lineno"> 9733</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;]&#39;&quot;</span>;</div><div class="line"><a name="l09734"></a><span class="lineno"> 9734</span>&#160; <span class="keywordflow">case</span> token_type::end_object:</div><div class="line"><a name="l09735"></a><span class="lineno"> 9735</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;}&#39;&quot;</span>;</div><div class="line"><a name="l09736"></a><span class="lineno"> 9736</span>&#160; <span class="keywordflow">case</span> token_type::name_separator:</div><div class="line"><a name="l09737"></a><span class="lineno"> 9737</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;:&#39;&quot;</span>;</div><div class="line"><a name="l09738"></a><span class="lineno"> 9738</span>&#160; <span class="keywordflow">case</span> token_type::value_separator:</div><div class="line"><a name="l09739"></a><span class="lineno"> 9739</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;,&#39;&quot;</span>;</div><div class="line"><a name="l09740"></a><span class="lineno"> 9740</span>&#160; <span class="keywordflow">case</span> token_type::parse_error:</div><div class="line"><a name="l09741"></a><span class="lineno"> 9741</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;parse error&gt;&quot;</span>;</div><div class="line"><a name="l09742"></a><span class="lineno"> 9742</span>&#160; <span class="keywordflow">case</span> token_type::end_of_input:</div><div class="line"><a name="l09743"></a><span class="lineno"> 9743</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;end of input&quot;</span>;</div><div class="line"><a name="l09744"></a><span class="lineno"> 9744</span>&#160; <span class="keywordflow">default</span>:</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; <span class="comment">// catch non-enum values</span></div><div class="line"><a name="l09747"></a><span class="lineno"> 9747</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="l09748"></a><span class="lineno"> 9748</span>&#160; }</div><div class="line"><a name="l09749"></a><span class="lineno"> 9749</span>&#160; }</div><div class="line"><a name="l09750"></a><span class="lineno"> 9750</span>&#160; }</div><div class="line"><a name="l09751"></a><span class="lineno"> 9751</span>&#160;</div><div class="line"><a name="l09773"></a><span class="lineno"> 9773</span>&#160; token_type scan()</div><div class="line"><a name="l09774"></a><span class="lineno"> 9774</span>&#160; {</div><div class="line"><a name="l09775"></a><span class="lineno"> 9775</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l09776"></a><span class="lineno"> 9776</span>&#160; {</div><div class="line"><a name="l09777"></a><span class="lineno"> 9777</span>&#160; <span class="comment">// pointer for backtracking information</span></div><div class="line"><a name="l09778"></a><span class="lineno"> 9778</span>&#160; m_marker = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l09779"></a><span class="lineno"> 9779</span>&#160;</div><div class="line"><a name="l09780"></a><span class="lineno"> 9780</span>&#160; <span class="comment">// remember the begin of the token</span></div><div class="line"><a name="l09781"></a><span class="lineno"> 9781</span>&#160; m_start = m_cursor;</div><div class="line"><a name="l09782"></a><span class="lineno"> 9782</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l09783"></a><span class="lineno"> 9783</span>&#160;</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; {</div><div class="line"><a name="l09786"></a><span class="lineno"> 9786</span>&#160; lexer_char_t yych;</div><div class="line"><a name="l09787"></a><span class="lineno"> 9787</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yyaccept = 0;</div><div class="line"><a name="l09788"></a><span class="lineno"> 9788</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="l09789"></a><span class="lineno"> 9789</span>&#160; {</div><div class="line"><a name="l09790"></a><span class="lineno"> 9790</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09791"></a><span class="lineno"> 9791</span>&#160; 0, 32, 32, 0, 0, 32, 0, 0,</div><div class="line"><a name="l09792"></a><span class="lineno"> 9792</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09793"></a><span class="lineno"> 9793</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09794"></a><span class="lineno"> 9794</span>&#160; 160, 128, 0, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09795"></a><span class="lineno"> 9795</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09796"></a><span class="lineno"> 9796</span>&#160; 192, 192, 192, 192, 192, 192, 192, 192,</div><div class="line"><a name="l09797"></a><span class="lineno"> 9797</span>&#160; 192, 192, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09798"></a><span class="lineno"> 9798</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09799"></a><span class="lineno"> 9799</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09800"></a><span class="lineno"> 9800</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09801"></a><span class="lineno"> 9801</span>&#160; 128, 128, 128, 128, 0, 128, 128, 128,</div><div class="line"><a name="l09802"></a><span class="lineno"> 9802</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09803"></a><span class="lineno"> 9803</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09804"></a><span class="lineno"> 9804</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09805"></a><span class="lineno"> 9805</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l09806"></a><span class="lineno"> 9806</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09807"></a><span class="lineno"> 9807</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09808"></a><span class="lineno"> 9808</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09809"></a><span class="lineno"> 9809</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09810"></a><span class="lineno"> 9810</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09811"></a><span class="lineno"> 9811</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09812"></a><span class="lineno"> 9812</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09813"></a><span class="lineno"> 9813</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09814"></a><span class="lineno"> 9814</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09815"></a><span class="lineno"> 9815</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09816"></a><span class="lineno"> 9816</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09817"></a><span class="lineno"> 9817</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09818"></a><span class="lineno"> 9818</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09819"></a><span class="lineno"> 9819</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09820"></a><span class="lineno"> 9820</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09821"></a><span class="lineno"> 9821</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l09822"></a><span class="lineno"> 9822</span>&#160; };</div><div class="line"><a name="l09823"></a><span class="lineno"> 9823</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 5)</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; fill_line_buffer(5); <span class="comment">// LCOV_EXCL_LINE</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; yych = *m_cursor;</div><div class="line"><a name="l09828"></a><span class="lineno"> 9828</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 32)</div><div class="line"><a name="l09829"></a><span class="lineno"> 9829</span>&#160; {</div><div class="line"><a name="l09830"></a><span class="lineno"> 9830</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_6;</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; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;[&#39;</span>)</div><div class="line"><a name="l09833"></a><span class="lineno"> 9833</span>&#160; {</div><div class="line"><a name="l09834"></a><span class="lineno"> 9834</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;-&#39;</span>)</div><div class="line"><a name="l09835"></a><span class="lineno"> 9835</span>&#160; {</div><div class="line"><a name="l09836"></a><span class="lineno"> 9836</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;&quot;&#39;</span>)</div><div class="line"><a name="l09837"></a><span class="lineno"> 9837</span>&#160; {</div><div class="line"><a name="l09838"></a><span class="lineno"> 9838</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x00)</div><div class="line"><a name="l09839"></a><span class="lineno"> 9839</span>&#160; {</div><div class="line"><a name="l09840"></a><span class="lineno"> 9840</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_2;</div><div class="line"><a name="l09841"></a><span class="lineno"> 9841</span>&#160; }</div><div class="line"><a name="l09842"></a><span class="lineno"> 9842</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;!&#39;</span>)</div><div class="line"><a name="l09843"></a><span class="lineno"> 9843</span>&#160; {</div><div class="line"><a name="l09844"></a><span class="lineno"> 9844</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</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; <span class="keywordflow">goto</span> basic_json_parser_9;</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="keywordflow">else</span></div><div class="line"><a name="l09849"></a><span class="lineno"> 9849</span>&#160; {</div><div class="line"><a name="l09850"></a><span class="lineno"> 9850</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;+&#39;</span>)</div><div class="line"><a name="l09851"></a><span class="lineno"> 9851</span>&#160; {</div><div class="line"><a name="l09852"></a><span class="lineno"> 9852</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09853"></a><span class="lineno"> 9853</span>&#160; }</div><div class="line"><a name="l09854"></a><span class="lineno"> 9854</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;,&#39;</span>)</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="keywordflow">goto</span> basic_json_parser_10;</div><div class="line"><a name="l09857"></a><span class="lineno"> 9857</span>&#160; }</div><div class="line"><a name="l09858"></a><span class="lineno"> 9858</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_12;</div><div class="line"><a name="l09859"></a><span class="lineno"> 9859</span>&#160; }</div><div class="line"><a name="l09860"></a><span class="lineno"> 9860</span>&#160; }</div><div class="line"><a name="l09861"></a><span class="lineno"> 9861</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l09864"></a><span class="lineno"> 9864</span>&#160; {</div><div class="line"><a name="l09865"></a><span class="lineno"> 9865</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</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="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09868"></a><span class="lineno"> 9868</span>&#160; }</div><div class="line"><a name="l09869"></a><span class="lineno"> 9869</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;0&#39;</span>)</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; <span class="keywordflow">goto</span> basic_json_parser_13;</div><div class="line"><a name="l09872"></a><span class="lineno"> 9872</span>&#160; }</div><div class="line"><a name="l09873"></a><span class="lineno"> 9873</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_15;</div><div class="line"><a name="l09874"></a><span class="lineno"> 9874</span>&#160; }</div><div class="line"><a name="l09875"></a><span class="lineno"> 9875</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09876"></a><span class="lineno"> 9876</span>&#160; {</div><div class="line"><a name="l09877"></a><span class="lineno"> 9877</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;:&#39;</span>)</div><div class="line"><a name="l09878"></a><span class="lineno"> 9878</span>&#160; {</div><div class="line"><a name="l09879"></a><span class="lineno"> 9879</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_17;</div><div class="line"><a name="l09880"></a><span class="lineno"> 9880</span>&#160; }</div><div class="line"><a name="l09881"></a><span class="lineno"> 9881</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;Z&#39;</span>)</div><div class="line"><a name="l09882"></a><span class="lineno"> 9882</span>&#160; {</div><div class="line"><a name="l09883"></a><span class="lineno"> 9883</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09884"></a><span class="lineno"> 9884</span>&#160; }</div><div class="line"><a name="l09885"></a><span class="lineno"> 9885</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_19;</div><div class="line"><a name="l09886"></a><span class="lineno"> 9886</span>&#160; }</div><div class="line"><a name="l09887"></a><span class="lineno"> 9887</span>&#160; }</div><div class="line"><a name="l09888"></a><span class="lineno"> 9888</span>&#160; }</div><div class="line"><a name="l09889"></a><span class="lineno"> 9889</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09890"></a><span class="lineno"> 9890</span>&#160; {</div><div class="line"><a name="l09891"></a><span class="lineno"> 9891</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;n&#39;</span>)</div><div class="line"><a name="l09892"></a><span class="lineno"> 9892</span>&#160; {</div><div class="line"><a name="l09893"></a><span class="lineno"> 9893</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l09894"></a><span class="lineno"> 9894</span>&#160; {</div><div class="line"><a name="l09895"></a><span class="lineno"> 9895</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;]&#39;</span>)</div><div class="line"><a name="l09896"></a><span class="lineno"> 9896</span>&#160; {</div><div class="line"><a name="l09897"></a><span class="lineno"> 9897</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_21;</div><div class="line"><a name="l09898"></a><span class="lineno"> 9898</span>&#160; }</div><div class="line"><a name="l09899"></a><span class="lineno"> 9899</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09900"></a><span class="lineno"> 9900</span>&#160; }</div><div class="line"><a name="l09901"></a><span class="lineno"> 9901</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09902"></a><span class="lineno"> 9902</span>&#160; {</div><div class="line"><a name="l09903"></a><span class="lineno"> 9903</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l09904"></a><span class="lineno"> 9904</span>&#160; {</div><div class="line"><a name="l09905"></a><span class="lineno"> 9905</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_23;</div><div class="line"><a name="l09906"></a><span class="lineno"> 9906</span>&#160; }</div><div class="line"><a name="l09907"></a><span class="lineno"> 9907</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;m&#39;</span>)</div><div class="line"><a name="l09908"></a><span class="lineno"> 9908</span>&#160; {</div><div class="line"><a name="l09909"></a><span class="lineno"> 9909</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09910"></a><span class="lineno"> 9910</span>&#160; }</div><div class="line"><a name="l09911"></a><span class="lineno"> 9911</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_24;</div><div class="line"><a name="l09912"></a><span class="lineno"> 9912</span>&#160; }</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">else</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"> 9916</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;z&#39;</span>)</div><div class="line"><a name="l09917"></a><span class="lineno"> 9917</span>&#160; {</div><div class="line"><a name="l09918"></a><span class="lineno"> 9918</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;t&#39;</span>)</div><div class="line"><a name="l09919"></a><span class="lineno"> 9919</span>&#160; {</div><div class="line"><a name="l09920"></a><span class="lineno"> 9920</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_25;</div><div class="line"><a name="l09921"></a><span class="lineno"> 9921</span>&#160; }</div><div class="line"><a name="l09922"></a><span class="lineno"> 9922</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09923"></a><span class="lineno"> 9923</span>&#160; }</div><div class="line"><a name="l09924"></a><span class="lineno"> 9924</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09925"></a><span class="lineno"> 9925</span>&#160; {</div><div class="line"><a name="l09926"></a><span class="lineno"> 9926</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;{&#39;</span>)</div><div class="line"><a name="l09927"></a><span class="lineno"> 9927</span>&#160; {</div><div class="line"><a name="l09928"></a><span class="lineno"> 9928</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_26;</div><div class="line"><a name="l09929"></a><span class="lineno"> 9929</span>&#160; }</div><div class="line"><a name="l09930"></a><span class="lineno"> 9930</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;}&#39;</span>)</div><div class="line"><a name="l09931"></a><span class="lineno"> 9931</span>&#160; {</div><div class="line"><a name="l09932"></a><span class="lineno"> 9932</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_28;</div><div class="line"><a name="l09933"></a><span class="lineno"> 9933</span>&#160; }</div><div class="line"><a name="l09934"></a><span class="lineno"> 9934</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l09935"></a><span class="lineno"> 9935</span>&#160; }</div><div class="line"><a name="l09936"></a><span class="lineno"> 9936</span>&#160; }</div><div class="line"><a name="l09937"></a><span class="lineno"> 9937</span>&#160; }</div><div class="line"><a name="l09938"></a><span class="lineno"> 9938</span>&#160;basic_json_parser_2:</div><div class="line"><a name="l09939"></a><span class="lineno"> 9939</span>&#160; ++m_cursor;</div><div class="line"><a name="l09940"></a><span class="lineno"> 9940</span>&#160; {</div><div class="line"><a name="l09941"></a><span class="lineno"> 9941</span>&#160; last_token_type = token_type::end_of_input;</div><div class="line"><a name="l09942"></a><span class="lineno"> 9942</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09943"></a><span class="lineno"> 9943</span>&#160; }</div><div class="line"><a name="l09944"></a><span class="lineno"> 9944</span>&#160;basic_json_parser_4:</div><div class="line"><a name="l09945"></a><span class="lineno"> 9945</span>&#160; ++m_cursor;</div><div class="line"><a name="l09946"></a><span class="lineno"> 9946</span>&#160;basic_json_parser_5:</div><div class="line"><a name="l09947"></a><span class="lineno"> 9947</span>&#160; {</div><div class="line"><a name="l09948"></a><span class="lineno"> 9948</span>&#160; last_token_type = token_type::parse_error;</div><div class="line"><a name="l09949"></a><span class="lineno"> 9949</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09950"></a><span class="lineno"> 9950</span>&#160; }</div><div class="line"><a name="l09951"></a><span class="lineno"> 9951</span>&#160;basic_json_parser_6:</div><div class="line"><a name="l09952"></a><span class="lineno"> 9952</span>&#160; ++m_cursor;</div><div class="line"><a name="l09953"></a><span class="lineno"> 9953</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l09954"></a><span class="lineno"> 9954</span>&#160; {</div><div class="line"><a name="l09955"></a><span class="lineno"> 9955</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l09956"></a><span class="lineno"> 9956</span>&#160; }</div><div class="line"><a name="l09957"></a><span class="lineno"> 9957</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l09958"></a><span class="lineno"> 9958</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 32)</div><div class="line"><a name="l09959"></a><span class="lineno"> 9959</span>&#160; {</div><div class="line"><a name="l09960"></a><span class="lineno"> 9960</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_6;</div><div class="line"><a name="l09961"></a><span class="lineno"> 9961</span>&#160; }</div><div class="line"><a name="l09962"></a><span class="lineno"> 9962</span>&#160; {</div><div class="line"><a name="l09963"></a><span class="lineno"> 9963</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l09964"></a><span class="lineno"> 9964</span>&#160; }</div><div class="line"><a name="l09965"></a><span class="lineno"> 9965</span>&#160;basic_json_parser_9:</div><div class="line"><a name="l09966"></a><span class="lineno"> 9966</span>&#160; yyaccept = 0;</div><div class="line"><a name="l09967"></a><span class="lineno"> 9967</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l09968"></a><span class="lineno"> 9968</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x1F)</div><div class="line"><a name="l09969"></a><span class="lineno"> 9969</span>&#160; {</div><div class="line"><a name="l09970"></a><span class="lineno"> 9970</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l09971"></a><span class="lineno"> 9971</span>&#160; }</div><div class="line"><a name="l09972"></a><span class="lineno"> 9972</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</div><div class="line"><a name="l09973"></a><span class="lineno"> 9973</span>&#160; {</div><div class="line"><a name="l09974"></a><span class="lineno"> 9974</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l09975"></a><span class="lineno"> 9975</span>&#160; }</div><div class="line"><a name="l09976"></a><span class="lineno"> 9976</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xC1)</div><div class="line"><a name="l09977"></a><span class="lineno"> 9977</span>&#160; {</div><div class="line"><a name="l09978"></a><span class="lineno"> 9978</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l09979"></a><span class="lineno"> 9979</span>&#160; }</div><div class="line"><a name="l09980"></a><span class="lineno"> 9980</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xF4)</div><div class="line"><a name="l09981"></a><span class="lineno"> 9981</span>&#160; {</div><div class="line"><a name="l09982"></a><span class="lineno"> 9982</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l09983"></a><span class="lineno"> 9983</span>&#160; }</div><div class="line"><a name="l09984"></a><span class="lineno"> 9984</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l09985"></a><span class="lineno"> 9985</span>&#160;basic_json_parser_10:</div><div class="line"><a name="l09986"></a><span class="lineno"> 9986</span>&#160; ++m_cursor;</div><div class="line"><a name="l09987"></a><span class="lineno"> 9987</span>&#160; {</div><div class="line"><a name="l09988"></a><span class="lineno"> 9988</span>&#160; last_token_type = token_type::value_separator;</div><div class="line"><a name="l09989"></a><span class="lineno"> 9989</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09990"></a><span class="lineno"> 9990</span>&#160; }</div><div class="line"><a name="l09991"></a><span class="lineno"> 9991</span>&#160;basic_json_parser_12:</div><div class="line"><a name="l09992"></a><span class="lineno"> 9992</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l09993"></a><span class="lineno"> 9993</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l09994"></a><span class="lineno"> 9994</span>&#160; {</div><div class="line"><a name="l09995"></a><span class="lineno"> 9995</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l09996"></a><span class="lineno"> 9996</span>&#160; }</div><div class="line"><a name="l09997"></a><span class="lineno"> 9997</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l09998"></a><span class="lineno"> 9998</span>&#160; {</div><div class="line"><a name="l09999"></a><span class="lineno"> 9999</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_43;</div><div class="line"><a name="l10000"></a><span class="lineno">10000</span>&#160; }</div><div class="line"><a name="l10001"></a><span class="lineno">10001</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10002"></a><span class="lineno">10002</span>&#160; {</div><div class="line"><a name="l10003"></a><span class="lineno">10003</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_45;</div><div class="line"><a name="l10004"></a><span class="lineno">10004</span>&#160; }</div><div class="line"><a name="l10005"></a><span class="lineno">10005</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l10006"></a><span class="lineno">10006</span>&#160;basic_json_parser_13:</div><div class="line"><a name="l10007"></a><span class="lineno">10007</span>&#160; yyaccept = 1;</div><div class="line"><a name="l10008"></a><span class="lineno">10008</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l10009"></a><span class="lineno">10009</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10010"></a><span class="lineno">10010</span>&#160; {</div><div class="line"><a name="l10011"></a><span class="lineno">10011</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l10012"></a><span class="lineno">10012</span>&#160; {</div><div class="line"><a name="l10013"></a><span class="lineno">10013</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</div><div class="line"><a name="l10014"></a><span class="lineno">10014</span>&#160; }</div><div class="line"><a name="l10015"></a><span class="lineno">10015</span>&#160; <span class="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l10016"></a><span class="lineno">10016</span>&#160; {</div><div class="line"><a name="l10017"></a><span class="lineno">10017</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_48;</div><div class="line"><a name="l10018"></a><span class="lineno">10018</span>&#160; }</div><div class="line"><a name="l10019"></a><span class="lineno">10019</span>&#160; }</div><div class="line"><a name="l10020"></a><span class="lineno">10020</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l10023"></a><span class="lineno">10023</span>&#160; {</div><div class="line"><a name="l10024"></a><span class="lineno">10024</span>&#160; <span class="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l10025"></a><span class="lineno">10025</span>&#160; {</div><div class="line"><a name="l10026"></a><span class="lineno">10026</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10027"></a><span class="lineno">10027</span>&#160; }</div><div class="line"><a name="l10028"></a><span class="lineno">10028</span>&#160; }</div><div class="line"><a name="l10029"></a><span class="lineno">10029</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10030"></a><span class="lineno">10030</span>&#160; {</div><div class="line"><a name="l10031"></a><span class="lineno">10031</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10032"></a><span class="lineno">10032</span>&#160; {</div><div class="line"><a name="l10033"></a><span class="lineno">10033</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10034"></a><span class="lineno">10034</span>&#160; }</div><div class="line"><a name="l10035"></a><span class="lineno">10035</span>&#160; }</div><div class="line"><a name="l10036"></a><span class="lineno">10036</span>&#160; }</div><div class="line"><a name="l10037"></a><span class="lineno">10037</span>&#160;basic_json_parser_14:</div><div class="line"><a name="l10038"></a><span class="lineno">10038</span>&#160; {</div><div class="line"><a name="l10039"></a><span class="lineno">10039</span>&#160; last_token_type = token_type::value_unsigned;</div><div class="line"><a name="l10040"></a><span class="lineno">10040</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10041"></a><span class="lineno">10041</span>&#160; }</div><div class="line"><a name="l10042"></a><span class="lineno">10042</span>&#160;basic_json_parser_15:</div><div class="line"><a name="l10043"></a><span class="lineno">10043</span>&#160; yyaccept = 1;</div><div class="line"><a name="l10044"></a><span class="lineno">10044</span>&#160; m_marker = ++m_cursor;</div><div class="line"><a name="l10045"></a><span class="lineno">10045</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 3)</div><div class="line"><a name="l10046"></a><span class="lineno">10046</span>&#160; {</div><div class="line"><a name="l10047"></a><span class="lineno">10047</span>&#160; fill_line_buffer(3); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10048"></a><span class="lineno">10048</span>&#160; }</div><div class="line"><a name="l10049"></a><span class="lineno">10049</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10050"></a><span class="lineno">10050</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 64)</div><div class="line"><a name="l10051"></a><span class="lineno">10051</span>&#160; {</div><div class="line"><a name="l10052"></a><span class="lineno">10052</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_15;</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">10054</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l10055"></a><span class="lineno">10055</span>&#160; {</div><div class="line"><a name="l10056"></a><span class="lineno">10056</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l10057"></a><span class="lineno">10057</span>&#160; {</div><div class="line"><a name="l10058"></a><span class="lineno">10058</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</div><div class="line"><a name="l10059"></a><span class="lineno">10059</span>&#160; }</div><div class="line"><a name="l10060"></a><span class="lineno">10060</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l10061"></a><span class="lineno">10061</span>&#160; }</div><div class="line"><a name="l10062"></a><span class="lineno">10062</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10063"></a><span class="lineno">10063</span>&#160; {</div><div class="line"><a name="l10064"></a><span class="lineno">10064</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l10065"></a><span class="lineno">10065</span>&#160; {</div><div class="line"><a name="l10066"></a><span class="lineno">10066</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10067"></a><span class="lineno">10067</span>&#160; }</div><div class="line"><a name="l10068"></a><span class="lineno">10068</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10069"></a><span class="lineno">10069</span>&#160; {</div><div class="line"><a name="l10070"></a><span class="lineno">10070</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10071"></a><span class="lineno">10071</span>&#160; }</div><div class="line"><a name="l10072"></a><span class="lineno">10072</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l10073"></a><span class="lineno">10073</span>&#160; }</div><div class="line"><a name="l10074"></a><span class="lineno">10074</span>&#160;basic_json_parser_17:</div><div class="line"><a name="l10075"></a><span class="lineno">10075</span>&#160; ++m_cursor;</div><div class="line"><a name="l10076"></a><span class="lineno">10076</span>&#160; {</div><div class="line"><a name="l10077"></a><span class="lineno">10077</span>&#160; last_token_type = token_type::name_separator;</div><div class="line"><a name="l10078"></a><span class="lineno">10078</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10079"></a><span class="lineno">10079</span>&#160; }</div><div class="line"><a name="l10080"></a><span class="lineno">10080</span>&#160;basic_json_parser_19:</div><div class="line"><a name="l10081"></a><span class="lineno">10081</span>&#160; ++m_cursor;</div><div class="line"><a name="l10082"></a><span class="lineno">10082</span>&#160; {</div><div class="line"><a name="l10083"></a><span class="lineno">10083</span>&#160; last_token_type = token_type::begin_array;</div><div class="line"><a name="l10084"></a><span class="lineno">10084</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10085"></a><span class="lineno">10085</span>&#160; }</div><div class="line"><a name="l10086"></a><span class="lineno">10086</span>&#160;basic_json_parser_21:</div><div class="line"><a name="l10087"></a><span class="lineno">10087</span>&#160; ++m_cursor;</div><div class="line"><a name="l10088"></a><span class="lineno">10088</span>&#160; {</div><div class="line"><a name="l10089"></a><span class="lineno">10089</span>&#160; last_token_type = token_type::end_array;</div><div class="line"><a name="l10090"></a><span class="lineno">10090</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10091"></a><span class="lineno">10091</span>&#160; }</div><div class="line"><a name="l10092"></a><span class="lineno">10092</span>&#160;basic_json_parser_23:</div><div class="line"><a name="l10093"></a><span class="lineno">10093</span>&#160; yyaccept = 0;</div><div class="line"><a name="l10094"></a><span class="lineno">10094</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l10095"></a><span class="lineno">10095</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;a&#39;</span>)</div><div class="line"><a name="l10096"></a><span class="lineno">10096</span>&#160; {</div><div class="line"><a name="l10097"></a><span class="lineno">10097</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_52;</div><div class="line"><a name="l10098"></a><span class="lineno">10098</span>&#160; }</div><div class="line"><a name="l10099"></a><span class="lineno">10099</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l10100"></a><span class="lineno">10100</span>&#160;basic_json_parser_24:</div><div class="line"><a name="l10101"></a><span class="lineno">10101</span>&#160; yyaccept = 0;</div><div class="line"><a name="l10102"></a><span class="lineno">10102</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l10103"></a><span class="lineno">10103</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l10104"></a><span class="lineno">10104</span>&#160; {</div><div class="line"><a name="l10105"></a><span class="lineno">10105</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_53;</div><div class="line"><a name="l10106"></a><span class="lineno">10106</span>&#160; }</div><div class="line"><a name="l10107"></a><span class="lineno">10107</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l10108"></a><span class="lineno">10108</span>&#160;basic_json_parser_25:</div><div class="line"><a name="l10109"></a><span class="lineno">10109</span>&#160; yyaccept = 0;</div><div class="line"><a name="l10110"></a><span class="lineno">10110</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l10111"></a><span class="lineno">10111</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;r&#39;</span>)</div><div class="line"><a name="l10112"></a><span class="lineno">10112</span>&#160; {</div><div class="line"><a name="l10113"></a><span class="lineno">10113</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_54;</div><div class="line"><a name="l10114"></a><span class="lineno">10114</span>&#160; }</div><div class="line"><a name="l10115"></a><span class="lineno">10115</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l10116"></a><span class="lineno">10116</span>&#160;basic_json_parser_26:</div><div class="line"><a name="l10117"></a><span class="lineno">10117</span>&#160; ++m_cursor;</div><div class="line"><a name="l10118"></a><span class="lineno">10118</span>&#160; {</div><div class="line"><a name="l10119"></a><span class="lineno">10119</span>&#160; last_token_type = token_type::begin_object;</div><div class="line"><a name="l10120"></a><span class="lineno">10120</span>&#160; <span class="keywordflow">break</span>;</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;basic_json_parser_28:</div><div class="line"><a name="l10123"></a><span class="lineno">10123</span>&#160; ++m_cursor;</div><div class="line"><a name="l10124"></a><span class="lineno">10124</span>&#160; {</div><div class="line"><a name="l10125"></a><span class="lineno">10125</span>&#160; last_token_type = token_type::end_object;</div><div class="line"><a name="l10126"></a><span class="lineno">10126</span>&#160; <span class="keywordflow">break</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;basic_json_parser_30:</div><div class="line"><a name="l10129"></a><span class="lineno">10129</span>&#160; ++m_cursor;</div><div class="line"><a name="l10130"></a><span class="lineno">10130</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</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; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></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; yych = *m_cursor;</div><div class="line"><a name="l10135"></a><span class="lineno">10135</span>&#160;basic_json_parser_31:</div><div class="line"><a name="l10136"></a><span class="lineno">10136</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 128)</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="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10139"></a><span class="lineno">10139</span>&#160; }</div><div class="line"><a name="l10140"></a><span class="lineno">10140</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xE0)</div><div class="line"><a name="l10141"></a><span class="lineno">10141</span>&#160; {</div><div class="line"><a name="l10142"></a><span class="lineno">10142</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;\\&#39;</span>)</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; <span class="keywordflow">if</span> (yych &lt;= 0x1F)</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">goto</span> basic_json_parser_32;</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="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;&quot;&#39;</span>)</div><div class="line"><a name="l10149"></a><span class="lineno">10149</span>&#160; {</div><div class="line"><a name="l10150"></a><span class="lineno">10150</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</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; <span class="keywordflow">goto</span> basic_json_parser_35;</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; <span class="keywordflow">else</span></div><div class="line"><a name="l10155"></a><span class="lineno">10155</span>&#160; {</div><div class="line"><a name="l10156"></a><span class="lineno">10156</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xC1)</div><div class="line"><a name="l10157"></a><span class="lineno">10157</span>&#160; {</div><div class="line"><a name="l10158"></a><span class="lineno">10158</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10159"></a><span class="lineno">10159</span>&#160; }</div><div class="line"><a name="l10160"></a><span class="lineno">10160</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xDF)</div><div class="line"><a name="l10161"></a><span class="lineno">10161</span>&#160; {</div><div class="line"><a name="l10162"></a><span class="lineno">10162</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_36;</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="keywordflow">goto</span> basic_json_parser_37;</div><div class="line"><a name="l10165"></a><span class="lineno">10165</span>&#160; }</div><div class="line"><a name="l10166"></a><span class="lineno">10166</span>&#160; }</div><div class="line"><a name="l10167"></a><span class="lineno">10167</span>&#160; <span class="keywordflow">else</span></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">if</span> (yych &lt;= 0xEF)</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> (yych == 0xED)</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="keywordflow">goto</span> basic_json_parser_39;</div><div class="line"><a name="l10174"></a><span class="lineno">10174</span>&#160; }</div><div class="line"><a name="l10175"></a><span class="lineno">10175</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l10176"></a><span class="lineno">10176</span>&#160; }</div><div class="line"><a name="l10177"></a><span class="lineno">10177</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10178"></a><span class="lineno">10178</span>&#160; {</div><div class="line"><a name="l10179"></a><span class="lineno">10179</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xF0)</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="keywordflow">goto</span> basic_json_parser_40;</div><div class="line"><a name="l10182"></a><span class="lineno">10182</span>&#160; }</div><div class="line"><a name="l10183"></a><span class="lineno">10183</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xF3)</div><div class="line"><a name="l10184"></a><span class="lineno">10184</span>&#160; {</div><div class="line"><a name="l10185"></a><span class="lineno">10185</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_41;</div><div class="line"><a name="l10186"></a><span class="lineno">10186</span>&#160; }</div><div class="line"><a name="l10187"></a><span class="lineno">10187</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xF4)</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; <span class="keywordflow">goto</span> basic_json_parser_42;</div><div class="line"><a name="l10190"></a><span class="lineno">10190</span>&#160; }</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;basic_json_parser_32:</div><div class="line"><a name="l10194"></a><span class="lineno">10194</span>&#160; m_cursor = m_marker;</div><div class="line"><a name="l10195"></a><span class="lineno">10195</span>&#160; <span class="keywordflow">if</span> (yyaccept &lt;= 1)</div><div class="line"><a name="l10196"></a><span class="lineno">10196</span>&#160; {</div><div class="line"><a name="l10197"></a><span class="lineno">10197</span>&#160; <span class="keywordflow">if</span> (yyaccept == 0)</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; <span class="keywordflow">goto</span> basic_json_parser_5;</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; <span class="keywordflow">else</span></div><div class="line"><a name="l10202"></a><span class="lineno">10202</span>&#160; {</div><div class="line"><a name="l10203"></a><span class="lineno">10203</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</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; }</div><div class="line"><a name="l10206"></a><span class="lineno">10206</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10207"></a><span class="lineno">10207</span>&#160; {</div><div class="line"><a name="l10208"></a><span class="lineno">10208</span>&#160; <span class="keywordflow">if</span> (yyaccept == 2)</div><div class="line"><a name="l10209"></a><span class="lineno">10209</span>&#160; {</div><div class="line"><a name="l10210"></a><span class="lineno">10210</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_44;</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="keywordflow">else</span></div><div class="line"><a name="l10213"></a><span class="lineno">10213</span>&#160; {</div><div class="line"><a name="l10214"></a><span class="lineno">10214</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_58;</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; }</div><div class="line"><a name="l10217"></a><span class="lineno">10217</span>&#160;basic_json_parser_33:</div><div class="line"><a name="l10218"></a><span class="lineno">10218</span>&#160; ++m_cursor;</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; last_token_type = token_type::value_string;</div><div class="line"><a name="l10221"></a><span class="lineno">10221</span>&#160; <span class="keywordflow">break</span>;</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;basic_json_parser_35:</div><div class="line"><a name="l10224"></a><span class="lineno">10224</span>&#160; ++m_cursor;</div><div class="line"><a name="l10225"></a><span class="lineno">10225</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10226"></a><span class="lineno">10226</span>&#160; {</div><div class="line"><a name="l10227"></a><span class="lineno">10227</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></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; yych = *m_cursor;</div><div class="line"><a name="l10230"></a><span class="lineno">10230</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10231"></a><span class="lineno">10231</span>&#160; {</div><div class="line"><a name="l10232"></a><span class="lineno">10232</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10233"></a><span class="lineno">10233</span>&#160; {</div><div class="line"><a name="l10234"></a><span class="lineno">10234</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;&quot;&#39;</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; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10237"></a><span class="lineno">10237</span>&#160; }</div><div class="line"><a name="l10238"></a><span class="lineno">10238</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;.&#39;</span>)</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="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10241"></a><span class="lineno">10241</span>&#160; }</div><div class="line"><a name="l10242"></a><span class="lineno">10242</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10243"></a><span class="lineno">10243</span>&#160; }</div><div class="line"><a name="l10244"></a><span class="lineno">10244</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10245"></a><span class="lineno">10245</span>&#160; {</div><div class="line"><a name="l10246"></a><span class="lineno">10246</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;\\&#39;</span>)</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="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;[&#39;</span>)</div><div class="line"><a name="l10249"></a><span class="lineno">10249</span>&#160; {</div><div class="line"><a name="l10250"></a><span class="lineno">10250</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10251"></a><span class="lineno">10251</span>&#160; }</div><div class="line"><a name="l10252"></a><span class="lineno">10252</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</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">else</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; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;b&#39;</span>)</div><div class="line"><a name="l10257"></a><span class="lineno">10257</span>&#160; {</div><div class="line"><a name="l10258"></a><span class="lineno">10258</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</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">goto</span> basic_json_parser_32;</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; }</div><div class="line"><a name="l10264"></a><span class="lineno">10264</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;q&#39;</span>)</div><div class="line"><a name="l10267"></a><span class="lineno">10267</span>&#160; {</div><div class="line"><a name="l10268"></a><span class="lineno">10268</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</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">goto</span> basic_json_parser_30;</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; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;n&#39;</span>)</div><div class="line"><a name="l10273"></a><span class="lineno">10273</span>&#160; {</div><div class="line"><a name="l10274"></a><span class="lineno">10274</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10275"></a><span class="lineno">10275</span>&#160; }</div><div class="line"><a name="l10276"></a><span class="lineno">10276</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</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">else</span></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">if</span> (yych &lt;= <span class="charliteral">&#39;s&#39;</span>)</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; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;r&#39;</span>)</div><div class="line"><a name="l10283"></a><span class="lineno">10283</span>&#160; {</div><div class="line"><a name="l10284"></a><span class="lineno">10284</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</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">goto</span> basic_json_parser_32;</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; <span class="keywordflow">else</span></div><div class="line"><a name="l10289"></a><span class="lineno">10289</span>&#160; {</div><div class="line"><a name="l10290"></a><span class="lineno">10290</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;t&#39;</span>)</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">goto</span> basic_json_parser_30;</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="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l10295"></a><span class="lineno">10295</span>&#160; {</div><div class="line"><a name="l10296"></a><span class="lineno">10296</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_55;</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; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10299"></a><span class="lineno">10299</span>&#160; }</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; }</div><div class="line"><a name="l10302"></a><span class="lineno">10302</span>&#160;basic_json_parser_36:</div><div class="line"><a name="l10303"></a><span class="lineno">10303</span>&#160; ++m_cursor;</div><div class="line"><a name="l10304"></a><span class="lineno">10304</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10305"></a><span class="lineno">10305</span>&#160; {</div><div class="line"><a name="l10306"></a><span class="lineno">10306</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10307"></a><span class="lineno">10307</span>&#160; }</div><div class="line"><a name="l10308"></a><span class="lineno">10308</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10309"></a><span class="lineno">10309</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</div><div class="line"><a name="l10310"></a><span class="lineno">10310</span>&#160; {</div><div class="line"><a name="l10311"></a><span class="lineno">10311</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10312"></a><span class="lineno">10312</span>&#160; }</div><div class="line"><a name="l10313"></a><span class="lineno">10313</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xBF)</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; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10316"></a><span class="lineno">10316</span>&#160; }</div><div class="line"><a name="l10317"></a><span class="lineno">10317</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10318"></a><span class="lineno">10318</span>&#160;basic_json_parser_37:</div><div class="line"><a name="l10319"></a><span class="lineno">10319</span>&#160; ++m_cursor;</div><div class="line"><a name="l10320"></a><span class="lineno">10320</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10321"></a><span class="lineno">10321</span>&#160; {</div><div class="line"><a name="l10322"></a><span class="lineno">10322</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10323"></a><span class="lineno">10323</span>&#160; }</div><div class="line"><a name="l10324"></a><span class="lineno">10324</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10325"></a><span class="lineno">10325</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x9F)</div><div class="line"><a name="l10326"></a><span class="lineno">10326</span>&#160; {</div><div class="line"><a name="l10327"></a><span class="lineno">10327</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10328"></a><span class="lineno">10328</span>&#160; }</div><div class="line"><a name="l10329"></a><span class="lineno">10329</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xBF)</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="keywordflow">goto</span> basic_json_parser_36;</div><div class="line"><a name="l10332"></a><span class="lineno">10332</span>&#160; }</div><div class="line"><a name="l10333"></a><span class="lineno">10333</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10334"></a><span class="lineno">10334</span>&#160;basic_json_parser_38:</div><div class="line"><a name="l10335"></a><span class="lineno">10335</span>&#160; ++m_cursor;</div><div class="line"><a name="l10336"></a><span class="lineno">10336</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10337"></a><span class="lineno">10337</span>&#160; {</div><div class="line"><a name="l10338"></a><span class="lineno">10338</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></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; yych = *m_cursor;</div><div class="line"><a name="l10341"></a><span class="lineno">10341</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</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">goto</span> basic_json_parser_32;</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; <span class="keywordflow">if</span> (yych &lt;= 0xBF)</div><div class="line"><a name="l10346"></a><span class="lineno">10346</span>&#160; {</div><div class="line"><a name="l10347"></a><span class="lineno">10347</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_36;</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">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10350"></a><span class="lineno">10350</span>&#160;basic_json_parser_39:</div><div class="line"><a name="l10351"></a><span class="lineno">10351</span>&#160; ++m_cursor;</div><div class="line"><a name="l10352"></a><span class="lineno">10352</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10353"></a><span class="lineno">10353</span>&#160; {</div><div class="line"><a name="l10354"></a><span class="lineno">10354</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></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; yych = *m_cursor;</div><div class="line"><a name="l10357"></a><span class="lineno">10357</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</div><div class="line"><a name="l10358"></a><span class="lineno">10358</span>&#160; {</div><div class="line"><a name="l10359"></a><span class="lineno">10359</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10360"></a><span class="lineno">10360</span>&#160; }</div><div class="line"><a name="l10361"></a><span class="lineno">10361</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x9F)</div><div class="line"><a name="l10362"></a><span class="lineno">10362</span>&#160; {</div><div class="line"><a name="l10363"></a><span class="lineno">10363</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_36;</div><div class="line"><a name="l10364"></a><span class="lineno">10364</span>&#160; }</div><div class="line"><a name="l10365"></a><span class="lineno">10365</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10366"></a><span class="lineno">10366</span>&#160;basic_json_parser_40:</div><div class="line"><a name="l10367"></a><span class="lineno">10367</span>&#160; ++m_cursor;</div><div class="line"><a name="l10368"></a><span class="lineno">10368</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10369"></a><span class="lineno">10369</span>&#160; {</div><div class="line"><a name="l10370"></a><span class="lineno">10370</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10371"></a><span class="lineno">10371</span>&#160; }</div><div class="line"><a name="l10372"></a><span class="lineno">10372</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10373"></a><span class="lineno">10373</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x8F)</div><div class="line"><a name="l10374"></a><span class="lineno">10374</span>&#160; {</div><div class="line"><a name="l10375"></a><span class="lineno">10375</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10376"></a><span class="lineno">10376</span>&#160; }</div><div class="line"><a name="l10377"></a><span class="lineno">10377</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xBF)</div><div class="line"><a name="l10378"></a><span class="lineno">10378</span>&#160; {</div><div class="line"><a name="l10379"></a><span class="lineno">10379</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l10380"></a><span class="lineno">10380</span>&#160; }</div><div class="line"><a name="l10381"></a><span class="lineno">10381</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10382"></a><span class="lineno">10382</span>&#160;basic_json_parser_41:</div><div class="line"><a name="l10383"></a><span class="lineno">10383</span>&#160; ++m_cursor;</div><div class="line"><a name="l10384"></a><span class="lineno">10384</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10385"></a><span class="lineno">10385</span>&#160; {</div><div class="line"><a name="l10386"></a><span class="lineno">10386</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10387"></a><span class="lineno">10387</span>&#160; }</div><div class="line"><a name="l10388"></a><span class="lineno">10388</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10389"></a><span class="lineno">10389</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</div><div class="line"><a name="l10390"></a><span class="lineno">10390</span>&#160; {</div><div class="line"><a name="l10391"></a><span class="lineno">10391</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10392"></a><span class="lineno">10392</span>&#160; }</div><div class="line"><a name="l10393"></a><span class="lineno">10393</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0xBF)</div><div class="line"><a name="l10394"></a><span class="lineno">10394</span>&#160; {</div><div class="line"><a name="l10395"></a><span class="lineno">10395</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</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">10397</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10398"></a><span class="lineno">10398</span>&#160;basic_json_parser_42:</div><div class="line"><a name="l10399"></a><span class="lineno">10399</span>&#160; ++m_cursor;</div><div class="line"><a name="l10400"></a><span class="lineno">10400</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10401"></a><span class="lineno">10401</span>&#160; {</div><div class="line"><a name="l10402"></a><span class="lineno">10402</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10403"></a><span class="lineno">10403</span>&#160; }</div><div class="line"><a name="l10404"></a><span class="lineno">10404</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10405"></a><span class="lineno">10405</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x7F)</div><div class="line"><a name="l10406"></a><span class="lineno">10406</span>&#160; {</div><div class="line"><a name="l10407"></a><span class="lineno">10407</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10408"></a><span class="lineno">10408</span>&#160; }</div><div class="line"><a name="l10409"></a><span class="lineno">10409</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x8F)</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="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l10412"></a><span class="lineno">10412</span>&#160; }</div><div class="line"><a name="l10413"></a><span class="lineno">10413</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10414"></a><span class="lineno">10414</span>&#160;basic_json_parser_43:</div><div class="line"><a name="l10415"></a><span class="lineno">10415</span>&#160; yyaccept = 2;</div><div class="line"><a name="l10416"></a><span class="lineno">10416</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l10417"></a><span class="lineno">10417</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10418"></a><span class="lineno">10418</span>&#160; {</div><div class="line"><a name="l10419"></a><span class="lineno">10419</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l10420"></a><span class="lineno">10420</span>&#160; {</div><div class="line"><a name="l10421"></a><span class="lineno">10421</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</div><div class="line"><a name="l10422"></a><span class="lineno">10422</span>&#160; }</div><div class="line"><a name="l10423"></a><span class="lineno">10423</span>&#160; <span class="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l10424"></a><span class="lineno">10424</span>&#160; {</div><div class="line"><a name="l10425"></a><span class="lineno">10425</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_48;</div><div class="line"><a name="l10426"></a><span class="lineno">10426</span>&#160; }</div><div class="line"><a name="l10427"></a><span class="lineno">10427</span>&#160; }</div><div class="line"><a name="l10428"></a><span class="lineno">10428</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10429"></a><span class="lineno">10429</span>&#160; {</div><div class="line"><a name="l10430"></a><span class="lineno">10430</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</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="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l10433"></a><span class="lineno">10433</span>&#160; {</div><div class="line"><a name="l10434"></a><span class="lineno">10434</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10435"></a><span class="lineno">10435</span>&#160; }</div><div class="line"><a name="l10436"></a><span class="lineno">10436</span>&#160; }</div><div class="line"><a name="l10437"></a><span class="lineno">10437</span>&#160; <span class="keywordflow">else</span></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="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10440"></a><span class="lineno">10440</span>&#160; {</div><div class="line"><a name="l10441"></a><span class="lineno">10441</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</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; }</div><div class="line"><a name="l10444"></a><span class="lineno">10444</span>&#160; }</div><div class="line"><a name="l10445"></a><span class="lineno">10445</span>&#160;basic_json_parser_44:</div><div class="line"><a name="l10446"></a><span class="lineno">10446</span>&#160; {</div><div class="line"><a name="l10447"></a><span class="lineno">10447</span>&#160; last_token_type = token_type::value_integer;</div><div class="line"><a name="l10448"></a><span class="lineno">10448</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10449"></a><span class="lineno">10449</span>&#160; }</div><div class="line"><a name="l10450"></a><span class="lineno">10450</span>&#160;basic_json_parser_45:</div><div class="line"><a name="l10451"></a><span class="lineno">10451</span>&#160; yyaccept = 2;</div><div class="line"><a name="l10452"></a><span class="lineno">10452</span>&#160; m_marker = ++m_cursor;</div><div class="line"><a name="l10453"></a><span class="lineno">10453</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 3)</div><div class="line"><a name="l10454"></a><span class="lineno">10454</span>&#160; {</div><div class="line"><a name="l10455"></a><span class="lineno">10455</span>&#160; fill_line_buffer(3); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10456"></a><span class="lineno">10456</span>&#160; }</div><div class="line"><a name="l10457"></a><span class="lineno">10457</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10458"></a><span class="lineno">10458</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</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; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l10461"></a><span class="lineno">10461</span>&#160; {</div><div class="line"><a name="l10462"></a><span class="lineno">10462</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</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">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</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="keywordflow">goto</span> basic_json_parser_44;</div><div class="line"><a name="l10467"></a><span class="lineno">10467</span>&#160; }</div><div class="line"><a name="l10468"></a><span class="lineno">10468</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_45;</div><div class="line"><a name="l10469"></a><span class="lineno">10469</span>&#160; }</div><div class="line"><a name="l10470"></a><span class="lineno">10470</span>&#160; <span class="keywordflow">else</span></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> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</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="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l10475"></a><span class="lineno">10475</span>&#160; {</div><div class="line"><a name="l10476"></a><span class="lineno">10476</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_44;</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">goto</span> basic_json_parser_51;</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="keywordflow">else</span></div><div class="line"><a name="l10481"></a><span class="lineno">10481</span>&#160; {</div><div class="line"><a name="l10482"></a><span class="lineno">10482</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10483"></a><span class="lineno">10483</span>&#160; {</div><div class="line"><a name="l10484"></a><span class="lineno">10484</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</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; <span class="keywordflow">goto</span> basic_json_parser_44;</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;basic_json_parser_47:</div><div class="line"><a name="l10490"></a><span class="lineno">10490</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10491"></a><span class="lineno">10491</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10492"></a><span class="lineno">10492</span>&#160; {</div><div class="line"><a name="l10493"></a><span class="lineno">10493</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10494"></a><span class="lineno">10494</span>&#160; }</div><div class="line"><a name="l10495"></a><span class="lineno">10495</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10496"></a><span class="lineno">10496</span>&#160; {</div><div class="line"><a name="l10497"></a><span class="lineno">10497</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_56;</div><div class="line"><a name="l10498"></a><span class="lineno">10498</span>&#160; }</div><div class="line"><a name="l10499"></a><span class="lineno">10499</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10500"></a><span class="lineno">10500</span>&#160;basic_json_parser_48:</div><div class="line"><a name="l10501"></a><span class="lineno">10501</span>&#160; ++m_cursor;</div><div class="line"><a name="l10502"></a><span class="lineno">10502</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</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; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10505"></a><span class="lineno">10505</span>&#160; }</div><div class="line"><a name="l10506"></a><span class="lineno">10506</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10507"></a><span class="lineno">10507</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10508"></a><span class="lineno">10508</span>&#160; {</div><div class="line"><a name="l10509"></a><span class="lineno">10509</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_50;</div><div class="line"><a name="l10510"></a><span class="lineno">10510</span>&#160; }</div><div class="line"><a name="l10511"></a><span class="lineno">10511</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</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="keywordflow">goto</span> basic_json_parser_48;</div><div class="line"><a name="l10514"></a><span class="lineno">10514</span>&#160; }</div><div class="line"><a name="l10515"></a><span class="lineno">10515</span>&#160;basic_json_parser_50:</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; last_token_type = token_type::parse_error;</div><div class="line"><a name="l10518"></a><span class="lineno">10518</span>&#160; <span class="keywordflow">break</span>;</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;basic_json_parser_51:</div><div class="line"><a name="l10521"></a><span class="lineno">10521</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10522"></a><span class="lineno">10522</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;,&#39;</span>)</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; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;+&#39;</span>)</div><div class="line"><a name="l10525"></a><span class="lineno">10525</span>&#160; {</div><div class="line"><a name="l10526"></a><span class="lineno">10526</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_59;</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; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10529"></a><span class="lineno">10529</span>&#160; }</div><div class="line"><a name="l10530"></a><span class="lineno">10530</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10531"></a><span class="lineno">10531</span>&#160; {</div><div class="line"><a name="l10532"></a><span class="lineno">10532</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;-&#39;</span>)</div><div class="line"><a name="l10533"></a><span class="lineno">10533</span>&#160; {</div><div class="line"><a name="l10534"></a><span class="lineno">10534</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_59;</div><div class="line"><a name="l10535"></a><span class="lineno">10535</span>&#160; }</div><div class="line"><a name="l10536"></a><span class="lineno">10536</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10537"></a><span class="lineno">10537</span>&#160; {</div><div class="line"><a name="l10538"></a><span class="lineno">10538</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10539"></a><span class="lineno">10539</span>&#160; }</div><div class="line"><a name="l10540"></a><span class="lineno">10540</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10541"></a><span class="lineno">10541</span>&#160; {</div><div class="line"><a name="l10542"></a><span class="lineno">10542</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_60;</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; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10545"></a><span class="lineno">10545</span>&#160; }</div><div class="line"><a name="l10546"></a><span class="lineno">10546</span>&#160;basic_json_parser_52:</div><div class="line"><a name="l10547"></a><span class="lineno">10547</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10548"></a><span class="lineno">10548</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l10549"></a><span class="lineno">10549</span>&#160; {</div><div class="line"><a name="l10550"></a><span class="lineno">10550</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_62;</div><div class="line"><a name="l10551"></a><span class="lineno">10551</span>&#160; }</div><div class="line"><a name="l10552"></a><span class="lineno">10552</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10553"></a><span class="lineno">10553</span>&#160;basic_json_parser_53:</div><div class="line"><a name="l10554"></a><span class="lineno">10554</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10555"></a><span class="lineno">10555</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l10556"></a><span class="lineno">10556</span>&#160; {</div><div class="line"><a name="l10557"></a><span class="lineno">10557</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_63;</div><div class="line"><a name="l10558"></a><span class="lineno">10558</span>&#160; }</div><div class="line"><a name="l10559"></a><span class="lineno">10559</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10560"></a><span class="lineno">10560</span>&#160;basic_json_parser_54:</div><div class="line"><a name="l10561"></a><span class="lineno">10561</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10562"></a><span class="lineno">10562</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;u&#39;</span>)</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; <span class="keywordflow">goto</span> basic_json_parser_64;</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; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10567"></a><span class="lineno">10567</span>&#160;basic_json_parser_55:</div><div class="line"><a name="l10568"></a><span class="lineno">10568</span>&#160; ++m_cursor;</div><div class="line"><a name="l10569"></a><span class="lineno">10569</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10570"></a><span class="lineno">10570</span>&#160; {</div><div class="line"><a name="l10571"></a><span class="lineno">10571</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10572"></a><span class="lineno">10572</span>&#160; }</div><div class="line"><a name="l10573"></a><span class="lineno">10573</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10574"></a><span class="lineno">10574</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l10575"></a><span class="lineno">10575</span>&#160; {</div><div class="line"><a name="l10576"></a><span class="lineno">10576</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10577"></a><span class="lineno">10577</span>&#160; {</div><div class="line"><a name="l10578"></a><span class="lineno">10578</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10579"></a><span class="lineno">10579</span>&#160; }</div><div class="line"><a name="l10580"></a><span class="lineno">10580</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</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; <span class="keywordflow">goto</span> basic_json_parser_65;</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; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10585"></a><span class="lineno">10585</span>&#160; }</div><div class="line"><a name="l10586"></a><span class="lineno">10586</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10587"></a><span class="lineno">10587</span>&#160; {</div><div class="line"><a name="l10588"></a><span class="lineno">10588</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l10589"></a><span class="lineno">10589</span>&#160; {</div><div class="line"><a name="l10590"></a><span class="lineno">10590</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_65;</div><div class="line"><a name="l10591"></a><span class="lineno">10591</span>&#160; }</div><div class="line"><a name="l10592"></a><span class="lineno">10592</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l10593"></a><span class="lineno">10593</span>&#160; {</div><div class="line"><a name="l10594"></a><span class="lineno">10594</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10595"></a><span class="lineno">10595</span>&#160; }</div><div class="line"><a name="l10596"></a><span class="lineno">10596</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l10597"></a><span class="lineno">10597</span>&#160; {</div><div class="line"><a name="l10598"></a><span class="lineno">10598</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_65;</div><div class="line"><a name="l10599"></a><span class="lineno">10599</span>&#160; }</div><div class="line"><a name="l10600"></a><span class="lineno">10600</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10601"></a><span class="lineno">10601</span>&#160; }</div><div class="line"><a name="l10602"></a><span class="lineno">10602</span>&#160;basic_json_parser_56:</div><div class="line"><a name="l10603"></a><span class="lineno">10603</span>&#160; yyaccept = 3;</div><div class="line"><a name="l10604"></a><span class="lineno">10604</span>&#160; m_marker = ++m_cursor;</div><div class="line"><a name="l10605"></a><span class="lineno">10605</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 3)</div><div class="line"><a name="l10606"></a><span class="lineno">10606</span>&#160; {</div><div class="line"><a name="l10607"></a><span class="lineno">10607</span>&#160; fill_line_buffer(3); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10608"></a><span class="lineno">10608</span>&#160; }</div><div class="line"><a name="l10609"></a><span class="lineno">10609</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10610"></a><span class="lineno">10610</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l10611"></a><span class="lineno">10611</span>&#160; {</div><div class="line"><a name="l10612"></a><span class="lineno">10612</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10613"></a><span class="lineno">10613</span>&#160; {</div><div class="line"><a name="l10614"></a><span class="lineno">10614</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_58;</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">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</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; <span class="keywordflow">goto</span> basic_json_parser_56;</div><div class="line"><a name="l10619"></a><span class="lineno">10619</span>&#160; }</div><div class="line"><a name="l10620"></a><span class="lineno">10620</span>&#160; }</div><div class="line"><a name="l10621"></a><span class="lineno">10621</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10622"></a><span class="lineno">10622</span>&#160; {</div><div class="line"><a name="l10623"></a><span class="lineno">10623</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l10624"></a><span class="lineno">10624</span>&#160; {</div><div class="line"><a name="l10625"></a><span class="lineno">10625</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10626"></a><span class="lineno">10626</span>&#160; }</div><div class="line"><a name="l10627"></a><span class="lineno">10627</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10628"></a><span class="lineno">10628</span>&#160; {</div><div class="line"><a name="l10629"></a><span class="lineno">10629</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l10630"></a><span class="lineno">10630</span>&#160; }</div><div class="line"><a name="l10631"></a><span class="lineno">10631</span>&#160; }</div><div class="line"><a name="l10632"></a><span class="lineno">10632</span>&#160;basic_json_parser_58:</div><div class="line"><a name="l10633"></a><span class="lineno">10633</span>&#160; {</div><div class="line"><a name="l10634"></a><span class="lineno">10634</span>&#160; last_token_type = token_type::value_float;</div><div class="line"><a name="l10635"></a><span class="lineno">10635</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10636"></a><span class="lineno">10636</span>&#160; }</div><div class="line"><a name="l10637"></a><span class="lineno">10637</span>&#160;basic_json_parser_59:</div><div class="line"><a name="l10638"></a><span class="lineno">10638</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10639"></a><span class="lineno">10639</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10640"></a><span class="lineno">10640</span>&#160; {</div><div class="line"><a name="l10641"></a><span class="lineno">10641</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10642"></a><span class="lineno">10642</span>&#160; }</div><div class="line"><a name="l10643"></a><span class="lineno">10643</span>&#160; <span class="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;:&#39;</span>)</div><div class="line"><a name="l10644"></a><span class="lineno">10644</span>&#160; {</div><div class="line"><a name="l10645"></a><span class="lineno">10645</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10646"></a><span class="lineno">10646</span>&#160; }</div><div class="line"><a name="l10647"></a><span class="lineno">10647</span>&#160;basic_json_parser_60:</div><div class="line"><a name="l10648"></a><span class="lineno">10648</span>&#160; ++m_cursor;</div><div class="line"><a name="l10649"></a><span class="lineno">10649</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10650"></a><span class="lineno">10650</span>&#160; {</div><div class="line"><a name="l10651"></a><span class="lineno">10651</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10652"></a><span class="lineno">10652</span>&#160; }</div><div class="line"><a name="l10653"></a><span class="lineno">10653</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10654"></a><span class="lineno">10654</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10655"></a><span class="lineno">10655</span>&#160; {</div><div class="line"><a name="l10656"></a><span class="lineno">10656</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_58;</div><div class="line"><a name="l10657"></a><span class="lineno">10657</span>&#160; }</div><div class="line"><a name="l10658"></a><span class="lineno">10658</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10659"></a><span class="lineno">10659</span>&#160; {</div><div class="line"><a name="l10660"></a><span class="lineno">10660</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_60;</div><div class="line"><a name="l10661"></a><span class="lineno">10661</span>&#160; }</div><div class="line"><a name="l10662"></a><span class="lineno">10662</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_58;</div><div class="line"><a name="l10663"></a><span class="lineno">10663</span>&#160;basic_json_parser_62:</div><div class="line"><a name="l10664"></a><span class="lineno">10664</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10665"></a><span class="lineno">10665</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l10666"></a><span class="lineno">10666</span>&#160; {</div><div class="line"><a name="l10667"></a><span class="lineno">10667</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_66;</div><div class="line"><a name="l10668"></a><span class="lineno">10668</span>&#160; }</div><div class="line"><a name="l10669"></a><span class="lineno">10669</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10670"></a><span class="lineno">10670</span>&#160;basic_json_parser_63:</div><div class="line"><a name="l10671"></a><span class="lineno">10671</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10672"></a><span class="lineno">10672</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l10673"></a><span class="lineno">10673</span>&#160; {</div><div class="line"><a name="l10674"></a><span class="lineno">10674</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_67;</div><div class="line"><a name="l10675"></a><span class="lineno">10675</span>&#160; }</div><div class="line"><a name="l10676"></a><span class="lineno">10676</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10677"></a><span class="lineno">10677</span>&#160;basic_json_parser_64:</div><div class="line"><a name="l10678"></a><span class="lineno">10678</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10679"></a><span class="lineno">10679</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10680"></a><span class="lineno">10680</span>&#160; {</div><div class="line"><a name="l10681"></a><span class="lineno">10681</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_69;</div><div class="line"><a name="l10682"></a><span class="lineno">10682</span>&#160; }</div><div class="line"><a name="l10683"></a><span class="lineno">10683</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10684"></a><span class="lineno">10684</span>&#160;basic_json_parser_65:</div><div class="line"><a name="l10685"></a><span class="lineno">10685</span>&#160; ++m_cursor;</div><div class="line"><a name="l10686"></a><span class="lineno">10686</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10687"></a><span class="lineno">10687</span>&#160; {</div><div class="line"><a name="l10688"></a><span class="lineno">10688</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10689"></a><span class="lineno">10689</span>&#160; }</div><div class="line"><a name="l10690"></a><span class="lineno">10690</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10691"></a><span class="lineno">10691</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l10692"></a><span class="lineno">10692</span>&#160; {</div><div class="line"><a name="l10693"></a><span class="lineno">10693</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10694"></a><span class="lineno">10694</span>&#160; {</div><div class="line"><a name="l10695"></a><span class="lineno">10695</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10696"></a><span class="lineno">10696</span>&#160; }</div><div class="line"><a name="l10697"></a><span class="lineno">10697</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10698"></a><span class="lineno">10698</span>&#160; {</div><div class="line"><a name="l10699"></a><span class="lineno">10699</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_71;</div><div class="line"><a name="l10700"></a><span class="lineno">10700</span>&#160; }</div><div class="line"><a name="l10701"></a><span class="lineno">10701</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10702"></a><span class="lineno">10702</span>&#160; }</div><div class="line"><a name="l10703"></a><span class="lineno">10703</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10704"></a><span class="lineno">10704</span>&#160; {</div><div class="line"><a name="l10705"></a><span class="lineno">10705</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l10706"></a><span class="lineno">10706</span>&#160; {</div><div class="line"><a name="l10707"></a><span class="lineno">10707</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_71;</div><div class="line"><a name="l10708"></a><span class="lineno">10708</span>&#160; }</div><div class="line"><a name="l10709"></a><span class="lineno">10709</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l10710"></a><span class="lineno">10710</span>&#160; {</div><div class="line"><a name="l10711"></a><span class="lineno">10711</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10712"></a><span class="lineno">10712</span>&#160; }</div><div class="line"><a name="l10713"></a><span class="lineno">10713</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l10714"></a><span class="lineno">10714</span>&#160; {</div><div class="line"><a name="l10715"></a><span class="lineno">10715</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_71;</div><div class="line"><a name="l10716"></a><span class="lineno">10716</span>&#160; }</div><div class="line"><a name="l10717"></a><span class="lineno">10717</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10718"></a><span class="lineno">10718</span>&#160; }</div><div class="line"><a name="l10719"></a><span class="lineno">10719</span>&#160;basic_json_parser_66:</div><div class="line"><a name="l10720"></a><span class="lineno">10720</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l10721"></a><span class="lineno">10721</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l10722"></a><span class="lineno">10722</span>&#160; {</div><div class="line"><a name="l10723"></a><span class="lineno">10723</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_72;</div><div class="line"><a name="l10724"></a><span class="lineno">10724</span>&#160; }</div><div class="line"><a name="l10725"></a><span class="lineno">10725</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10726"></a><span class="lineno">10726</span>&#160;basic_json_parser_67:</div><div class="line"><a name="l10727"></a><span class="lineno">10727</span>&#160; ++m_cursor;</div><div class="line"><a name="l10728"></a><span class="lineno">10728</span>&#160; {</div><div class="line"><a name="l10729"></a><span class="lineno">10729</span>&#160; last_token_type = token_type::literal_null;</div><div class="line"><a name="l10730"></a><span class="lineno">10730</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10731"></a><span class="lineno">10731</span>&#160; }</div><div class="line"><a name="l10732"></a><span class="lineno">10732</span>&#160;basic_json_parser_69:</div><div class="line"><a name="l10733"></a><span class="lineno">10733</span>&#160; ++m_cursor;</div><div class="line"><a name="l10734"></a><span class="lineno">10734</span>&#160; {</div><div class="line"><a name="l10735"></a><span class="lineno">10735</span>&#160; last_token_type = token_type::literal_true;</div><div class="line"><a name="l10736"></a><span class="lineno">10736</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10737"></a><span class="lineno">10737</span>&#160; }</div><div class="line"><a name="l10738"></a><span class="lineno">10738</span>&#160;basic_json_parser_71:</div><div class="line"><a name="l10739"></a><span class="lineno">10739</span>&#160; ++m_cursor;</div><div class="line"><a name="l10740"></a><span class="lineno">10740</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10741"></a><span class="lineno">10741</span>&#160; {</div><div class="line"><a name="l10742"></a><span class="lineno">10742</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10743"></a><span class="lineno">10743</span>&#160; }</div><div class="line"><a name="l10744"></a><span class="lineno">10744</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10745"></a><span class="lineno">10745</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l10746"></a><span class="lineno">10746</span>&#160; {</div><div class="line"><a name="l10747"></a><span class="lineno">10747</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10748"></a><span class="lineno">10748</span>&#160; {</div><div class="line"><a name="l10749"></a><span class="lineno">10749</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10750"></a><span class="lineno">10750</span>&#160; }</div><div class="line"><a name="l10751"></a><span class="lineno">10751</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10752"></a><span class="lineno">10752</span>&#160; {</div><div class="line"><a name="l10753"></a><span class="lineno">10753</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_74;</div><div class="line"><a name="l10754"></a><span class="lineno">10754</span>&#160; }</div><div class="line"><a name="l10755"></a><span class="lineno">10755</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10756"></a><span class="lineno">10756</span>&#160; }</div><div class="line"><a name="l10757"></a><span class="lineno">10757</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10758"></a><span class="lineno">10758</span>&#160; {</div><div class="line"><a name="l10759"></a><span class="lineno">10759</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l10760"></a><span class="lineno">10760</span>&#160; {</div><div class="line"><a name="l10761"></a><span class="lineno">10761</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_74;</div><div class="line"><a name="l10762"></a><span class="lineno">10762</span>&#160; }</div><div class="line"><a name="l10763"></a><span class="lineno">10763</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l10764"></a><span class="lineno">10764</span>&#160; {</div><div class="line"><a name="l10765"></a><span class="lineno">10765</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10766"></a><span class="lineno">10766</span>&#160; }</div><div class="line"><a name="l10767"></a><span class="lineno">10767</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l10768"></a><span class="lineno">10768</span>&#160; {</div><div class="line"><a name="l10769"></a><span class="lineno">10769</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_74;</div><div class="line"><a name="l10770"></a><span class="lineno">10770</span>&#160; }</div><div class="line"><a name="l10771"></a><span class="lineno">10771</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10772"></a><span class="lineno">10772</span>&#160; }</div><div class="line"><a name="l10773"></a><span class="lineno">10773</span>&#160;basic_json_parser_72:</div><div class="line"><a name="l10774"></a><span class="lineno">10774</span>&#160; ++m_cursor;</div><div class="line"><a name="l10775"></a><span class="lineno">10775</span>&#160; {</div><div class="line"><a name="l10776"></a><span class="lineno">10776</span>&#160; last_token_type = token_type::literal_false;</div><div class="line"><a name="l10777"></a><span class="lineno">10777</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10778"></a><span class="lineno">10778</span>&#160; }</div><div class="line"><a name="l10779"></a><span class="lineno">10779</span>&#160;basic_json_parser_74:</div><div class="line"><a name="l10780"></a><span class="lineno">10780</span>&#160; ++m_cursor;</div><div class="line"><a name="l10781"></a><span class="lineno">10781</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l10782"></a><span class="lineno">10782</span>&#160; {</div><div class="line"><a name="l10783"></a><span class="lineno">10783</span>&#160; fill_line_buffer(1); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10784"></a><span class="lineno">10784</span>&#160; }</div><div class="line"><a name="l10785"></a><span class="lineno">10785</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l10786"></a><span class="lineno">10786</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l10787"></a><span class="lineno">10787</span>&#160; {</div><div class="line"><a name="l10788"></a><span class="lineno">10788</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l10789"></a><span class="lineno">10789</span>&#160; {</div><div class="line"><a name="l10790"></a><span class="lineno">10790</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10791"></a><span class="lineno">10791</span>&#160; }</div><div class="line"><a name="l10792"></a><span class="lineno">10792</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l10793"></a><span class="lineno">10793</span>&#160; {</div><div class="line"><a name="l10794"></a><span class="lineno">10794</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10795"></a><span class="lineno">10795</span>&#160; }</div><div class="line"><a name="l10796"></a><span class="lineno">10796</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10797"></a><span class="lineno">10797</span>&#160; }</div><div class="line"><a name="l10798"></a><span class="lineno">10798</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10799"></a><span class="lineno">10799</span>&#160; {</div><div class="line"><a name="l10800"></a><span class="lineno">10800</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l10801"></a><span class="lineno">10801</span>&#160; {</div><div class="line"><a name="l10802"></a><span class="lineno">10802</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10803"></a><span class="lineno">10803</span>&#160; }</div><div class="line"><a name="l10804"></a><span class="lineno">10804</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l10805"></a><span class="lineno">10805</span>&#160; {</div><div class="line"><a name="l10806"></a><span class="lineno">10806</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10807"></a><span class="lineno">10807</span>&#160; }</div><div class="line"><a name="l10808"></a><span class="lineno">10808</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l10809"></a><span class="lineno">10809</span>&#160; {</div><div class="line"><a name="l10810"></a><span class="lineno">10810</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l10811"></a><span class="lineno">10811</span>&#160; }</div><div class="line"><a name="l10812"></a><span class="lineno">10812</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l10813"></a><span class="lineno">10813</span>&#160; }</div><div class="line"><a name="l10814"></a><span class="lineno">10814</span>&#160; }</div><div class="line"><a name="l10815"></a><span class="lineno">10815</span>&#160;</div><div class="line"><a name="l10816"></a><span class="lineno">10816</span>&#160; }</div><div class="line"><a name="l10817"></a><span class="lineno">10817</span>&#160;</div><div class="line"><a name="l10818"></a><span class="lineno">10818</span>&#160; <span class="keywordflow">return</span> last_token_type;</div><div class="line"><a name="l10819"></a><span class="lineno">10819</span>&#160; }</div><div class="line"><a name="l10820"></a><span class="lineno">10820</span>&#160;</div><div class="line"><a name="l10849"></a><span class="lineno">10849</span>&#160; <span class="keywordtype">void</span> fill_line_buffer(<span class="keywordtype">size_t</span> n = 0)</div><div class="line"><a name="l10850"></a><span class="lineno">10850</span>&#160; {</div><div class="line"><a name="l10851"></a><span class="lineno">10851</span>&#160; <span class="comment">// if line buffer is used, m_content points to its data</span></div><div class="line"><a name="l10852"></a><span class="lineno">10852</span>&#160; assert(m_line_buffer.empty()</div><div class="line"><a name="l10853"></a><span class="lineno">10853</span>&#160; or 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.data()));</div><div class="line"><a name="l10854"></a><span class="lineno">10854</span>&#160;</div><div class="line"><a name="l10855"></a><span class="lineno">10855</span>&#160; <span class="comment">// if line buffer is used, m_limit is set past the end of its data</span></div><div class="line"><a name="l10856"></a><span class="lineno">10856</span>&#160; assert(m_line_buffer.empty()</div><div class="line"><a name="l10857"></a><span class="lineno">10857</span>&#160; or m_limit == m_content + m_line_buffer.size());</div><div class="line"><a name="l10858"></a><span class="lineno">10858</span>&#160;</div><div class="line"><a name="l10859"></a><span class="lineno">10859</span>&#160; <span class="comment">// pointer relationships</span></div><div class="line"><a name="l10860"></a><span class="lineno">10860</span>&#160; assert(m_content &lt;= m_start);</div><div class="line"><a name="l10861"></a><span class="lineno">10861</span>&#160; assert(m_start &lt;= m_cursor);</div><div class="line"><a name="l10862"></a><span class="lineno">10862</span>&#160; assert(m_cursor &lt;= m_limit);</div><div class="line"><a name="l10863"></a><span class="lineno">10863</span>&#160; assert(m_marker == <span class="keyword">nullptr</span> or m_marker &lt;= m_limit);</div><div class="line"><a name="l10864"></a><span class="lineno">10864</span>&#160;</div><div class="line"><a name="l10865"></a><span class="lineno">10865</span>&#160; <span class="comment">// number of processed characters (p)</span></div><div class="line"><a name="l10866"></a><span class="lineno">10866</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> num_processed_chars = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(m_start - m_content);</div><div class="line"><a name="l10867"></a><span class="lineno">10867</span>&#160; <span class="comment">// offset for m_marker wrt. to m_start</span></div><div class="line"><a name="l10868"></a><span class="lineno">10868</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="l10869"></a><span class="lineno">10869</span>&#160; <span class="comment">// number of unprocessed characters (u)</span></div><div class="line"><a name="l10870"></a><span class="lineno">10870</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> offset_cursor = m_cursor - m_start;</div><div class="line"><a name="l10871"></a><span class="lineno">10871</span>&#160;</div><div class="line"><a name="l10872"></a><span class="lineno">10872</span>&#160; <span class="comment">// no stream is used or end of file is reached</span></div><div class="line"><a name="l10873"></a><span class="lineno">10873</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="l10874"></a><span class="lineno">10874</span>&#160; {</div><div class="line"><a name="l10875"></a><span class="lineno">10875</span>&#160; <span class="comment">// m_start may or may not be pointing into m_line_buffer at</span></div><div class="line"><a name="l10876"></a><span class="lineno">10876</span>&#160; <span class="comment">// this point. We trust the standard library to do the right</span></div><div class="line"><a name="l10877"></a><span class="lineno">10877</span>&#160; <span class="comment">// thing. See http://stackoverflow.com/q/28142011/266378</span></div><div class="line"><a name="l10878"></a><span class="lineno">10878</span>&#160; m_line_buffer.assign(m_start, m_limit);</div><div class="line"><a name="l10879"></a><span class="lineno">10879</span>&#160;</div><div class="line"><a name="l10880"></a><span class="lineno">10880</span>&#160; <span class="comment">// append n characters to make sure that there is sufficient</span></div><div class="line"><a name="l10881"></a><span class="lineno">10881</span>&#160; <span class="comment">// space between m_cursor and m_limit</span></div><div class="line"><a name="l10882"></a><span class="lineno">10882</span>&#160; m_line_buffer.append(1, <span class="stringliteral">&#39;\x00&#39;</span>);</div><div class="line"><a name="l10883"></a><span class="lineno">10883</span>&#160; <span class="keywordflow">if</span> (n &gt; 0)</div><div class="line"><a name="l10884"></a><span class="lineno">10884</span>&#160; {</div><div class="line"><a name="l10885"></a><span class="lineno">10885</span>&#160; m_line_buffer.append(n - 1, <span class="stringliteral">&#39;\x01&#39;</span>);</div><div class="line"><a name="l10886"></a><span class="lineno">10886</span>&#160; }</div><div class="line"><a name="l10887"></a><span class="lineno">10887</span>&#160; }</div><div class="line"><a name="l10888"></a><span class="lineno">10888</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10889"></a><span class="lineno">10889</span>&#160; {</div><div class="line"><a name="l10890"></a><span class="lineno">10890</span>&#160; <span class="comment">// delete processed characters from line buffer</span></div><div class="line"><a name="l10891"></a><span class="lineno">10891</span>&#160; m_line_buffer.erase(0, num_processed_chars);</div><div class="line"><a name="l10892"></a><span class="lineno">10892</span>&#160; <span class="comment">// read next line from input stream</span></div><div class="line"><a name="l10893"></a><span class="lineno">10893</span>&#160; m_line_buffer_tmp.clear();</div><div class="line"><a name="l10894"></a><span class="lineno">10894</span>&#160; std::getline(*m_stream, m_line_buffer_tmp, <span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l10895"></a><span class="lineno">10895</span>&#160;</div><div class="line"><a name="l10896"></a><span class="lineno">10896</span>&#160; <span class="comment">// add line with newline symbol to the line buffer</span></div><div class="line"><a name="l10897"></a><span class="lineno">10897</span>&#160; m_line_buffer += m_line_buffer_tmp;</div><div class="line"><a name="l10898"></a><span class="lineno">10898</span>&#160; m_line_buffer.push_back(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l10899"></a><span class="lineno">10899</span>&#160; }</div><div class="line"><a name="l10900"></a><span class="lineno">10900</span>&#160;</div><div class="line"><a name="l10901"></a><span class="lineno">10901</span>&#160; <span class="comment">// set pointers</span></div><div class="line"><a name="l10902"></a><span class="lineno">10902</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.data());</div><div class="line"><a name="l10903"></a><span class="lineno">10903</span>&#160; assert(m_content != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l10904"></a><span class="lineno">10904</span>&#160; m_start = m_content;</div><div class="line"><a name="l10905"></a><span class="lineno">10905</span>&#160; m_marker = m_start + offset_marker;</div><div class="line"><a name="l10906"></a><span class="lineno">10906</span>&#160; m_cursor = m_start + offset_cursor;</div><div class="line"><a name="l10907"></a><span class="lineno">10907</span>&#160; m_limit = m_start + m_line_buffer.size();</div><div class="line"><a name="l10908"></a><span class="lineno">10908</span>&#160; }</div><div class="line"><a name="l10909"></a><span class="lineno">10909</span>&#160;</div><div class="line"><a name="l10911"></a><span class="lineno">10911</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> get_token_string()<span class="keyword"> const</span></div><div class="line"><a name="l10912"></a><span class="lineno">10912</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10913"></a><span class="lineno">10913</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l10914"></a><span class="lineno">10914</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a>(reinterpret_cast&lt;typename string_t::const_pointer&gt;(m_start),</div><div class="line"><a name="l10915"></a><span class="lineno">10915</span>&#160; static_cast&lt;size_t&gt;(m_cursor - m_start));</div><div class="line"><a name="l10916"></a><span class="lineno">10916</span>&#160; }</div><div class="line"><a name="l10917"></a><span class="lineno">10917</span>&#160;</div><div class="line"><a name="l10975"></a><span class="lineno">10975</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> get_string()<span class="keyword"> const</span></div><div class="line"><a name="l10976"></a><span class="lineno">10976</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10977"></a><span class="lineno">10977</span>&#160; assert(m_cursor - m_start &gt;= 2);</div><div class="line"><a name="l10978"></a><span class="lineno">10978</span>&#160;</div><div class="line"><a name="l10979"></a><span class="lineno">10979</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> result;</div><div class="line"><a name="l10980"></a><span class="lineno">10980</span>&#160; result.reserve(static_cast&lt;size_t&gt;(m_cursor - m_start - 2));</div><div class="line"><a name="l10981"></a><span class="lineno">10981</span>&#160;</div><div class="line"><a name="l10982"></a><span class="lineno">10982</span>&#160; <span class="comment">// iterate the result between the quotes</span></div><div class="line"><a name="l10983"></a><span class="lineno">10983</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="l10984"></a><span class="lineno">10984</span>&#160; {</div><div class="line"><a name="l10985"></a><span class="lineno">10985</span>&#160; <span class="comment">// find next escape character</span></div><div class="line"><a name="l10986"></a><span class="lineno">10986</span>&#160; <span class="keyword">auto</span> e = std::find(i, m_cursor - 1, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l10987"></a><span class="lineno">10987</span>&#160; <span class="keywordflow">if</span> (e != i)</div><div class="line"><a name="l10988"></a><span class="lineno">10988</span>&#160; {</div><div class="line"><a name="l10989"></a><span class="lineno">10989</span>&#160; <span class="comment">// see https://github.com/nlohmann/json/issues/365#issuecomment-262874705</span></div><div class="line"><a name="l10990"></a><span class="lineno">10990</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> k = i; k &lt; e; k++)</div><div class="line"><a name="l10991"></a><span class="lineno">10991</span>&#160; {</div><div class="line"><a name="l10992"></a><span class="lineno">10992</span>&#160; result.push_back(static_cast&lt;typename string_t::value_type&gt;(*k));</div><div class="line"><a name="l10993"></a><span class="lineno">10993</span>&#160; }</div><div class="line"><a name="l10994"></a><span class="lineno">10994</span>&#160; i = e - 1; <span class="comment">// -1 because of ++i</span></div><div class="line"><a name="l10995"></a><span class="lineno">10995</span>&#160; }</div><div class="line"><a name="l10996"></a><span class="lineno">10996</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10997"></a><span class="lineno">10997</span>&#160; {</div><div class="line"><a name="l10998"></a><span class="lineno">10998</span>&#160; <span class="comment">// processing escaped character</span></div><div class="line"><a name="l10999"></a><span class="lineno">10999</span>&#160; <span class="comment">// read next character</span></div><div class="line"><a name="l11000"></a><span class="lineno">11000</span>&#160; ++i;</div><div class="line"><a name="l11001"></a><span class="lineno">11001</span>&#160;</div><div class="line"><a name="l11002"></a><span class="lineno">11002</span>&#160; <span class="keywordflow">switch</span> (*i)</div><div class="line"><a name="l11003"></a><span class="lineno">11003</span>&#160; {</div><div class="line"><a name="l11004"></a><span class="lineno">11004</span>&#160; <span class="comment">// the default escapes</span></div><div class="line"><a name="l11005"></a><span class="lineno">11005</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;t&#39;</span>:</div><div class="line"><a name="l11006"></a><span class="lineno">11006</span>&#160; {</div><div class="line"><a name="l11007"></a><span class="lineno">11007</span>&#160; result += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l11008"></a><span class="lineno">11008</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11009"></a><span class="lineno">11009</span>&#160; }</div><div class="line"><a name="l11010"></a><span class="lineno">11010</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;b&#39;</span>:</div><div class="line"><a name="l11011"></a><span class="lineno">11011</span>&#160; {</div><div class="line"><a name="l11012"></a><span class="lineno">11012</span>&#160; result += <span class="stringliteral">&quot;\b&quot;</span>;</div><div class="line"><a name="l11013"></a><span class="lineno">11013</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11014"></a><span class="lineno">11014</span>&#160; }</div><div class="line"><a name="l11015"></a><span class="lineno">11015</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;f&#39;</span>:</div><div class="line"><a name="l11016"></a><span class="lineno">11016</span>&#160; {</div><div class="line"><a name="l11017"></a><span class="lineno">11017</span>&#160; result += <span class="stringliteral">&quot;\f&quot;</span>;</div><div class="line"><a name="l11018"></a><span class="lineno">11018</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11019"></a><span class="lineno">11019</span>&#160; }</div><div class="line"><a name="l11020"></a><span class="lineno">11020</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;n&#39;</span>:</div><div class="line"><a name="l11021"></a><span class="lineno">11021</span>&#160; {</div><div class="line"><a name="l11022"></a><span class="lineno">11022</span>&#160; result += <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l11023"></a><span class="lineno">11023</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11024"></a><span class="lineno">11024</span>&#160; }</div><div class="line"><a name="l11025"></a><span class="lineno">11025</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;r&#39;</span>:</div><div class="line"><a name="l11026"></a><span class="lineno">11026</span>&#160; {</div><div class="line"><a name="l11027"></a><span class="lineno">11027</span>&#160; result += <span class="stringliteral">&quot;\r&quot;</span>;</div><div class="line"><a name="l11028"></a><span class="lineno">11028</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11029"></a><span class="lineno">11029</span>&#160; }</div><div class="line"><a name="l11030"></a><span class="lineno">11030</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l11031"></a><span class="lineno">11031</span>&#160; {</div><div class="line"><a name="l11032"></a><span class="lineno">11032</span>&#160; result += <span class="stringliteral">&quot;\\&quot;</span>;</div><div class="line"><a name="l11033"></a><span class="lineno">11033</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11034"></a><span class="lineno">11034</span>&#160; }</div><div class="line"><a name="l11035"></a><span class="lineno">11035</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;/&#39;</span>:</div><div class="line"><a name="l11036"></a><span class="lineno">11036</span>&#160; {</div><div class="line"><a name="l11037"></a><span class="lineno">11037</span>&#160; result += <span class="stringliteral">&quot;/&quot;</span>;</div><div class="line"><a name="l11038"></a><span class="lineno">11038</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11039"></a><span class="lineno">11039</span>&#160; }</div><div class="line"><a name="l11040"></a><span class="lineno">11040</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l11041"></a><span class="lineno">11041</span>&#160; {</div><div class="line"><a name="l11042"></a><span class="lineno">11042</span>&#160; result += <span class="stringliteral">&quot;\&quot;&quot;</span>;</div><div class="line"><a name="l11043"></a><span class="lineno">11043</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11044"></a><span class="lineno">11044</span>&#160; }</div><div class="line"><a name="l11045"></a><span class="lineno">11045</span>&#160;</div><div class="line"><a name="l11046"></a><span class="lineno">11046</span>&#160; <span class="comment">// unicode</span></div><div class="line"><a name="l11047"></a><span class="lineno">11047</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;u&#39;</span>:</div><div class="line"><a name="l11048"></a><span class="lineno">11048</span>&#160; {</div><div class="line"><a name="l11049"></a><span class="lineno">11049</span>&#160; <span class="comment">// get code xxxx from uxxxx</span></div><div class="line"><a name="l11050"></a><span class="lineno">11050</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="l11051"></a><span class="lineno">11051</span>&#160; 4).c_str(), <span class="keyword">nullptr</span>, 16);</div><div class="line"><a name="l11052"></a><span class="lineno">11052</span>&#160;</div><div class="line"><a name="l11053"></a><span class="lineno">11053</span>&#160; <span class="comment">// check if codepoint is a high surrogate</span></div><div class="line"><a name="l11054"></a><span class="lineno">11054</span>&#160; <span class="keywordflow">if</span> (codepoint &gt;= 0xD800 and codepoint &lt;= 0xDBFF)</div><div class="line"><a name="l11055"></a><span class="lineno">11055</span>&#160; {</div><div class="line"><a name="l11056"></a><span class="lineno">11056</span>&#160; <span class="comment">// make sure there is a subsequent unicode</span></div><div class="line"><a name="l11057"></a><span class="lineno">11057</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="l11058"></a><span class="lineno">11058</span>&#160; {</div><div class="line"><a name="l11059"></a><span class="lineno">11059</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;missing low surrogate&quot;</span>));</div><div class="line"><a name="l11060"></a><span class="lineno">11060</span>&#160; }</div><div class="line"><a name="l11061"></a><span class="lineno">11061</span>&#160;</div><div class="line"><a name="l11062"></a><span class="lineno">11062</span>&#160; <span class="comment">// get code yyyy from uxxxx\uyyyy</span></div><div class="line"><a name="l11063"></a><span class="lineno">11063</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="l11064"></a><span class="lineno">11064</span>&#160; (i + 7), 4).c_str(), <span class="keyword">nullptr</span>, 16);</div><div class="line"><a name="l11065"></a><span class="lineno">11065</span>&#160; result += to_unicode(codepoint, codepoint2);</div><div class="line"><a name="l11066"></a><span class="lineno">11066</span>&#160; <span class="comment">// skip the next 10 characters (xxxx\uyyyy)</span></div><div class="line"><a name="l11067"></a><span class="lineno">11067</span>&#160; i += 10;</div><div class="line"><a name="l11068"></a><span class="lineno">11068</span>&#160; }</div><div class="line"><a name="l11069"></a><span class="lineno">11069</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &gt;= 0xDC00 and codepoint &lt;= 0xDFFF)</div><div class="line"><a name="l11070"></a><span class="lineno">11070</span>&#160; {</div><div class="line"><a name="l11071"></a><span class="lineno">11071</span>&#160; <span class="comment">// we found a lone low surrogate</span></div><div class="line"><a name="l11072"></a><span class="lineno">11072</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;missing high surrogate&quot;</span>));</div><div class="line"><a name="l11073"></a><span class="lineno">11073</span>&#160; }</div><div class="line"><a name="l11074"></a><span class="lineno">11074</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11075"></a><span class="lineno">11075</span>&#160; {</div><div class="line"><a name="l11076"></a><span class="lineno">11076</span>&#160; <span class="comment">// add unicode character(s)</span></div><div class="line"><a name="l11077"></a><span class="lineno">11077</span>&#160; result += to_unicode(codepoint);</div><div class="line"><a name="l11078"></a><span class="lineno">11078</span>&#160; <span class="comment">// skip the next four characters (xxxx)</span></div><div class="line"><a name="l11079"></a><span class="lineno">11079</span>&#160; i += 4;</div><div class="line"><a name="l11080"></a><span class="lineno">11080</span>&#160; }</div><div class="line"><a name="l11081"></a><span class="lineno">11081</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11082"></a><span class="lineno">11082</span>&#160; }</div><div class="line"><a name="l11083"></a><span class="lineno">11083</span>&#160; }</div><div class="line"><a name="l11084"></a><span class="lineno">11084</span>&#160; }</div><div class="line"><a name="l11085"></a><span class="lineno">11085</span>&#160; }</div><div class="line"><a name="l11086"></a><span class="lineno">11086</span>&#160;</div><div class="line"><a name="l11087"></a><span class="lineno">11087</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11088"></a><span class="lineno">11088</span>&#160; }</div><div class="line"><a name="l11089"></a><span class="lineno">11089</span>&#160;</div><div class="line"><a name="l11090"></a><span class="lineno">11090</span>&#160;</div><div class="line"><a name="l11100"></a><span class="lineno"><a class="line" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum.html">11100</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum.html">strtonum</a></div><div class="line"><a name="l11101"></a><span class="lineno">11101</span>&#160; {</div><div class="line"><a name="l11102"></a><span class="lineno">11102</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11103"></a><span class="lineno"><a class="line" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_ae065098e24b08ea79a359950190006d8.html#ae065098e24b08ea79a359950190006d8">11103</a></span>&#160; <a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_ae065098e24b08ea79a359950190006d8.html#ae065098e24b08ea79a359950190006d8">strtonum</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* start, <span class="keyword">const</span> <span class="keywordtype">char</span>* end)</div><div class="line"><a name="l11104"></a><span class="lineno">11104</span>&#160; : m_start(start), m_end(end)</div><div class="line"><a name="l11105"></a><span class="lineno">11105</span>&#160; {}</div><div class="line"><a name="l11106"></a><span class="lineno">11106</span>&#160;</div><div class="line"><a name="l11113"></a><span class="lineno">11113</span>&#160; template&lt;typename T, typename = typename std::enable_if&lt;std::is_arithmetic&lt;T&gt;::value&gt;::type&gt;</div><div class="line"><a name="l11114"></a><span class="lineno"><a class="line" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">11114</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">to</a>(T&amp; val)<span class="keyword"> const</span></div><div class="line"><a name="l11115"></a><span class="lineno">11115</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11116"></a><span class="lineno">11116</span>&#160; <span class="keywordflow">return</span> parse(val, std::is_integral&lt;T&gt;());</div><div class="line"><a name="l11117"></a><span class="lineno">11117</span>&#160; }</div><div class="line"><a name="l11118"></a><span class="lineno">11118</span>&#160;</div><div class="line"><a name="l11119"></a><span class="lineno">11119</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11120"></a><span class="lineno">11120</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> m_start = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11121"></a><span class="lineno">11121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> m_end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11122"></a><span class="lineno">11122</span>&#160;</div><div class="line"><a name="l11123"></a><span class="lineno">11123</span>&#160; <span class="comment">// floating-point conversion</span></div><div class="line"><a name="l11124"></a><span class="lineno">11124</span>&#160;</div><div class="line"><a name="l11125"></a><span class="lineno">11125</span>&#160; <span class="comment">// overloaded wrappers for strtod/strtof/strtold</span></div><div class="line"><a name="l11126"></a><span class="lineno">11126</span>&#160; <span class="comment">// that will be called from parse&lt;floating_point_t&gt;</span></div><div class="line"><a name="l11127"></a><span class="lineno">11127</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> strtof(<span class="keywordtype">float</span>&amp; f, <span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keywordtype">char</span>** endptr)</div><div class="line"><a name="l11128"></a><span class="lineno">11128</span>&#160; {</div><div class="line"><a name="l11129"></a><span class="lineno">11129</span>&#160; f = std::strtof(str, endptr);</div><div class="line"><a name="l11130"></a><span class="lineno">11130</span>&#160; }</div><div class="line"><a name="l11131"></a><span class="lineno">11131</span>&#160;</div><div class="line"><a name="l11132"></a><span class="lineno">11132</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> strtof(<span class="keywordtype">double</span>&amp; f, <span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keywordtype">char</span>** endptr)</div><div class="line"><a name="l11133"></a><span class="lineno">11133</span>&#160; {</div><div class="line"><a name="l11134"></a><span class="lineno">11134</span>&#160; f = std::strtod(str, endptr);</div><div class="line"><a name="l11135"></a><span class="lineno">11135</span>&#160; }</div><div class="line"><a name="l11136"></a><span class="lineno">11136</span>&#160;</div><div class="line"><a name="l11137"></a><span class="lineno">11137</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> strtof(<span class="keywordtype">long</span> <span class="keywordtype">double</span>&amp; f, <span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keywordtype">char</span>** endptr)</div><div class="line"><a name="l11138"></a><span class="lineno">11138</span>&#160; {</div><div class="line"><a name="l11139"></a><span class="lineno">11139</span>&#160; f = std::strtold(str, endptr);</div><div class="line"><a name="l11140"></a><span class="lineno">11140</span>&#160; }</div><div class="line"><a name="l11141"></a><span class="lineno">11141</span>&#160;</div><div class="line"><a name="l11142"></a><span class="lineno">11142</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l11143"></a><span class="lineno">11143</span>&#160; <span class="keywordtype">bool</span> parse(T&amp; value, <span class="comment">/*is_integral=*/</span>std::false_type)<span class="keyword"> const</span></div><div class="line"><a name="l11144"></a><span class="lineno">11144</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11145"></a><span class="lineno">11145</span>&#160; <span class="comment">// replace decimal separator with locale-specific version,</span></div><div class="line"><a name="l11146"></a><span class="lineno">11146</span>&#160; <span class="comment">// when necessary; data will point to either the original</span></div><div class="line"><a name="l11147"></a><span class="lineno">11147</span>&#160; <span class="comment">// string, or buf, or tempstr containing the fixed string.</span></div><div class="line"><a name="l11148"></a><span class="lineno">11148</span>&#160; std::string tempstr;</div><div class="line"><a name="l11149"></a><span class="lineno">11149</span>&#160; std::array&lt;char, 64&gt; buf;</div><div class="line"><a name="l11150"></a><span class="lineno">11150</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(m_end - m_start);</div><div class="line"><a name="l11151"></a><span class="lineno">11151</span>&#160;</div><div class="line"><a name="l11152"></a><span class="lineno">11152</span>&#160; <span class="comment">// lexer will reject empty numbers</span></div><div class="line"><a name="l11153"></a><span class="lineno">11153</span>&#160; assert(len &gt; 0);</div><div class="line"><a name="l11154"></a><span class="lineno">11154</span>&#160;</div><div class="line"><a name="l11155"></a><span class="lineno">11155</span>&#160; <span class="comment">// since dealing with strtod family of functions, we&#39;re</span></div><div class="line"><a name="l11156"></a><span class="lineno">11156</span>&#160; <span class="comment">// getting the decimal point char from the C locale facilities</span></div><div class="line"><a name="l11157"></a><span class="lineno">11157</span>&#160; <span class="comment">// instead of C++&#39;s numpunct facet of the current std::locale</span></div><div class="line"><a name="l11158"></a><span class="lineno">11158</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> loc = localeconv();</div><div class="line"><a name="l11159"></a><span class="lineno">11159</span>&#160; assert(loc != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l11160"></a><span class="lineno">11160</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> decimal_point_char = (loc-&gt;decimal_point == <span class="keyword">nullptr</span>) ? <span class="charliteral">&#39;.&#39;</span> : loc-&gt;decimal_point[0];</div><div class="line"><a name="l11161"></a><span class="lineno">11161</span>&#160;</div><div class="line"><a name="l11162"></a><span class="lineno">11162</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* data = m_start;</div><div class="line"><a name="l11163"></a><span class="lineno">11163</span>&#160;</div><div class="line"><a name="l11164"></a><span class="lineno">11164</span>&#160; if (decimal_point_char != <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l11165"></a><span class="lineno">11165</span>&#160; {</div><div class="line"><a name="l11166"></a><span class="lineno">11166</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> ds_pos = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(std::find(m_start, m_end, <span class="charliteral">&#39;.&#39;</span>) - m_start);</div><div class="line"><a name="l11167"></a><span class="lineno">11167</span>&#160;</div><div class="line"><a name="l11168"></a><span class="lineno">11168</span>&#160; <span class="keywordflow">if</span> (ds_pos != len)</div><div class="line"><a name="l11169"></a><span class="lineno">11169</span>&#160; {</div><div class="line"><a name="l11170"></a><span class="lineno">11170</span>&#160; <span class="comment">// copy the data into the local buffer or tempstr, if</span></div><div class="line"><a name="l11171"></a><span class="lineno">11171</span>&#160; <span class="comment">// buffer is too small; replace decimal separator, and</span></div><div class="line"><a name="l11172"></a><span class="lineno">11172</span>&#160; <span class="comment">// update data to point to the modified bytes</span></div><div class="line"><a name="l11173"></a><span class="lineno">11173</span>&#160; <span class="keywordflow">if</span> ((len + 1) &lt; buf.size())</div><div class="line"><a name="l11174"></a><span class="lineno">11174</span>&#160; {</div><div class="line"><a name="l11175"></a><span class="lineno">11175</span>&#160; std::copy(m_start, m_end, buf.begin());</div><div class="line"><a name="l11176"></a><span class="lineno">11176</span>&#160; buf[len] = 0;</div><div class="line"><a name="l11177"></a><span class="lineno">11177</span>&#160; buf[ds_pos] = decimal_point_char;</div><div class="line"><a name="l11178"></a><span class="lineno">11178</span>&#160; data = buf.data();</div><div class="line"><a name="l11179"></a><span class="lineno">11179</span>&#160; }</div><div class="line"><a name="l11180"></a><span class="lineno">11180</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11181"></a><span class="lineno">11181</span>&#160; {</div><div class="line"><a name="l11182"></a><span class="lineno">11182</span>&#160; tempstr.assign(m_start, m_end);</div><div class="line"><a name="l11183"></a><span class="lineno">11183</span>&#160; tempstr[ds_pos] = decimal_point_char;</div><div class="line"><a name="l11184"></a><span class="lineno">11184</span>&#160; data = tempstr.c_str();</div><div class="line"><a name="l11185"></a><span class="lineno">11185</span>&#160; }</div><div class="line"><a name="l11186"></a><span class="lineno">11186</span>&#160; }</div><div class="line"><a name="l11187"></a><span class="lineno">11187</span>&#160; }</div><div class="line"><a name="l11188"></a><span class="lineno">11188</span>&#160;</div><div class="line"><a name="l11189"></a><span class="lineno">11189</span>&#160; <span class="keywordtype">char</span>* endptr = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11190"></a><span class="lineno">11190</span>&#160; value = 0;</div><div class="line"><a name="l11191"></a><span class="lineno">11191</span>&#160; <span class="comment">// this calls appropriate overload depending on T</span></div><div class="line"><a name="l11192"></a><span class="lineno">11192</span>&#160; strtof(value, data, &amp;endptr);</div><div class="line"><a name="l11193"></a><span class="lineno">11193</span>&#160;</div><div class="line"><a name="l11194"></a><span class="lineno">11194</span>&#160; <span class="comment">// parsing was successful iff strtof parsed exactly the number</span></div><div class="line"><a name="l11195"></a><span class="lineno">11195</span>&#160; <span class="comment">// of characters determined by the lexer (len)</span></div><div class="line"><a name="l11196"></a><span class="lineno">11196</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> ok = (endptr == (data + len));</div><div class="line"><a name="l11197"></a><span class="lineno">11197</span>&#160;</div><div class="line"><a name="l11198"></a><span class="lineno">11198</span>&#160; <span class="keywordflow">if</span> (ok and (value == static_cast&lt;T&gt;(0.0)) and (*data == <span class="charliteral">&#39;-&#39;</span>))</div><div class="line"><a name="l11199"></a><span class="lineno">11199</span>&#160; {</div><div class="line"><a name="l11200"></a><span class="lineno">11200</span>&#160; <span class="comment">// some implementations forget to negate the zero</span></div><div class="line"><a name="l11201"></a><span class="lineno">11201</span>&#160; value = -0.0;</div><div class="line"><a name="l11202"></a><span class="lineno">11202</span>&#160; }</div><div class="line"><a name="l11203"></a><span class="lineno">11203</span>&#160;</div><div class="line"><a name="l11204"></a><span class="lineno">11204</span>&#160; <span class="keywordflow">return</span> ok;</div><div class="line"><a name="l11205"></a><span class="lineno">11205</span>&#160; }</div><div class="line"><a name="l11206"></a><span class="lineno">11206</span>&#160;</div><div class="line"><a name="l11207"></a><span class="lineno">11207</span>&#160; <span class="comment">// integral conversion</span></div><div class="line"><a name="l11208"></a><span class="lineno">11208</span>&#160;</div><div class="line"><a name="l11209"></a><span class="lineno">11209</span>&#160; <span class="keywordtype">signed</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> parse_integral(<span class="keywordtype">char</span>** endptr, <span class="comment">/*is_signed*/</span>std::true_type)<span class="keyword"> const</span></div><div class="line"><a name="l11210"></a><span class="lineno">11210</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11211"></a><span class="lineno">11211</span>&#160; <span class="keywordflow">return</span> std::strtoll(m_start, endptr, 10);</div><div class="line"><a name="l11212"></a><span class="lineno">11212</span>&#160; }</div><div class="line"><a name="l11213"></a><span class="lineno">11213</span>&#160;</div><div class="line"><a name="l11214"></a><span class="lineno">11214</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> parse_integral(<span class="keywordtype">char</span>** endptr, <span class="comment">/*is_signed*/</span>std::false_type)<span class="keyword"> const</span></div><div class="line"><a name="l11215"></a><span class="lineno">11215</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11216"></a><span class="lineno">11216</span>&#160; <span class="keywordflow">return</span> std::strtoull(m_start, endptr, 10);</div><div class="line"><a name="l11217"></a><span class="lineno">11217</span>&#160; }</div><div class="line"><a name="l11218"></a><span class="lineno">11218</span>&#160;</div><div class="line"><a name="l11219"></a><span class="lineno">11219</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l11220"></a><span class="lineno">11220</span>&#160; <span class="keywordtype">bool</span> parse(T&amp; value, <span class="comment">/*is_integral=*/</span>std::true_type)<span class="keyword"> const</span></div><div class="line"><a name="l11221"></a><span class="lineno">11221</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11222"></a><span class="lineno">11222</span>&#160; <span class="keywordtype">char</span>* endptr = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11223"></a><span class="lineno">11223</span>&#160; errno = 0; <span class="comment">// these are thread-local</span></div><div class="line"><a name="l11224"></a><span class="lineno">11224</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> x = parse_integral(&amp;endptr, std::is_signed&lt;T&gt;());</div><div class="line"><a name="l11225"></a><span class="lineno">11225</span>&#160;</div><div class="line"><a name="l11226"></a><span class="lineno">11226</span>&#160; <span class="comment">// called right overload?</span></div><div class="line"><a name="l11227"></a><span class="lineno">11227</span>&#160; static_assert(std::is_signed&lt;T&gt;() == std::is_signed&lt;decltype(x)&gt;(), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l11228"></a><span class="lineno">11228</span>&#160;</div><div class="line"><a name="l11229"></a><span class="lineno">11229</span>&#160; value = <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(x);</div><div class="line"><a name="l11230"></a><span class="lineno">11230</span>&#160;</div><div class="line"><a name="l11231"></a><span class="lineno">11231</span>&#160; <span class="keywordflow">return</span> (x == <span class="keyword">static_cast&lt;</span>decltype(x)<span class="keyword">&gt;</span>(value)) <span class="comment">// x fits into destination T</span></div><div class="line"><a name="l11232"></a><span class="lineno">11232</span>&#160; and (x &lt; 0) == (value &lt; 0) <span class="comment">// preserved sign</span></div><div class="line"><a name="l11233"></a><span class="lineno">11233</span>&#160; <span class="comment">//and ((x != 0) or is_integral()) // strto[u]ll did nto fail</span></div><div class="line"><a name="l11234"></a><span class="lineno">11234</span>&#160; and (errno == 0) <span class="comment">// strto[u]ll did not overflow</span></div><div class="line"><a name="l11235"></a><span class="lineno">11235</span>&#160; and (m_start &lt; m_end) <span class="comment">// token was not empty</span></div><div class="line"><a name="l11236"></a><span class="lineno">11236</span>&#160; and (endptr == m_end); <span class="comment">// parsed entire token exactly</span></div><div class="line"><a name="l11237"></a><span class="lineno">11237</span>&#160; }</div><div class="line"><a name="l11238"></a><span class="lineno">11238</span>&#160; };</div><div class="line"><a name="l11239"></a><span class="lineno">11239</span>&#160;</div><div class="line"><a name="l11259"></a><span class="lineno">11259</span>&#160; <span class="keywordtype">bool</span> get_number(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; result, <span class="keyword">const</span> token_type token)<span class="keyword"> const</span></div><div class="line"><a name="l11260"></a><span class="lineno">11260</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11261"></a><span class="lineno">11261</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l11262"></a><span class="lineno">11262</span>&#160; assert(m_start &lt; m_cursor);</div><div class="line"><a name="l11263"></a><span class="lineno">11263</span>&#160; assert((token == token_type::value_unsigned) or</div><div class="line"><a name="l11264"></a><span class="lineno">11264</span>&#160; (token == token_type::value_integer) or</div><div class="line"><a name="l11265"></a><span class="lineno">11265</span>&#160; (token == token_type::value_float));</div><div class="line"><a name="l11266"></a><span class="lineno">11266</span>&#160;</div><div class="line"><a name="l11267"></a><span class="lineno">11267</span>&#160; <a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum.html">strtonum</a> num_converter(reinterpret_cast&lt;const char*&gt;(m_start),</div><div class="line"><a name="l11268"></a><span class="lineno">11268</span>&#160; reinterpret_cast&lt;const char*&gt;(m_cursor));</div><div class="line"><a name="l11269"></a><span class="lineno">11269</span>&#160;</div><div class="line"><a name="l11270"></a><span class="lineno">11270</span>&#160; <span class="keywordflow">switch</span> (token)</div><div class="line"><a name="l11271"></a><span class="lineno">11271</span>&#160; {</div><div class="line"><a name="l11272"></a><span class="lineno">11272</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_unsigned:</div><div class="line"><a name="l11273"></a><span class="lineno">11273</span>&#160; {</div><div class="line"><a name="l11274"></a><span class="lineno">11274</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">number_unsigned_t</a> val;</div><div class="line"><a name="l11275"></a><span class="lineno">11275</span>&#160; <span class="keywordflow">if</span> (num_converter.<a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">to</a>(val))</div><div class="line"><a name="l11276"></a><span class="lineno">11276</span>&#160; {</div><div class="line"><a name="l11277"></a><span class="lineno">11277</span>&#160; <span class="comment">// parsing successful</span></div><div class="line"><a name="l11278"></a><span class="lineno">11278</span>&#160; result.m_type = value_t::number_unsigned;</div><div class="line"><a name="l11279"></a><span class="lineno">11279</span>&#160; result.m_value = val;</div><div class="line"><a name="l11280"></a><span class="lineno">11280</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l11281"></a><span class="lineno">11281</span>&#160; }</div><div class="line"><a name="l11282"></a><span class="lineno">11282</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11283"></a><span class="lineno">11283</span>&#160; }</div><div class="line"><a name="l11284"></a><span class="lineno">11284</span>&#160;</div><div class="line"><a name="l11285"></a><span class="lineno">11285</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_integer:</div><div class="line"><a name="l11286"></a><span class="lineno">11286</span>&#160; {</div><div class="line"><a name="l11287"></a><span class="lineno">11287</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">number_integer_t</a> val;</div><div class="line"><a name="l11288"></a><span class="lineno">11288</span>&#160; <span class="keywordflow">if</span> (num_converter.<a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">to</a>(val))</div><div class="line"><a name="l11289"></a><span class="lineno">11289</span>&#160; {</div><div class="line"><a name="l11290"></a><span class="lineno">11290</span>&#160; <span class="comment">// parsing successful</span></div><div class="line"><a name="l11291"></a><span class="lineno">11291</span>&#160; result.m_type = value_t::number_integer;</div><div class="line"><a name="l11292"></a><span class="lineno">11292</span>&#160; result.m_value = val;</div><div class="line"><a name="l11293"></a><span class="lineno">11293</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l11294"></a><span class="lineno">11294</span>&#160; }</div><div class="line"><a name="l11295"></a><span class="lineno">11295</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11296"></a><span class="lineno">11296</span>&#160; }</div><div class="line"><a name="l11297"></a><span class="lineno">11297</span>&#160;</div><div class="line"><a name="l11298"></a><span class="lineno">11298</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11299"></a><span class="lineno">11299</span>&#160; {</div><div class="line"><a name="l11300"></a><span class="lineno">11300</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11301"></a><span class="lineno">11301</span>&#160; }</div><div class="line"><a name="l11302"></a><span class="lineno">11302</span>&#160; }</div><div class="line"><a name="l11303"></a><span class="lineno">11303</span>&#160;</div><div class="line"><a name="l11304"></a><span class="lineno">11304</span>&#160; <span class="comment">// parse float (either explicitly or because a previous conversion</span></div><div class="line"><a name="l11305"></a><span class="lineno">11305</span>&#160; <span class="comment">// failed)</span></div><div class="line"><a name="l11306"></a><span class="lineno">11306</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">number_float_t</a> val;</div><div class="line"><a name="l11307"></a><span class="lineno">11307</span>&#160; <span class="keywordflow">if</span> (num_converter.<a class="code" href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">to</a>(val))</div><div class="line"><a name="l11308"></a><span class="lineno">11308</span>&#160; {</div><div class="line"><a name="l11309"></a><span class="lineno">11309</span>&#160; <span class="comment">// parsing successful</span></div><div class="line"><a name="l11310"></a><span class="lineno">11310</span>&#160; result.m_type = value_t::number_float;</div><div class="line"><a name="l11311"></a><span class="lineno">11311</span>&#160; result.m_value = val;</div><div class="line"><a name="l11312"></a><span class="lineno">11312</span>&#160;</div><div class="line"><a name="l11313"></a><span class="lineno">11313</span>&#160; <span class="comment">// replace infinity and NAN by null</span></div><div class="line"><a name="l11314"></a><span class="lineno">11314</span>&#160; <span class="keywordflow">if</span> (not std::isfinite(result.m_value.number_float))</div><div class="line"><a name="l11315"></a><span class="lineno">11315</span>&#160; {</div><div class="line"><a name="l11316"></a><span class="lineno">11316</span>&#160; result.m_type = value_t::null;</div><div class="line"><a name="l11317"></a><span class="lineno">11317</span>&#160; result.m_value = basic_json::json_value();</div><div class="line"><a name="l11318"></a><span class="lineno">11318</span>&#160; }</div><div class="line"><a name="l11319"></a><span class="lineno">11319</span>&#160;</div><div class="line"><a name="l11320"></a><span class="lineno">11320</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l11321"></a><span class="lineno">11321</span>&#160; }</div><div class="line"><a name="l11322"></a><span class="lineno">11322</span>&#160;</div><div class="line"><a name="l11323"></a><span class="lineno">11323</span>&#160; <span class="comment">// couldn&#39;t parse number in any format</span></div><div class="line"><a name="l11324"></a><span class="lineno">11324</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l11325"></a><span class="lineno">11325</span>&#160; }</div><div class="line"><a name="l11326"></a><span class="lineno">11326</span>&#160;</div><div class="line"><a name="l11327"></a><span class="lineno">11327</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11329"></a><span class="lineno">11329</span>&#160; std::istream* m_stream = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11331"></a><span class="lineno">11331</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> m_line_buffer {};</div><div class="line"><a name="l11333"></a><span class="lineno">11333</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">string_t</a> m_line_buffer_tmp {};</div><div class="line"><a name="l11335"></a><span class="lineno">11335</span>&#160; <span class="keyword">const</span> lexer_char_t* m_content = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11337"></a><span class="lineno">11337</span>&#160; <span class="keyword">const</span> lexer_char_t* m_start = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11339"></a><span class="lineno">11339</span>&#160; <span class="keyword">const</span> lexer_char_t* m_marker = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11341"></a><span class="lineno">11341</span>&#160; <span class="keyword">const</span> lexer_char_t* m_cursor = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11343"></a><span class="lineno">11343</span>&#160; <span class="keyword">const</span> lexer_char_t* m_limit = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11345"></a><span class="lineno">11345</span>&#160; token_type last_token_type = token_type::end_of_input;</div><div class="line"><a name="l11346"></a><span class="lineno">11346</span>&#160; };</div><div class="line"><a name="l11347"></a><span class="lineno">11347</span>&#160;</div><div class="line"><a name="l11353"></a><span class="lineno">11353</span>&#160; <span class="keyword">class </span>parser</div><div class="line"><a name="l11354"></a><span class="lineno">11354</span>&#160; {</div><div class="line"><a name="l11355"></a><span class="lineno">11355</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11357"></a><span class="lineno">11357</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_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l11358"></a><span class="lineno">11358</span>&#160; : callback(cb),</div><div class="line"><a name="l11359"></a><span class="lineno">11359</span>&#160; m_lexer(reinterpret_cast&lt;const typename lexer::lexer_char_t*&gt;(buff), std::strlen(buff))</div><div class="line"><a name="l11360"></a><span class="lineno">11360</span>&#160; {}</div><div class="line"><a name="l11361"></a><span class="lineno">11361</span>&#160;</div><div class="line"><a name="l11363"></a><span class="lineno">11363</span>&#160; parser(std::istream&amp; is, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l11364"></a><span class="lineno">11364</span>&#160; : callback(cb), m_lexer(is)</div><div class="line"><a name="l11365"></a><span class="lineno">11365</span>&#160; {}</div><div class="line"><a name="l11366"></a><span class="lineno">11366</span>&#160;</div><div class="line"><a name="l11368"></a><span class="lineno">11368</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="l11369"></a><span class="lineno">11369</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="l11370"></a><span class="lineno">11370</span>&#160; , <span class="keywordtype">int</span>&gt;::type</div><div class="line"><a name="l11371"></a><span class="lineno">11371</span>&#160; = 0&gt;</div><div class="line"><a name="l11372"></a><span class="lineno">11372</span>&#160; parser(IteratorType first, IteratorType last, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l11373"></a><span class="lineno">11373</span>&#160; : callback(cb),</div><div class="line"><a name="l11374"></a><span class="lineno">11374</span>&#160; m_lexer(reinterpret_cast&lt;const typename lexer::lexer_char_t*&gt;(&amp;(*first)),</div><div class="line"><a name="l11375"></a><span class="lineno">11375</span>&#160; static_cast&lt;size_t&gt;(std::distance(first, last)))</div><div class="line"><a name="l11376"></a><span class="lineno">11376</span>&#160; {}</div><div class="line"><a name="l11377"></a><span class="lineno">11377</span>&#160;</div><div class="line"><a name="l11379"></a><span class="lineno">11379</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> parse()</div><div class="line"><a name="l11380"></a><span class="lineno">11380</span>&#160; {</div><div class="line"><a name="l11381"></a><span class="lineno">11381</span>&#160; <span class="comment">// read first token</span></div><div class="line"><a name="l11382"></a><span class="lineno">11382</span>&#160; get_token();</div><div class="line"><a name="l11383"></a><span class="lineno">11383</span>&#160;</div><div class="line"><a name="l11384"></a><span class="lineno">11384</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="l11385"></a><span class="lineno">11385</span>&#160; result.assert_invariant();</div><div class="line"><a name="l11386"></a><span class="lineno">11386</span>&#160;</div><div class="line"><a name="l11387"></a><span class="lineno">11387</span>&#160; expect(lexer::token_type::end_of_input);</div><div class="line"><a name="l11388"></a><span class="lineno">11388</span>&#160;</div><div class="line"><a name="l11389"></a><span class="lineno">11389</span>&#160; <span class="comment">// return parser result and replace it with null in case the</span></div><div class="line"><a name="l11390"></a><span class="lineno">11390</span>&#160; <span class="comment">// top-level value was discarded by the callback function</span></div><div class="line"><a name="l11391"></a><span class="lineno">11391</span>&#160; <span class="keywordflow">return</span> result.<a class="code" href="classnlohmann_1_1basic__json_aabe623bc8304c2ba92d96d91f390fab4.html#aabe623bc8304c2ba92d96d91f390fab4">is_discarded</a>() ? <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>() : std::move(result);</div><div class="line"><a name="l11392"></a><span class="lineno">11392</span>&#160; }</div><div class="line"><a name="l11393"></a><span class="lineno">11393</span>&#160;</div><div class="line"><a name="l11394"></a><span class="lineno">11394</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11396"></a><span class="lineno">11396</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="l11397"></a><span class="lineno">11397</span>&#160; {</div><div class="line"><a name="l11398"></a><span class="lineno">11398</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="l11399"></a><span class="lineno">11399</span>&#160;</div><div class="line"><a name="l11400"></a><span class="lineno">11400</span>&#160; <span class="keywordflow">switch</span> (last_token)</div><div class="line"><a name="l11401"></a><span class="lineno">11401</span>&#160; {</div><div class="line"><a name="l11402"></a><span class="lineno">11402</span>&#160; <span class="keywordflow">case</span> lexer::token_type::begin_object:</div><div class="line"><a name="l11403"></a><span class="lineno">11403</span>&#160; {</div><div class="line"><a name="l11404"></a><span class="lineno">11404</span>&#160; <span class="keywordflow">if</span> (keep and (not callback</div><div class="line"><a name="l11405"></a><span class="lineno">11405</span>&#160; or ((keep = callback(depth++, parse_event_t::object_start, result)) != 0)))</div><div class="line"><a name="l11406"></a><span class="lineno">11406</span>&#160; {</div><div class="line"><a name="l11407"></a><span class="lineno">11407</span>&#160; <span class="comment">// explicitly set result to object to cope with {}</span></div><div class="line"><a name="l11408"></a><span class="lineno">11408</span>&#160; result.m_type = value_t::object;</div><div class="line"><a name="l11409"></a><span class="lineno">11409</span>&#160; result.m_value = value_t::object;</div><div class="line"><a name="l11410"></a><span class="lineno">11410</span>&#160; }</div><div class="line"><a name="l11411"></a><span class="lineno">11411</span>&#160;</div><div class="line"><a name="l11412"></a><span class="lineno">11412</span>&#160; <span class="comment">// read next token</span></div><div class="line"><a name="l11413"></a><span class="lineno">11413</span>&#160; get_token();</div><div class="line"><a name="l11414"></a><span class="lineno">11414</span>&#160;</div><div class="line"><a name="l11415"></a><span class="lineno">11415</span>&#160; <span class="comment">// closing } -&gt; we are done</span></div><div class="line"><a name="l11416"></a><span class="lineno">11416</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::end_object)</div><div class="line"><a name="l11417"></a><span class="lineno">11417</span>&#160; {</div><div class="line"><a name="l11418"></a><span class="lineno">11418</span>&#160; get_token();</div><div class="line"><a name="l11419"></a><span class="lineno">11419</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="l11420"></a><span class="lineno">11420</span>&#160; {</div><div class="line"><a name="l11421"></a><span class="lineno">11421</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l11422"></a><span class="lineno">11422</span>&#160; }</div><div class="line"><a name="l11423"></a><span class="lineno">11423</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11424"></a><span class="lineno">11424</span>&#160; }</div><div class="line"><a name="l11425"></a><span class="lineno">11425</span>&#160;</div><div class="line"><a name="l11426"></a><span class="lineno">11426</span>&#160; <span class="comment">// no comma is expected here</span></div><div class="line"><a name="l11427"></a><span class="lineno">11427</span>&#160; unexpect(lexer::token_type::value_separator);</div><div class="line"><a name="l11428"></a><span class="lineno">11428</span>&#160;</div><div class="line"><a name="l11429"></a><span class="lineno">11429</span>&#160; <span class="comment">// otherwise: parse key-value pairs</span></div><div class="line"><a name="l11430"></a><span class="lineno">11430</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l11431"></a><span class="lineno">11431</span>&#160; {</div><div class="line"><a name="l11432"></a><span class="lineno">11432</span>&#160; <span class="comment">// ugly, but could be fixed with loop reorganization</span></div><div class="line"><a name="l11433"></a><span class="lineno">11433</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::value_separator)</div><div class="line"><a name="l11434"></a><span class="lineno">11434</span>&#160; {</div><div class="line"><a name="l11435"></a><span class="lineno">11435</span>&#160; get_token();</div><div class="line"><a name="l11436"></a><span class="lineno">11436</span>&#160; }</div><div class="line"><a name="l11437"></a><span class="lineno">11437</span>&#160;</div><div class="line"><a name="l11438"></a><span class="lineno">11438</span>&#160; <span class="comment">// store key</span></div><div class="line"><a name="l11439"></a><span class="lineno">11439</span>&#160; expect(lexer::token_type::value_string);</div><div class="line"><a name="l11440"></a><span class="lineno">11440</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = m_lexer.get_string();</div><div class="line"><a name="l11441"></a><span class="lineno">11441</span>&#160;</div><div class="line"><a name="l11442"></a><span class="lineno">11442</span>&#160; <span class="keywordtype">bool</span> keep_tag = <span class="keyword">false</span>;</div><div class="line"><a name="l11443"></a><span class="lineno">11443</span>&#160; <span class="keywordflow">if</span> (keep)</div><div class="line"><a name="l11444"></a><span class="lineno">11444</span>&#160; {</div><div class="line"><a name="l11445"></a><span class="lineno">11445</span>&#160; <span class="keywordflow">if</span> (callback)</div><div class="line"><a name="l11446"></a><span class="lineno">11446</span>&#160; {</div><div class="line"><a name="l11447"></a><span class="lineno">11447</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> k(key);</div><div class="line"><a name="l11448"></a><span class="lineno">11448</span>&#160; keep_tag = callback(depth, parse_event_t::key, k);</div><div class="line"><a name="l11449"></a><span class="lineno">11449</span>&#160; }</div><div class="line"><a name="l11450"></a><span class="lineno">11450</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11451"></a><span class="lineno">11451</span>&#160; {</div><div class="line"><a name="l11452"></a><span class="lineno">11452</span>&#160; keep_tag = <span class="keyword">true</span>;</div><div class="line"><a name="l11453"></a><span class="lineno">11453</span>&#160; }</div><div class="line"><a name="l11454"></a><span class="lineno">11454</span>&#160; }</div><div class="line"><a name="l11455"></a><span class="lineno">11455</span>&#160;</div><div class="line"><a name="l11456"></a><span class="lineno">11456</span>&#160; <span class="comment">// parse separator (:)</span></div><div class="line"><a name="l11457"></a><span class="lineno">11457</span>&#160; get_token();</div><div class="line"><a name="l11458"></a><span class="lineno">11458</span>&#160; expect(lexer::token_type::name_separator);</div><div class="line"><a name="l11459"></a><span class="lineno">11459</span>&#160;</div><div class="line"><a name="l11460"></a><span class="lineno">11460</span>&#160; <span class="comment">// parse and add value</span></div><div class="line"><a name="l11461"></a><span class="lineno">11461</span>&#160; get_token();</div><div class="line"><a name="l11462"></a><span class="lineno">11462</span>&#160; <span class="keyword">auto</span> value = parse_internal(keep);</div><div class="line"><a name="l11463"></a><span class="lineno">11463</span>&#160; <span class="keywordflow">if</span> (keep and keep_tag and not value.is_discarded())</div><div class="line"><a name="l11464"></a><span class="lineno">11464</span>&#160; {</div><div class="line"><a name="l11465"></a><span class="lineno">11465</span>&#160; result[key] = std::move(value);</div><div class="line"><a name="l11466"></a><span class="lineno">11466</span>&#160; }</div><div class="line"><a name="l11467"></a><span class="lineno">11467</span>&#160; }</div><div class="line"><a name="l11468"></a><span class="lineno">11468</span>&#160; <span class="keywordflow">while</span> (last_token == lexer::token_type::value_separator);</div><div class="line"><a name="l11469"></a><span class="lineno">11469</span>&#160;</div><div class="line"><a name="l11470"></a><span class="lineno">11470</span>&#160; <span class="comment">// closing }</span></div><div class="line"><a name="l11471"></a><span class="lineno">11471</span>&#160; expect(lexer::token_type::end_object);</div><div class="line"><a name="l11472"></a><span class="lineno">11472</span>&#160; get_token();</div><div class="line"><a name="l11473"></a><span class="lineno">11473</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="l11474"></a><span class="lineno">11474</span>&#160; {</div><div class="line"><a name="l11475"></a><span class="lineno">11475</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l11476"></a><span class="lineno">11476</span>&#160; }</div><div class="line"><a name="l11477"></a><span class="lineno">11477</span>&#160;</div><div class="line"><a name="l11478"></a><span class="lineno">11478</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11479"></a><span class="lineno">11479</span>&#160; }</div><div class="line"><a name="l11480"></a><span class="lineno">11480</span>&#160;</div><div class="line"><a name="l11481"></a><span class="lineno">11481</span>&#160; <span class="keywordflow">case</span> lexer::token_type::begin_array:</div><div class="line"><a name="l11482"></a><span class="lineno">11482</span>&#160; {</div><div class="line"><a name="l11483"></a><span class="lineno">11483</span>&#160; <span class="keywordflow">if</span> (keep and (not callback</div><div class="line"><a name="l11484"></a><span class="lineno">11484</span>&#160; or ((keep = callback(depth++, parse_event_t::array_start, result)) != 0)))</div><div class="line"><a name="l11485"></a><span class="lineno">11485</span>&#160; {</div><div class="line"><a name="l11486"></a><span class="lineno">11486</span>&#160; <span class="comment">// explicitly set result to object to cope with []</span></div><div class="line"><a name="l11487"></a><span class="lineno">11487</span>&#160; result.m_type = value_t::array;</div><div class="line"><a name="l11488"></a><span class="lineno">11488</span>&#160; result.m_value = value_t::array;</div><div class="line"><a name="l11489"></a><span class="lineno">11489</span>&#160; }</div><div class="line"><a name="l11490"></a><span class="lineno">11490</span>&#160;</div><div class="line"><a name="l11491"></a><span class="lineno">11491</span>&#160; <span class="comment">// read next token</span></div><div class="line"><a name="l11492"></a><span class="lineno">11492</span>&#160; get_token();</div><div class="line"><a name="l11493"></a><span class="lineno">11493</span>&#160;</div><div class="line"><a name="l11494"></a><span class="lineno">11494</span>&#160; <span class="comment">// closing ] -&gt; we are done</span></div><div class="line"><a name="l11495"></a><span class="lineno">11495</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::end_array)</div><div class="line"><a name="l11496"></a><span class="lineno">11496</span>&#160; {</div><div class="line"><a name="l11497"></a><span class="lineno">11497</span>&#160; get_token();</div><div class="line"><a name="l11498"></a><span class="lineno">11498</span>&#160; <span class="keywordflow">if</span> (callback and not callback(--depth, parse_event_t::array_end, result))</div><div class="line"><a name="l11499"></a><span class="lineno">11499</span>&#160; {</div><div class="line"><a name="l11500"></a><span class="lineno">11500</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l11501"></a><span class="lineno">11501</span>&#160; }</div><div class="line"><a name="l11502"></a><span class="lineno">11502</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11503"></a><span class="lineno">11503</span>&#160; }</div><div class="line"><a name="l11504"></a><span class="lineno">11504</span>&#160;</div><div class="line"><a name="l11505"></a><span class="lineno">11505</span>&#160; <span class="comment">// no comma is expected here</span></div><div class="line"><a name="l11506"></a><span class="lineno">11506</span>&#160; unexpect(lexer::token_type::value_separator);</div><div class="line"><a name="l11507"></a><span class="lineno">11507</span>&#160;</div><div class="line"><a name="l11508"></a><span class="lineno">11508</span>&#160; <span class="comment">// otherwise: parse values</span></div><div class="line"><a name="l11509"></a><span class="lineno">11509</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l11510"></a><span class="lineno">11510</span>&#160; {</div><div class="line"><a name="l11511"></a><span class="lineno">11511</span>&#160; <span class="comment">// ugly, but could be fixed with loop reorganization</span></div><div class="line"><a name="l11512"></a><span class="lineno">11512</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::value_separator)</div><div class="line"><a name="l11513"></a><span class="lineno">11513</span>&#160; {</div><div class="line"><a name="l11514"></a><span class="lineno">11514</span>&#160; get_token();</div><div class="line"><a name="l11515"></a><span class="lineno">11515</span>&#160; }</div><div class="line"><a name="l11516"></a><span class="lineno">11516</span>&#160;</div><div class="line"><a name="l11517"></a><span class="lineno">11517</span>&#160; <span class="comment">// parse value</span></div><div class="line"><a name="l11518"></a><span class="lineno">11518</span>&#160; <span class="keyword">auto</span> value = parse_internal(keep);</div><div class="line"><a name="l11519"></a><span class="lineno">11519</span>&#160; <span class="keywordflow">if</span> (keep and not value.is_discarded())</div><div class="line"><a name="l11520"></a><span class="lineno">11520</span>&#160; {</div><div class="line"><a name="l11521"></a><span class="lineno">11521</span>&#160; result.push_back(std::move(value));</div><div class="line"><a name="l11522"></a><span class="lineno">11522</span>&#160; }</div><div class="line"><a name="l11523"></a><span class="lineno">11523</span>&#160; }</div><div class="line"><a name="l11524"></a><span class="lineno">11524</span>&#160; <span class="keywordflow">while</span> (last_token == lexer::token_type::value_separator);</div><div class="line"><a name="l11525"></a><span class="lineno">11525</span>&#160;</div><div class="line"><a name="l11526"></a><span class="lineno">11526</span>&#160; <span class="comment">// closing ]</span></div><div class="line"><a name="l11527"></a><span class="lineno">11527</span>&#160; expect(lexer::token_type::end_array);</div><div class="line"><a name="l11528"></a><span class="lineno">11528</span>&#160; get_token();</div><div class="line"><a name="l11529"></a><span class="lineno">11529</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="l11530"></a><span class="lineno">11530</span>&#160; {</div><div class="line"><a name="l11531"></a><span class="lineno">11531</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l11532"></a><span class="lineno">11532</span>&#160; }</div><div class="line"><a name="l11533"></a><span class="lineno">11533</span>&#160;</div><div class="line"><a name="l11534"></a><span class="lineno">11534</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11535"></a><span class="lineno">11535</span>&#160; }</div><div class="line"><a name="l11536"></a><span class="lineno">11536</span>&#160;</div><div class="line"><a name="l11537"></a><span class="lineno">11537</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_null:</div><div class="line"><a name="l11538"></a><span class="lineno">11538</span>&#160; {</div><div class="line"><a name="l11539"></a><span class="lineno">11539</span>&#160; get_token();</div><div class="line"><a name="l11540"></a><span class="lineno">11540</span>&#160; result.m_type = value_t::null;</div><div class="line"><a name="l11541"></a><span class="lineno">11541</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11542"></a><span class="lineno">11542</span>&#160; }</div><div class="line"><a name="l11543"></a><span class="lineno">11543</span>&#160;</div><div class="line"><a name="l11544"></a><span class="lineno">11544</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_string:</div><div class="line"><a name="l11545"></a><span class="lineno">11545</span>&#160; {</div><div class="line"><a name="l11546"></a><span class="lineno">11546</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> s = m_lexer.get_string();</div><div class="line"><a name="l11547"></a><span class="lineno">11547</span>&#160; get_token();</div><div class="line"><a name="l11548"></a><span class="lineno">11548</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(s);</div><div class="line"><a name="l11549"></a><span class="lineno">11549</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11550"></a><span class="lineno">11550</span>&#160; }</div><div class="line"><a name="l11551"></a><span class="lineno">11551</span>&#160;</div><div class="line"><a name="l11552"></a><span class="lineno">11552</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_true:</div><div class="line"><a name="l11553"></a><span class="lineno">11553</span>&#160; {</div><div class="line"><a name="l11554"></a><span class="lineno">11554</span>&#160; get_token();</div><div class="line"><a name="l11555"></a><span class="lineno">11555</span>&#160; result.m_type = value_t::boolean;</div><div class="line"><a name="l11556"></a><span class="lineno">11556</span>&#160; result.m_value = <span class="keyword">true</span>;</div><div class="line"><a name="l11557"></a><span class="lineno">11557</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11558"></a><span class="lineno">11558</span>&#160; }</div><div class="line"><a name="l11559"></a><span class="lineno">11559</span>&#160;</div><div class="line"><a name="l11560"></a><span class="lineno">11560</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_false:</div><div class="line"><a name="l11561"></a><span class="lineno">11561</span>&#160; {</div><div class="line"><a name="l11562"></a><span class="lineno">11562</span>&#160; get_token();</div><div class="line"><a name="l11563"></a><span class="lineno">11563</span>&#160; result.m_type = value_t::boolean;</div><div class="line"><a name="l11564"></a><span class="lineno">11564</span>&#160; result.m_value = <span class="keyword">false</span>;</div><div class="line"><a name="l11565"></a><span class="lineno">11565</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11566"></a><span class="lineno">11566</span>&#160; }</div><div class="line"><a name="l11567"></a><span class="lineno">11567</span>&#160;</div><div class="line"><a name="l11568"></a><span class="lineno">11568</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_unsigned:</div><div class="line"><a name="l11569"></a><span class="lineno">11569</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_integer:</div><div class="line"><a name="l11570"></a><span class="lineno">11570</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_float:</div><div class="line"><a name="l11571"></a><span class="lineno">11571</span>&#160; {</div><div class="line"><a name="l11572"></a><span class="lineno">11572</span>&#160; m_lexer.get_number(result, last_token);</div><div class="line"><a name="l11573"></a><span class="lineno">11573</span>&#160; get_token();</div><div class="line"><a name="l11574"></a><span class="lineno">11574</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11575"></a><span class="lineno">11575</span>&#160; }</div><div class="line"><a name="l11576"></a><span class="lineno">11576</span>&#160;</div><div class="line"><a name="l11577"></a><span class="lineno">11577</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11578"></a><span class="lineno">11578</span>&#160; {</div><div class="line"><a name="l11579"></a><span class="lineno">11579</span>&#160; <span class="comment">// the last token was unexpected</span></div><div class="line"><a name="l11580"></a><span class="lineno">11580</span>&#160; unexpect(last_token);</div><div class="line"><a name="l11581"></a><span class="lineno">11581</span>&#160; }</div><div class="line"><a name="l11582"></a><span class="lineno">11582</span>&#160; }</div><div class="line"><a name="l11583"></a><span class="lineno">11583</span>&#160;</div><div class="line"><a name="l11584"></a><span class="lineno">11584</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="l11585"></a><span class="lineno">11585</span>&#160; {</div><div class="line"><a name="l11586"></a><span class="lineno">11586</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l11587"></a><span class="lineno">11587</span>&#160; }</div><div class="line"><a name="l11588"></a><span class="lineno">11588</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11589"></a><span class="lineno">11589</span>&#160; }</div><div class="line"><a name="l11590"></a><span class="lineno">11590</span>&#160;</div><div class="line"><a name="l11592"></a><span class="lineno">11592</span>&#160; <span class="keyword">typename</span> lexer::token_type get_token()</div><div class="line"><a name="l11593"></a><span class="lineno">11593</span>&#160; {</div><div class="line"><a name="l11594"></a><span class="lineno">11594</span>&#160; last_token = m_lexer.scan();</div><div class="line"><a name="l11595"></a><span class="lineno">11595</span>&#160; <span class="keywordflow">return</span> last_token;</div><div class="line"><a name="l11596"></a><span class="lineno">11596</span>&#160; }</div><div class="line"><a name="l11597"></a><span class="lineno">11597</span>&#160;</div><div class="line"><a name="l11598"></a><span class="lineno">11598</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="l11599"></a><span class="lineno">11599</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11600"></a><span class="lineno">11600</span>&#160; <span class="keywordflow">if</span> (t != last_token)</div><div class="line"><a name="l11601"></a><span class="lineno">11601</span>&#160; {</div><div class="line"><a name="l11602"></a><span class="lineno">11602</span>&#160; std::string error_msg = <span class="stringliteral">&quot;parse error - unexpected &quot;</span>;</div><div class="line"><a name="l11603"></a><span class="lineno">11603</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="l11604"></a><span class="lineno">11604</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span>) :</div><div class="line"><a name="l11605"></a><span class="lineno">11605</span>&#160; lexer::token_type_name(last_token));</div><div class="line"><a name="l11606"></a><span class="lineno">11606</span>&#160; error_msg += <span class="stringliteral">&quot;; expected &quot;</span> + lexer::token_type_name(t);</div><div class="line"><a name="l11607"></a><span class="lineno">11607</span>&#160; JSON_THROW(std::invalid_argument(error_msg));</div><div class="line"><a name="l11608"></a><span class="lineno">11608</span>&#160; }</div><div class="line"><a name="l11609"></a><span class="lineno">11609</span>&#160; }</div><div class="line"><a name="l11610"></a><span class="lineno">11610</span>&#160;</div><div class="line"><a name="l11611"></a><span class="lineno">11611</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="l11612"></a><span class="lineno">11612</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11613"></a><span class="lineno">11613</span>&#160; <span class="keywordflow">if</span> (t == last_token)</div><div class="line"><a name="l11614"></a><span class="lineno">11614</span>&#160; {</div><div class="line"><a name="l11615"></a><span class="lineno">11615</span>&#160; std::string error_msg = <span class="stringliteral">&quot;parse error - unexpected &quot;</span>;</div><div class="line"><a name="l11616"></a><span class="lineno">11616</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="l11617"></a><span class="lineno">11617</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span>) :</div><div class="line"><a name="l11618"></a><span class="lineno">11618</span>&#160; lexer::token_type_name(last_token));</div><div class="line"><a name="l11619"></a><span class="lineno">11619</span>&#160; JSON_THROW(std::invalid_argument(error_msg));</div><div class="line"><a name="l11620"></a><span class="lineno">11620</span>&#160; }</div><div class="line"><a name="l11621"></a><span class="lineno">11621</span>&#160; }</div><div class="line"><a name="l11622"></a><span class="lineno">11622</span>&#160;</div><div class="line"><a name="l11623"></a><span class="lineno">11623</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11625"></a><span class="lineno">11625</span>&#160; <span class="keywordtype">int</span> depth = 0;</div><div class="line"><a name="l11627"></a><span class="lineno">11627</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">parser_callback_t</a> callback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11629"></a><span class="lineno">11629</span>&#160; <span class="keyword">typename</span> lexer::token_type last_token = lexer::token_type::uninitialized;</div><div class="line"><a name="l11631"></a><span class="lineno">11631</span>&#160; lexer m_lexer;</div><div class="line"><a name="l11632"></a><span class="lineno">11632</span>&#160; };</div><div class="line"><a name="l11633"></a><span class="lineno">11633</span>&#160;</div><div class="line"><a name="l11634"></a><span class="lineno">11634</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11646"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer.html">11646</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="l11647"></a><span class="lineno">11647</span>&#160; {</div><div class="line"><a name="l11649"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745">11649</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="l11650"></a><span class="lineno">11650</span>&#160;</div><div class="line"><a name="l11651"></a><span class="lineno">11651</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11674"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_abaa66b0d30811b8a8670a673c686b75a.html#abaa66b0d30811b8a8670a673c686b75a">11674</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer_abaa66b0d30811b8a8670a673c686b75a.html#abaa66b0d30811b8a8670a673c686b75a">json_pointer</a>(<span class="keyword">const</span> std::string&amp; s = <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l11675"></a><span class="lineno">11675</span>&#160; : reference_tokens(split(s))</div><div class="line"><a name="l11676"></a><span class="lineno">11676</span>&#160; {}</div><div class="line"><a name="l11677"></a><span class="lineno">11677</span>&#160;</div><div class="line"><a name="l11693"></a><span class="lineno">11693</span>&#160; std::string to_string() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l11694"></a><span class="lineno">11694</span>&#160; {</div><div class="line"><a name="l11695"></a><span class="lineno">11695</span>&#160; <span class="keywordflow">return</span> std::accumulate(reference_tokens.begin(),</div><div class="line"><a name="l11696"></a><span class="lineno">11696</span>&#160; reference_tokens.end(), std::string{},</div><div class="line"><a name="l11697"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_adf63cdde9493796d8aa61bd948984b6d.html#adf63cdde9493796d8aa61bd948984b6d">11697</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="l11698"></a><span class="lineno">11698</span>&#160; {</div><div class="line"><a name="l11699"></a><span class="lineno">11699</span>&#160; <span class="keywordflow">return</span> a + <span class="stringliteral">&quot;/&quot;</span> + escape(b);</div><div class="line"><a name="l11700"></a><span class="lineno">11700</span>&#160; });</div><div class="line"><a name="l11701"></a><span class="lineno">11701</span>&#160; }</div><div class="line"><a name="l11702"></a><span class="lineno">11702</span>&#160;</div><div class="line"><a name="l11704"></a><span class="lineno">11704</span>&#160; <span class="keyword">operator</span> std::string()<span class="keyword"> const</span></div><div class="line"><a name="l11705"></a><span class="lineno">11705</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11706"></a><span class="lineno">11706</span>&#160; <span class="keywordflow">return</span> to_string();</div><div class="line"><a name="l11707"></a><span class="lineno">11707</span>&#160; }</div><div class="line"><a name="l11708"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_aa2583b66886218c1a035e3e507a5f931.html#aa2583b66886218c1a035e3e507a5f931">11708</a></span>&#160;</div><div class="line"><a name="l11709"></a><span class="lineno">11709</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11711"></a><span class="lineno">11711</span>&#160; std::string pop_back()</div><div class="line"><a name="l11712"></a><span class="lineno">11712</span>&#160; {</div><div class="line"><a name="l11713"></a><span class="lineno">11713</span>&#160; <span class="keywordflow">if</span> (is_root())</div><div class="line"><a name="l11714"></a><span class="lineno">11714</span>&#160; {</div><div class="line"><a name="l11715"></a><span class="lineno">11715</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;JSON pointer has no parent&quot;</span>));</div><div class="line"><a name="l11716"></a><span class="lineno">11716</span>&#160; }</div><div class="line"><a name="l11717"></a><span class="lineno">11717</span>&#160;</div><div class="line"><a name="l11718"></a><span class="lineno">11718</span>&#160; <span class="keyword">auto</span> last = reference_tokens.back();</div><div class="line"><a name="l11719"></a><span class="lineno">11719</span>&#160; reference_tokens.pop_back();</div><div class="line"><a name="l11720"></a><span class="lineno">11720</span>&#160; <span class="keywordflow">return</span> last;</div><div class="line"><a name="l11721"></a><span class="lineno">11721</span>&#160; }</div><div class="line"><a name="l11722"></a><span class="lineno">11722</span>&#160;</div><div class="line"><a name="l11724"></a><span class="lineno">11724</span>&#160; <span class="keywordtype">bool</span> is_root()<span class="keyword"> const</span></div><div class="line"><a name="l11725"></a><span class="lineno">11725</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11726"></a><span class="lineno">11726</span>&#160; <span class="keywordflow">return</span> reference_tokens.empty();</div><div class="line"><a name="l11727"></a><span class="lineno">11727</span>&#160; }</div><div class="line"><a name="l11728"></a><span class="lineno">11728</span>&#160;</div><div class="line"><a name="l11729"></a><span class="lineno">11729</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="l11730"></a><span class="lineno">11730</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11731"></a><span class="lineno">11731</span>&#160; <span class="keywordflow">if</span> (is_root())</div><div class="line"><a name="l11732"></a><span class="lineno">11732</span>&#160; {</div><div class="line"><a name="l11733"></a><span class="lineno">11733</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;JSON pointer has no parent&quot;</span>));</div><div class="line"><a name="l11734"></a><span class="lineno">11734</span>&#160; }</div><div class="line"><a name="l11735"></a><span class="lineno">11735</span>&#160;</div><div class="line"><a name="l11736"></a><span class="lineno">11736</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="l11737"></a><span class="lineno">11737</span>&#160; result.reference_tokens = {reference_tokens[0]};</div><div class="line"><a name="l11738"></a><span class="lineno">11738</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l11739"></a><span class="lineno">11739</span>&#160; }</div><div class="line"><a name="l11740"></a><span class="lineno">11740</span>&#160;</div><div class="line"><a name="l11746"></a><span class="lineno">11746</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="l11747"></a><span class="lineno">11747</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11748"></a><span class="lineno">11748</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">pointer</a> result = &amp;j;</div><div class="line"><a name="l11749"></a><span class="lineno">11749</span>&#160;</div><div class="line"><a name="l11750"></a><span class="lineno">11750</span>&#160; <span class="comment">// in case no reference tokens exist, return a reference to the</span></div><div class="line"><a name="l11751"></a><span class="lineno">11751</span>&#160; <span class="comment">// JSON value j which will be overwritten by a primitive value</span></div><div class="line"><a name="l11752"></a><span class="lineno">11752</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="l11753"></a><span class="lineno">11753</span>&#160; {</div><div class="line"><a name="l11754"></a><span class="lineno">11754</span>&#160; <span class="keywordflow">switch</span> (result-&gt;m_type)</div><div class="line"><a name="l11755"></a><span class="lineno">11755</span>&#160; {</div><div class="line"><a name="l11756"></a><span class="lineno">11756</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l11757"></a><span class="lineno">11757</span>&#160; {</div><div class="line"><a name="l11758"></a><span class="lineno">11758</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;0&quot;</span>)</div><div class="line"><a name="l11759"></a><span class="lineno">11759</span>&#160; {</div><div class="line"><a name="l11760"></a><span class="lineno">11760</span>&#160; <span class="comment">// start a new array if reference token is 0</span></div><div class="line"><a name="l11761"></a><span class="lineno">11761</span>&#160; result = &amp;result-&gt;operator[](0);</div><div class="line"><a name="l11762"></a><span class="lineno">11762</span>&#160; }</div><div class="line"><a name="l11763"></a><span class="lineno">11763</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11764"></a><span class="lineno">11764</span>&#160; {</div><div class="line"><a name="l11765"></a><span class="lineno">11765</span>&#160; <span class="comment">// start a new object otherwise</span></div><div class="line"><a name="l11766"></a><span class="lineno">11766</span>&#160; result = &amp;result-&gt;operator[](reference_token);</div><div class="line"><a name="l11767"></a><span class="lineno">11767</span>&#160; }</div><div class="line"><a name="l11768"></a><span class="lineno">11768</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11769"></a><span class="lineno">11769</span>&#160; }</div><div class="line"><a name="l11770"></a><span class="lineno">11770</span>&#160;</div><div class="line"><a name="l11771"></a><span class="lineno">11771</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l11772"></a><span class="lineno">11772</span>&#160; {</div><div class="line"><a name="l11773"></a><span class="lineno">11773</span>&#160; <span class="comment">// create an entry in the object</span></div><div class="line"><a name="l11774"></a><span class="lineno">11774</span>&#160; result = &amp;result-&gt;operator[](reference_token);</div><div class="line"><a name="l11775"></a><span class="lineno">11775</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11776"></a><span class="lineno">11776</span>&#160; }</div><div class="line"><a name="l11777"></a><span class="lineno">11777</span>&#160;</div><div class="line"><a name="l11778"></a><span class="lineno">11778</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l11779"></a><span class="lineno">11779</span>&#160; {</div><div class="line"><a name="l11780"></a><span class="lineno">11780</span>&#160; <span class="comment">// create an entry in the array</span></div><div class="line"><a name="l11781"></a><span class="lineno">11781</span>&#160; result = &amp;result-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l11782"></a><span class="lineno">11782</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11783"></a><span class="lineno">11783</span>&#160; }</div><div class="line"><a name="l11784"></a><span class="lineno">11784</span>&#160;</div><div class="line"><a name="l11785"></a><span class="lineno">11785</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l11786"></a><span class="lineno">11786</span>&#160;<span class="comment"> The following code is only reached if there exists a</span></div><div class="line"><a name="l11787"></a><span class="lineno">11787</span>&#160;<span class="comment"> reference token _and_ the current value is primitive. In</span></div><div class="line"><a name="l11788"></a><span class="lineno">11788</span>&#160;<span class="comment"> this case, we have an error situation, because primitive</span></div><div class="line"><a name="l11789"></a><span class="lineno">11789</span>&#160;<span class="comment"> values may only occur as single value; that is, with an</span></div><div class="line"><a name="l11790"></a><span class="lineno">11790</span>&#160;<span class="comment"> empty list of reference tokens.</span></div><div class="line"><a name="l11791"></a><span class="lineno">11791</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l11792"></a><span class="lineno">11792</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11793"></a><span class="lineno">11793</span>&#160; {</div><div class="line"><a name="l11794"></a><span class="lineno">11794</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;invalid value to unflatten&quot;</span>));</div><div class="line"><a name="l11795"></a><span class="lineno">11795</span>&#160; }</div><div class="line"><a name="l11796"></a><span class="lineno">11796</span>&#160; }</div><div class="line"><a name="l11797"></a><span class="lineno">11797</span>&#160; }</div><div class="line"><a name="l11798"></a><span class="lineno">11798</span>&#160;</div><div class="line"><a name="l11799"></a><span class="lineno">11799</span>&#160; <span class="keywordflow">return</span> *result;</div><div class="line"><a name="l11800"></a><span class="lineno">11800</span>&#160; }</div><div class="line"><a name="l11801"></a><span class="lineno">11801</span>&#160;</div><div class="line"><a name="l11821"></a><span class="lineno">11821</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> get_unchecked(<a class="code" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l11822"></a><span class="lineno">11822</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11823"></a><span class="lineno">11823</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="l11824"></a><span class="lineno">11824</span>&#160; {</div><div class="line"><a name="l11825"></a><span class="lineno">11825</span>&#160; <span class="comment">// convert null values to arrays or objects before continuing</span></div><div class="line"><a name="l11826"></a><span class="lineno">11826</span>&#160; <span class="keywordflow">if</span> (ptr-&gt;m_type == value_t::null)</div><div class="line"><a name="l11827"></a><span class="lineno">11827</span>&#160; {</div><div class="line"><a name="l11828"></a><span class="lineno">11828</span>&#160; <span class="comment">// check if reference token is a number</span></div><div class="line"><a name="l11829"></a><span class="lineno">11829</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="l11830"></a><span class="lineno">11830</span>&#160; reference_token.end(),</div><div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160; [](<span class="keyword">const</span> <span class="keywordtype">char</span> x)</div><div class="line"><a name="l11832"></a><span class="lineno">11832</span>&#160; {</div><div class="line"><a name="l11833"></a><span class="lineno">11833</span>&#160; <span class="keywordflow">return</span> std::isdigit(x);</div><div class="line"><a name="l11834"></a><span class="lineno">11834</span>&#160; });</div><div class="line"><a name="l11835"></a><span class="lineno">11835</span>&#160;</div><div class="line"><a name="l11836"></a><span class="lineno">11836</span>&#160; <span class="comment">// change value to array for numbers or &quot;-&quot; or to object</span></div><div class="line"><a name="l11837"></a><span class="lineno">11837</span>&#160; <span class="comment">// otherwise</span></div><div class="line"><a name="l11838"></a><span class="lineno">11838</span>&#160; <span class="keywordflow">if</span> (nums or reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l11839"></a><span class="lineno">11839</span>&#160; {</div><div class="line"><a name="l11840"></a><span class="lineno">11840</span>&#160; *ptr = value_t::array;</div><div class="line"><a name="l11841"></a><span class="lineno">11841</span>&#160; }</div><div class="line"><a name="l11842"></a><span class="lineno">11842</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160; {</div><div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160; *ptr = value_t::object;</div><div class="line"><a name="l11845"></a><span class="lineno">11845</span>&#160; }</div><div class="line"><a name="l11846"></a><span class="lineno">11846</span>&#160; }</div><div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160;</div><div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l11849"></a><span class="lineno">11849</span>&#160; {</div><div class="line"><a name="l11850"></a><span class="lineno">11850</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l11851"></a><span class="lineno">11851</span>&#160; {</div><div class="line"><a name="l11852"></a><span class="lineno">11852</span>&#160; <span class="comment">// use unchecked object access</span></div><div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160; ptr = &amp;ptr-&gt;operator[](reference_token);</div><div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11855"></a><span class="lineno">11855</span>&#160; }</div><div class="line"><a name="l11856"></a><span class="lineno">11856</span>&#160;</div><div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l11858"></a><span class="lineno">11858</span>&#160; {</div><div class="line"><a name="l11859"></a><span class="lineno">11859</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l11860"></a><span class="lineno">11860</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="l11861"></a><span class="lineno">11861</span>&#160; {</div><div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>));</div><div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160; }</div><div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160;</div><div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160; {</div><div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160; <span class="comment">// explicitly treat &quot;-&quot; as index beyond the end</span></div><div class="line"><a name="l11868"></a><span class="lineno">11868</span>&#160; ptr = &amp;ptr-&gt;operator[](ptr-&gt;m_value.array-&gt;size());</div><div class="line"><a name="l11869"></a><span class="lineno">11869</span>&#160; }</div><div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160; {</div><div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160; <span class="comment">// convert array index to number; unchecked access</span></div><div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160; ptr = &amp;ptr-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160; }</div><div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160; }</div><div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;</div><div class="line"><a name="l11878"></a><span class="lineno">11878</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11879"></a><span class="lineno">11879</span>&#160; {</div><div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160; JSON_THROW(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="l11881"></a><span class="lineno">11881</span>&#160; }</div><div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160; }</div><div class="line"><a name="l11883"></a><span class="lineno">11883</span>&#160; }</div><div class="line"><a name="l11884"></a><span class="lineno">11884</span>&#160;</div><div class="line"><a name="l11885"></a><span class="lineno">11885</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l11886"></a><span class="lineno">11886</span>&#160; }</div><div class="line"><a name="l11887"></a><span class="lineno">11887</span>&#160;</div><div class="line"><a name="l11888"></a><span class="lineno">11888</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> get_checked(<a class="code" href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11890"></a><span class="lineno">11890</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="l11891"></a><span class="lineno">11891</span>&#160; {</div><div class="line"><a name="l11892"></a><span class="lineno">11892</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l11893"></a><span class="lineno">11893</span>&#160; {</div><div class="line"><a name="l11894"></a><span class="lineno">11894</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l11895"></a><span class="lineno">11895</span>&#160; {</div><div class="line"><a name="l11896"></a><span class="lineno">11896</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l11897"></a><span class="lineno">11897</span>&#160; ptr = &amp;ptr-&gt;<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(reference_token);</div><div class="line"><a name="l11898"></a><span class="lineno">11898</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11899"></a><span class="lineno">11899</span>&#160; }</div><div class="line"><a name="l11900"></a><span class="lineno">11900</span>&#160;</div><div class="line"><a name="l11901"></a><span class="lineno">11901</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l11902"></a><span class="lineno">11902</span>&#160; {</div><div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l11904"></a><span class="lineno">11904</span>&#160; {</div><div class="line"><a name="l11905"></a><span class="lineno">11905</span>&#160; <span class="comment">// &quot;-&quot; always fails the range check</span></div><div class="line"><a name="l11906"></a><span class="lineno">11906</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l11907"></a><span class="lineno">11907</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l11908"></a><span class="lineno">11908</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>));</div><div class="line"><a name="l11909"></a><span class="lineno">11909</span>&#160; }</div><div class="line"><a name="l11910"></a><span class="lineno">11910</span>&#160;</div><div class="line"><a name="l11911"></a><span class="lineno">11911</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l11912"></a><span class="lineno">11912</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="l11913"></a><span class="lineno">11913</span>&#160; {</div><div class="line"><a name="l11914"></a><span class="lineno">11914</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>));</div><div class="line"><a name="l11915"></a><span class="lineno">11915</span>&#160; }</div><div class="line"><a name="l11916"></a><span class="lineno">11916</span>&#160;</div><div class="line"><a name="l11917"></a><span class="lineno">11917</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l11918"></a><span class="lineno">11918</span>&#160; ptr = &amp;ptr-&gt;at(static_cast&lt;size_type&gt;(std::stoi(reference_token)));</div><div class="line"><a name="l11919"></a><span class="lineno">11919</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11920"></a><span class="lineno">11920</span>&#160; }</div><div class="line"><a name="l11921"></a><span class="lineno">11921</span>&#160;</div><div class="line"><a name="l11922"></a><span class="lineno">11922</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11923"></a><span class="lineno">11923</span>&#160; {</div><div class="line"><a name="l11924"></a><span class="lineno">11924</span>&#160; JSON_THROW(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="l11925"></a><span class="lineno">11925</span>&#160; }</div><div class="line"><a name="l11926"></a><span class="lineno">11926</span>&#160; }</div><div class="line"><a name="l11927"></a><span class="lineno">11927</span>&#160; }</div><div class="line"><a name="l11928"></a><span class="lineno">11928</span>&#160;</div><div class="line"><a name="l11929"></a><span class="lineno">11929</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160; }</div><div class="line"><a name="l11931"></a><span class="lineno">11931</span>&#160;</div><div class="line"><a name="l11940"></a><span class="lineno">11940</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> get_unchecked(<a class="code" href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58">const_pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l11941"></a><span class="lineno">11941</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11942"></a><span class="lineno">11942</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="l11943"></a><span class="lineno">11943</span>&#160; {</div><div class="line"><a name="l11944"></a><span class="lineno">11944</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l11945"></a><span class="lineno">11945</span>&#160; {</div><div class="line"><a name="l11946"></a><span class="lineno">11946</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l11947"></a><span class="lineno">11947</span>&#160; {</div><div class="line"><a name="l11948"></a><span class="lineno">11948</span>&#160; <span class="comment">// use unchecked object access</span></div><div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160; ptr = &amp;ptr-&gt;operator[](reference_token);</div><div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11951"></a><span class="lineno">11951</span>&#160; }</div><div class="line"><a name="l11952"></a><span class="lineno">11952</span>&#160;</div><div class="line"><a name="l11953"></a><span class="lineno">11953</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l11954"></a><span class="lineno">11954</span>&#160; {</div><div class="line"><a name="l11955"></a><span class="lineno">11955</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l11956"></a><span class="lineno">11956</span>&#160; {</div><div class="line"><a name="l11957"></a><span class="lineno">11957</span>&#160; <span class="comment">// &quot;-&quot; cannot be used for const access</span></div><div class="line"><a name="l11958"></a><span class="lineno">11958</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>));</div><div class="line"><a name="l11961"></a><span class="lineno">11961</span>&#160; }</div><div class="line"><a name="l11962"></a><span class="lineno">11962</span>&#160;</div><div class="line"><a name="l11963"></a><span class="lineno">11963</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l11964"></a><span class="lineno">11964</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="l11965"></a><span class="lineno">11965</span>&#160; {</div><div class="line"><a name="l11966"></a><span class="lineno">11966</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>));</div><div class="line"><a name="l11967"></a><span class="lineno">11967</span>&#160; }</div><div class="line"><a name="l11968"></a><span class="lineno">11968</span>&#160;</div><div class="line"><a name="l11969"></a><span class="lineno">11969</span>&#160; <span class="comment">// use unchecked array access</span></div><div class="line"><a name="l11970"></a><span class="lineno">11970</span>&#160; ptr = &amp;ptr-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l11971"></a><span class="lineno">11971</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160; }</div><div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160;</div><div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160; {</div><div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160; JSON_THROW(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="l11977"></a><span class="lineno">11977</span>&#160; }</div><div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160; }</div><div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160; }</div><div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160;</div><div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160; }</div><div class="line"><a name="l11983"></a><span class="lineno">11983</span>&#160;</div><div class="line"><a name="l11984"></a><span class="lineno">11984</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> get_checked(<a class="code" href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58">const_pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l11985"></a><span class="lineno">11985</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l11986"></a><span class="lineno">11986</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="l11987"></a><span class="lineno">11987</span>&#160; {</div><div class="line"><a name="l11988"></a><span class="lineno">11988</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l11989"></a><span class="lineno">11989</span>&#160; {</div><div class="line"><a name="l11990"></a><span class="lineno">11990</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l11991"></a><span class="lineno">11991</span>&#160; {</div><div class="line"><a name="l11992"></a><span class="lineno">11992</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l11993"></a><span class="lineno">11993</span>&#160; ptr = &amp;ptr-&gt;<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(reference_token);</div><div class="line"><a name="l11994"></a><span class="lineno">11994</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11995"></a><span class="lineno">11995</span>&#160; }</div><div class="line"><a name="l11996"></a><span class="lineno">11996</span>&#160;</div><div class="line"><a name="l11997"></a><span class="lineno">11997</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l11998"></a><span class="lineno">11998</span>&#160; {</div><div class="line"><a name="l11999"></a><span class="lineno">11999</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l12000"></a><span class="lineno">12000</span>&#160; {</div><div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160; <span class="comment">// &quot;-&quot; always fails the range check</span></div><div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160; JSON_THROW(std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>));</div><div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160; }</div><div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160;</div><div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l12008"></a><span class="lineno">12008</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="l12009"></a><span class="lineno">12009</span>&#160; {</div><div class="line"><a name="l12010"></a><span class="lineno">12010</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>));</div><div class="line"><a name="l12011"></a><span class="lineno">12011</span>&#160; }</div><div class="line"><a name="l12012"></a><span class="lineno">12012</span>&#160;</div><div class="line"><a name="l12013"></a><span class="lineno">12013</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l12014"></a><span class="lineno">12014</span>&#160; ptr = &amp;ptr-&gt;at(static_cast&lt;size_type&gt;(std::stoi(reference_token)));</div><div class="line"><a name="l12015"></a><span class="lineno">12015</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12016"></a><span class="lineno">12016</span>&#160; }</div><div class="line"><a name="l12017"></a><span class="lineno">12017</span>&#160;</div><div class="line"><a name="l12018"></a><span class="lineno">12018</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160; {</div><div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160; JSON_THROW(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="l12021"></a><span class="lineno">12021</span>&#160; }</div><div class="line"><a name="l12022"></a><span class="lineno">12022</span>&#160; }</div><div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160; }</div><div class="line"><a name="l12024"></a><span class="lineno">12024</span>&#160;</div><div class="line"><a name="l12025"></a><span class="lineno">12025</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160; }</div><div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160;</div><div class="line"><a name="l12029"></a><span class="lineno">12029</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="l12030"></a><span class="lineno">12030</span>&#160; {</div><div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160; std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l12032"></a><span class="lineno">12032</span>&#160;</div><div class="line"><a name="l12033"></a><span class="lineno">12033</span>&#160; <span class="comment">// special case: empty reference string -&gt; no reference tokens</span></div><div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160; <span class="keywordflow">if</span> (reference_string.empty())</div><div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160; {</div><div class="line"><a name="l12036"></a><span class="lineno">12036</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12037"></a><span class="lineno">12037</span>&#160; }</div><div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160;</div><div class="line"><a name="l12039"></a><span class="lineno">12039</span>&#160; <span class="comment">// check if nonempty reference string begins with slash</span></div><div class="line"><a name="l12040"></a><span class="lineno">12040</span>&#160; <span class="keywordflow">if</span> (reference_string[0] != <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l12041"></a><span class="lineno">12041</span>&#160; {</div><div class="line"><a name="l12042"></a><span class="lineno">12042</span>&#160; JSON_THROW(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="l12043"></a><span class="lineno">12043</span>&#160; }</div><div class="line"><a name="l12044"></a><span class="lineno">12044</span>&#160;</div><div class="line"><a name="l12045"></a><span class="lineno">12045</span>&#160; <span class="comment">// extract the reference tokens:</span></div><div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160; <span class="comment">// - slash: position of the last read slash (or end of string)</span></div><div class="line"><a name="l12047"></a><span class="lineno">12047</span>&#160; <span class="comment">// - start: position after the previous slash</span></div><div class="line"><a name="l12048"></a><span class="lineno">12048</span>&#160; <span class="keywordflow">for</span> (</div><div class="line"><a name="l12049"></a><span class="lineno">12049</span>&#160; <span class="comment">// search for the first slash after the first character</span></div><div class="line"><a name="l12050"></a><span class="lineno">12050</span>&#160; <span class="keywordtype">size_t</span> slash = reference_string.find_first_of(<span class="charliteral">&#39;/&#39;</span>, 1),</div><div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160; <span class="comment">// set the beginning of the first reference token</span></div><div class="line"><a name="l12052"></a><span class="lineno">12052</span>&#160; start = 1;</div><div class="line"><a name="l12053"></a><span class="lineno">12053</span>&#160; <span class="comment">// we can stop if start == string::npos+1 = 0</span></div><div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160; start != 0;</div><div class="line"><a name="l12055"></a><span class="lineno">12055</span>&#160; <span class="comment">// set the beginning of the next reference token</span></div><div class="line"><a name="l12056"></a><span class="lineno">12056</span>&#160; <span class="comment">// (will eventually be 0 if slash == std::string::npos)</span></div><div class="line"><a name="l12057"></a><span class="lineno">12057</span>&#160; start = slash + 1,</div><div class="line"><a name="l12058"></a><span class="lineno">12058</span>&#160; <span class="comment">// find next slash</span></div><div class="line"><a name="l12059"></a><span class="lineno">12059</span>&#160; slash = reference_string.find_first_of(<span class="charliteral">&#39;/&#39;</span>, start))</div><div class="line"><a name="l12060"></a><span class="lineno">12060</span>&#160; {</div><div class="line"><a name="l12061"></a><span class="lineno">12061</span>&#160; <span class="comment">// use the text between the beginning of the reference token</span></div><div class="line"><a name="l12062"></a><span class="lineno">12062</span>&#160; <span class="comment">// (start) and the last slash (slash).</span></div><div class="line"><a name="l12063"></a><span class="lineno">12063</span>&#160; <span class="keyword">auto</span> reference_token = reference_string.substr(start, slash - start);</div><div class="line"><a name="l12064"></a><span class="lineno">12064</span>&#160;</div><div class="line"><a name="l12065"></a><span class="lineno">12065</span>&#160; <span class="comment">// check reference tokens are properly escaped</span></div><div class="line"><a name="l12066"></a><span class="lineno">12066</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> pos = reference_token.find_first_of(<span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160; pos != std::string::npos;</div><div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160; pos = reference_token.find_first_of(<span class="charliteral">&#39;~&#39;</span>, pos + 1))</div><div class="line"><a name="l12069"></a><span class="lineno">12069</span>&#160; {</div><div class="line"><a name="l12070"></a><span class="lineno">12070</span>&#160; assert(reference_token[pos] == <span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l12071"></a><span class="lineno">12071</span>&#160;</div><div class="line"><a name="l12072"></a><span class="lineno">12072</span>&#160; <span class="comment">// ~ must be followed by 0 or 1</span></div><div class="line"><a name="l12073"></a><span class="lineno">12073</span>&#160; <span class="keywordflow">if</span> (pos == reference_token.size() - 1 or</div><div class="line"><a name="l12074"></a><span class="lineno">12074</span>&#160; (reference_token[pos + 1] != <span class="charliteral">&#39;0&#39;</span> and</div><div class="line"><a name="l12075"></a><span class="lineno">12075</span>&#160; reference_token[pos + 1] != <span class="charliteral">&#39;1&#39;</span>))</div><div class="line"><a name="l12076"></a><span class="lineno">12076</span>&#160; {</div><div class="line"><a name="l12077"></a><span class="lineno">12077</span>&#160; JSON_THROW(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="l12078"></a><span class="lineno">12078</span>&#160; }</div><div class="line"><a name="l12079"></a><span class="lineno">12079</span>&#160; }</div><div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160;</div><div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160; <span class="comment">// finally, store the reference token</span></div><div class="line"><a name="l12082"></a><span class="lineno">12082</span>&#160; unescape(reference_token);</div><div class="line"><a name="l12083"></a><span class="lineno">12083</span>&#160; result.push_back(reference_token);</div><div class="line"><a name="l12084"></a><span class="lineno">12084</span>&#160; }</div><div class="line"><a name="l12085"></a><span class="lineno">12085</span>&#160;</div><div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160; }</div><div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160;</div><div class="line"><a name="l12089"></a><span class="lineno">12089</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12102"></a><span class="lineno">12102</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> replace_substring(std::string&amp; s,</div><div class="line"><a name="l12103"></a><span class="lineno">12103</span>&#160; <span class="keyword">const</span> std::string&amp; f,</div><div class="line"><a name="l12104"></a><span class="lineno">12104</span>&#160; <span class="keyword">const</span> std::string&amp; t)</div><div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160; {</div><div class="line"><a name="l12106"></a><span class="lineno">12106</span>&#160; assert(not f.empty());</div><div class="line"><a name="l12107"></a><span class="lineno">12107</span>&#160;</div><div class="line"><a name="l12108"></a><span class="lineno">12108</span>&#160; <span class="keywordflow">for</span> (</div><div class="line"><a name="l12109"></a><span class="lineno">12109</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="l12110"></a><span class="lineno">12110</span>&#160; pos != std::string::npos; <span class="comment">// make sure f was found</span></div><div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160; s.replace(pos, f.size(), t), <span class="comment">// replace with t</span></div><div class="line"><a name="l12112"></a><span class="lineno">12112</span>&#160; pos = s.find(f, pos + t.size()) <span class="comment">// find next occurrence of f</span></div><div class="line"><a name="l12113"></a><span class="lineno">12113</span>&#160; );</div><div class="line"><a name="l12114"></a><span class="lineno">12114</span>&#160; }</div><div class="line"><a name="l12115"></a><span class="lineno">12115</span>&#160;</div><div class="line"><a name="l12117"></a><span class="lineno">12117</span>&#160; <span class="keyword">static</span> std::string escape(std::string s)</div><div class="line"><a name="l12118"></a><span class="lineno">12118</span>&#160; {</div><div class="line"><a name="l12119"></a><span class="lineno">12119</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="l12120"></a><span class="lineno">12120</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~&quot;</span>, <span class="stringliteral">&quot;~0&quot;</span>);</div><div class="line"><a name="l12121"></a><span class="lineno">12121</span>&#160; replace_substring(s, <span class="stringliteral">&quot;/&quot;</span>, <span class="stringliteral">&quot;~1&quot;</span>);</div><div class="line"><a name="l12122"></a><span class="lineno">12122</span>&#160; <span class="keywordflow">return</span> s;</div><div class="line"><a name="l12123"></a><span class="lineno">12123</span>&#160; }</div><div class="line"><a name="l12124"></a><span class="lineno">12124</span>&#160;</div><div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> unescape(std::string&amp; s)</div><div class="line"><a name="l12127"></a><span class="lineno">12127</span>&#160; {</div><div class="line"><a name="l12128"></a><span class="lineno">12128</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="l12129"></a><span class="lineno">12129</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~1&quot;</span>, <span class="stringliteral">&quot;/&quot;</span>);</div><div class="line"><a name="l12130"></a><span class="lineno">12130</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="l12131"></a><span class="lineno">12131</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~0&quot;</span>, <span class="stringliteral">&quot;~&quot;</span>);</div><div class="line"><a name="l12132"></a><span class="lineno">12132</span>&#160; }</div><div class="line"><a name="l12133"></a><span class="lineno">12133</span>&#160;</div><div class="line"><a name="l12141"></a><span class="lineno">12141</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="l12142"></a><span class="lineno">12142</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="l12143"></a><span class="lineno">12143</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; result)</div><div class="line"><a name="l12144"></a><span class="lineno">12144</span>&#160; {</div><div class="line"><a name="l12145"></a><span class="lineno">12145</span>&#160; <span class="keywordflow">switch</span> (value.m_type)</div><div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160; {</div><div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160; {</div><div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160; <span class="keywordflow">if</span> (value.m_value.array-&gt;empty())</div><div class="line"><a name="l12150"></a><span class="lineno">12150</span>&#160; {</div><div class="line"><a name="l12151"></a><span class="lineno">12151</span>&#160; <span class="comment">// flatten empty array as null</span></div><div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160; result[reference_string] = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l12153"></a><span class="lineno">12153</span>&#160; }</div><div class="line"><a name="l12154"></a><span class="lineno">12154</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160; {</div><div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160; <span class="comment">// iterate array and use index as reference string</span></div><div class="line"><a name="l12157"></a><span class="lineno">12157</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="l12158"></a><span class="lineno">12158</span>&#160; {</div><div class="line"><a name="l12159"></a><span class="lineno">12159</span>&#160; flatten(reference_string + <span class="stringliteral">&quot;/&quot;</span> + std::to_string(i),</div><div class="line"><a name="l12160"></a><span class="lineno">12160</span>&#160; value.m_value.array-&gt;operator[](i), result);</div><div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160; }</div><div class="line"><a name="l12162"></a><span class="lineno">12162</span>&#160; }</div><div class="line"><a name="l12163"></a><span class="lineno">12163</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12164"></a><span class="lineno">12164</span>&#160; }</div><div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160;</div><div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l12167"></a><span class="lineno">12167</span>&#160; {</div><div class="line"><a name="l12168"></a><span class="lineno">12168</span>&#160; <span class="keywordflow">if</span> (value.m_value.object-&gt;empty())</div><div class="line"><a name="l12169"></a><span class="lineno">12169</span>&#160; {</div><div class="line"><a name="l12170"></a><span class="lineno">12170</span>&#160; <span class="comment">// flatten empty object as null</span></div><div class="line"><a name="l12171"></a><span class="lineno">12171</span>&#160; result[reference_string] = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l12172"></a><span class="lineno">12172</span>&#160; }</div><div class="line"><a name="l12173"></a><span class="lineno">12173</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12174"></a><span class="lineno">12174</span>&#160; {</div><div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160; <span class="comment">// iterate object and use keys as reference string</span></div><div class="line"><a name="l12176"></a><span class="lineno">12176</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="l12177"></a><span class="lineno">12177</span>&#160; {</div><div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160; flatten(reference_string + <span class="stringliteral">&quot;/&quot;</span> + escape(element.first),</div><div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160; element.second, result);</div><div class="line"><a name="l12180"></a><span class="lineno">12180</span>&#160; }</div><div class="line"><a name="l12181"></a><span class="lineno">12181</span>&#160; }</div><div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160; }</div><div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160;</div><div class="line"><a name="l12185"></a><span class="lineno">12185</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l12186"></a><span class="lineno">12186</span>&#160; {</div><div class="line"><a name="l12187"></a><span class="lineno">12187</span>&#160; <span class="comment">// add primitive value with its reference string</span></div><div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160; result[reference_string] = value;</div><div class="line"><a name="l12189"></a><span class="lineno">12189</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12190"></a><span class="lineno">12190</span>&#160; }</div><div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160; }</div><div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160; }</div><div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160;</div><div class="line"><a name="l12199"></a><span class="lineno">12199</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="l12200"></a><span class="lineno">12200</span>&#160; {</div><div class="line"><a name="l12201"></a><span class="lineno">12201</span>&#160; <span class="keywordflow">if</span> (not value.<a class="code" href="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c.html#af8f511af124e82e4579f444b4175787c">is_object</a>())</div><div class="line"><a name="l12202"></a><span class="lineno">12202</span>&#160; {</div><div class="line"><a name="l12203"></a><span class="lineno">12203</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;only objects can be unflattened&quot;</span>));</div><div class="line"><a name="l12204"></a><span class="lineno">12204</span>&#160; }</div><div class="line"><a name="l12205"></a><span class="lineno">12205</span>&#160;</div><div class="line"><a name="l12206"></a><span class="lineno">12206</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result;</div><div class="line"><a name="l12207"></a><span class="lineno">12207</span>&#160;</div><div class="line"><a name="l12208"></a><span class="lineno">12208</span>&#160; <span class="comment">// iterate the JSON object values</span></div><div class="line"><a name="l12209"></a><span class="lineno">12209</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="l12210"></a><span class="lineno">12210</span>&#160; {</div><div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160; <span class="keywordflow">if</span> (not element.second.is_primitive())</div><div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160; {</div><div class="line"><a name="l12213"></a><span class="lineno">12213</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;values in object must be primitive&quot;</span>));</div><div class="line"><a name="l12214"></a><span class="lineno">12214</span>&#160; }</div><div class="line"><a name="l12215"></a><span class="lineno">12215</span>&#160;</div><div class="line"><a name="l12216"></a><span class="lineno">12216</span>&#160; <span class="comment">// assign value to reference pointed to by JSON pointer; Note</span></div><div class="line"><a name="l12217"></a><span class="lineno">12217</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="l12218"></a><span class="lineno">12218</span>&#160; <span class="comment">// value), function get_and_create returns a reference to</span></div><div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160; <span class="comment">// result itself. An assignment will then create a primitive</span></div><div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l12221"></a><span class="lineno">12221</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="l12222"></a><span class="lineno">12222</span>&#160; }</div><div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160;</div><div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160; }</div><div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160;</div><div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> <span class="keyword">const</span>&amp; lhs,</div><div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> <span class="keyword">const</span>&amp; rhs) noexcept</div><div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160; {</div><div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160; <span class="keywordflow">return</span> lhs.reference_tokens == rhs.reference_tokens;</div><div class="line"><a name="l12232"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_a4667ef558c8c3f8a646bfda0c6654653.html#a4667ef558c8c3f8a646bfda0c6654653">12232</a></span>&#160; }</div><div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160;</div><div class="line"><a name="l12234"></a><span class="lineno">12234</span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> <span class="keyword">const</span>&amp; lhs,</div><div class="line"><a name="l12235"></a><span class="lineno">12235</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> <span class="keyword">const</span>&amp; rhs) noexcept</div><div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160; {</div><div class="line"><a name="l12237"></a><span class="lineno">12237</span>&#160; <span class="keywordflow">return</span> !(lhs == rhs);</div><div class="line"><a name="l12238"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_a6779edcf28e6f018a3bbb29c0b4b5e1e.html#a6779edcf28e6f018a3bbb29c0b4b5e1e">12238</a></span>&#160; }</div><div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160;</div><div class="line"><a name="l12241"></a><span class="lineno">12241</span>&#160; std::vector&lt;std::string&gt; reference_tokens {};</div><div class="line"><a name="l12242"></a><span class="lineno">12242</span>&#160; };</div><div class="line"><a name="l12243"></a><span class="lineno">12243</span>&#160;</div><div class="line"><a name="l12245"></a><span class="lineno">12245</span>&#160; <span class="comment">// JSON Pointer support //</span></div><div class="line"><a name="l12247"></a><span class="lineno">12247</span>&#160;<span class="comment"></span></div><div class="line"><a name="l12250"></a><span class="lineno">12250</span>&#160;</div><div class="line"><a name="l12284"></a><span class="lineno">12284</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="l12285"></a><span class="lineno">12285</span>&#160; {</div><div class="line"><a name="l12286"></a><span class="lineno">12286</span>&#160; <span class="keywordflow">return</span> ptr.get_unchecked(<span class="keyword">this</span>);</div><div class="line"><a name="l12287"></a><span class="lineno">12287</span>&#160; }</div><div class="line"><a name="l12288"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac6946dffeb3be5aa173645f0467a44b3.html#ac6946dffeb3be5aa173645f0467a44b3">12288</a></span>&#160;</div><div class="line"><a name="l12311"></a><span class="lineno">12311</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="l12312"></a><span class="lineno">12312</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160; <span class="keywordflow">return</span> ptr.get_unchecked(<span class="keyword">this</span>);</div><div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160; }</div><div class="line"><a name="l12315"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9d55e3e63b05e03a2b70cea3761f84cb.html#a9d55e3e63b05e03a2b70cea3761f84cb">12315</a></span>&#160;</div><div class="line"><a name="l12336"></a><span class="lineno">12336</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="l12337"></a><span class="lineno">12337</span>&#160; {</div><div class="line"><a name="l12338"></a><span class="lineno">12338</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l12339"></a><span class="lineno">12339</span>&#160; }</div><div class="line"><a name="l12340"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8ab61397c10f18b305520da7073b2b45.html#a8ab61397c10f18b305520da7073b2b45">12340</a></span>&#160;</div><div class="line"><a name="l12361"></a><span class="lineno">12361</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="l12362"></a><span class="lineno">12362</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12363"></a><span class="lineno">12363</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160; }</div><div class="line"><a name="l12365"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7479d686148c26e252781bb32aa5d5c9.html#a7479d686148c26e252781bb32aa5d5c9">12365</a></span>&#160;</div><div class="line"><a name="l12388"></a><span class="lineno">12388</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="l12389"></a><span class="lineno">12389</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12390"></a><span class="lineno">12390</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result(value_t::object);</div><div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160; json_pointer::flatten(<span class="stringliteral">&quot;&quot;</span>, *<span class="keyword">this</span>, result);</div><div class="line"><a name="l12392"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab838f000d76662917ffd6ec529569e03.html#ab838f000d76662917ffd6ec529569e03">12392</a></span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160; }</div><div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160;</div><div class="line"><a name="l12422"></a><span class="lineno">12422</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="l12423"></a><span class="lineno">12423</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12424"></a><span class="lineno">12424</span>&#160; <span class="keywordflow">return</span> json_pointer::unflatten(*<span class="keyword">this</span>);</div><div class="line"><a name="l12425"></a><span class="lineno">12425</span>&#160; }</div><div class="line"><a name="l12426"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a74fa3ab2003f2f6f2b69deaafed9126d.html#a74fa3ab2003f2f6f2b69deaafed9126d">12426</a></span>&#160;</div><div class="line"><a name="l12428"></a><span class="lineno">12428</span>&#160;</div><div class="line"><a name="l12430"></a><span class="lineno">12430</span>&#160; <span class="comment">// JSON Patch functions //</span></div><div class="line"><a name="l12432"></a><span class="lineno">12432</span>&#160;<span class="comment"></span></div><div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160;</div><div class="line"><a name="l12472"></a><span class="lineno">12472</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="l12473"></a><span class="lineno">12473</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12474"></a><span class="lineno">12474</span>&#160; <span class="comment">// make a working copy to apply the patch to</span></div><div class="line"><a name="l12475"></a><span class="lineno">12475</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="l12476"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a81e0c41a4a9dff4df2f6973f7f8b2a83.html#a81e0c41a4a9dff4df2f6973f7f8b2a83">12476</a></span>&#160;</div><div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160; <span class="comment">// the valid JSON Patch operations</span></div><div class="line"><a name="l12478"></a><span class="lineno">12478</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="l12479"></a><span class="lineno">12479</span>&#160;</div><div class="line"><a name="l12480"></a><span class="lineno">12480</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="l12481"></a><span class="lineno">12481</span>&#160; {</div><div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;add&quot;</span>)</div><div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160; {</div><div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160; <span class="keywordflow">return</span> patch_operations::add;</div><div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160; }</div><div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;remove&quot;</span>)</div><div class="line"><a name="l12487"></a><span class="lineno">12487</span>&#160; {</div><div class="line"><a name="l12488"></a><span class="lineno">12488</span>&#160; <span class="keywordflow">return</span> patch_operations::remove;</div><div class="line"><a name="l12489"></a><span class="lineno">12489</span>&#160; }</div><div class="line"><a name="l12490"></a><span class="lineno">12490</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;replace&quot;</span>)</div><div class="line"><a name="l12491"></a><span class="lineno">12491</span>&#160; {</div><div class="line"><a name="l12492"></a><span class="lineno">12492</span>&#160; <span class="keywordflow">return</span> patch_operations::replace;</div><div class="line"><a name="l12493"></a><span class="lineno">12493</span>&#160; }</div><div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;move&quot;</span>)</div><div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160; {</div><div class="line"><a name="l12496"></a><span class="lineno">12496</span>&#160; <span class="keywordflow">return</span> patch_operations::move;</div><div class="line"><a name="l12497"></a><span class="lineno">12497</span>&#160; }</div><div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;copy&quot;</span>)</div><div class="line"><a name="l12499"></a><span class="lineno">12499</span>&#160; {</div><div class="line"><a name="l12500"></a><span class="lineno">12500</span>&#160; <span class="keywordflow">return</span> patch_operations::copy;</div><div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160; }</div><div class="line"><a name="l12502"></a><span class="lineno">12502</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;test&quot;</span>)</div><div class="line"><a name="l12503"></a><span class="lineno">12503</span>&#160; {</div><div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160; <span class="keywordflow">return</span> patch_operations::test;</div><div class="line"><a name="l12505"></a><span class="lineno">12505</span>&#160; }</div><div class="line"><a name="l12506"></a><span class="lineno">12506</span>&#160;</div><div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160; <span class="keywordflow">return</span> patch_operations::invalid;</div><div class="line"><a name="l12508"></a><span class="lineno">12508</span>&#160; };</div><div class="line"><a name="l12509"></a><span class="lineno">12509</span>&#160;</div><div class="line"><a name="l12510"></a><span class="lineno">12510</span>&#160; <span class="comment">// wrapper for &quot;add&quot; operation; add value at ptr</span></div><div class="line"><a name="l12511"></a><span class="lineno">12511</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="l12512"></a><span class="lineno">12512</span>&#160; {</div><div class="line"><a name="l12513"></a><span class="lineno">12513</span>&#160; <span class="comment">// adding to the root of the target document means replacing it</span></div><div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160; <span class="keywordflow">if</span> (ptr.is_root())</div><div class="line"><a name="l12515"></a><span class="lineno">12515</span>&#160; {</div><div class="line"><a name="l12516"></a><span class="lineno">12516</span>&#160; result = val;</div><div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160; }</div><div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12519"></a><span class="lineno">12519</span>&#160; {</div><div class="line"><a name="l12520"></a><span class="lineno">12520</span>&#160; <span class="comment">// make sure the top element of the pointer exists</span></div><div class="line"><a name="l12521"></a><span class="lineno">12521</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="l12522"></a><span class="lineno">12522</span>&#160; <span class="keywordflow">if</span> (top_pointer != ptr)</div><div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160; {</div><div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(top_pointer);</div><div class="line"><a name="l12525"></a><span class="lineno">12525</span>&#160; }</div><div class="line"><a name="l12526"></a><span class="lineno">12526</span>&#160;</div><div class="line"><a name="l12527"></a><span class="lineno">12527</span>&#160; <span class="comment">// get reference to parent of JSON pointer ptr</span></div><div class="line"><a name="l12528"></a><span class="lineno">12528</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> last_path = ptr.pop_back();</div><div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; parent = result[ptr];</div><div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160;</div><div class="line"><a name="l12531"></a><span class="lineno">12531</span>&#160; <span class="keywordflow">switch</span> (parent.m_type)</div><div class="line"><a name="l12532"></a><span class="lineno">12532</span>&#160; {</div><div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160; {</div><div class="line"><a name="l12536"></a><span class="lineno">12536</span>&#160; <span class="comment">// use operator[] to add value</span></div><div class="line"><a name="l12537"></a><span class="lineno">12537</span>&#160; parent[last_path] = val;</div><div class="line"><a name="l12538"></a><span class="lineno">12538</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12539"></a><span class="lineno">12539</span>&#160; }</div><div class="line"><a name="l12540"></a><span class="lineno">12540</span>&#160;</div><div class="line"><a name="l12541"></a><span class="lineno">12541</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160; {</div><div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160; <span class="keywordflow">if</span> (last_path == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160; {</div><div class="line"><a name="l12545"></a><span class="lineno">12545</span>&#160; <span class="comment">// special case: append to back</span></div><div class="line"><a name="l12546"></a><span class="lineno">12546</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">push_back</a>(val);</div><div class="line"><a name="l12547"></a><span class="lineno">12547</span>&#160; }</div><div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12549"></a><span class="lineno">12549</span>&#160; {</div><div class="line"><a name="l12550"></a><span class="lineno">12550</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> idx = std::stoi(last_path);</div><div class="line"><a name="l12551"></a><span class="lineno">12551</span>&#160; <span class="keywordflow">if</span> (static_cast&lt;size_type&gt;(idx) &gt; parent.<a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>())</div><div class="line"><a name="l12552"></a><span class="lineno">12552</span>&#160; {</div><div class="line"><a name="l12553"></a><span class="lineno">12553</span>&#160; <span class="comment">// avoid undefined behavior</span></div><div class="line"><a name="l12554"></a><span class="lineno">12554</span>&#160; JSON_THROW(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="l12555"></a><span class="lineno">12555</span>&#160; }</div><div class="line"><a name="l12556"></a><span class="lineno">12556</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12557"></a><span class="lineno">12557</span>&#160; {</div><div class="line"><a name="l12558"></a><span class="lineno">12558</span>&#160; <span class="comment">// default case: insert add offset</span></div><div class="line"><a name="l12559"></a><span class="lineno">12559</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_a0136728f5db69d4051c77b94307abd6c.html#a0136728f5db69d4051c77b94307abd6c">insert</a>(parent.<a class="code" href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc">begin</a>() + <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a><span class="keyword">&gt;</span>(idx), val);</div><div class="line"><a name="l12560"></a><span class="lineno">12560</span>&#160; }</div><div class="line"><a name="l12561"></a><span class="lineno">12561</span>&#160; }</div><div class="line"><a name="l12562"></a><span class="lineno">12562</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12563"></a><span class="lineno">12563</span>&#160; }</div><div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160;</div><div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160; {</div><div class="line"><a name="l12567"></a><span class="lineno">12567</span>&#160; <span class="comment">// if there exists a parent it cannot be primitive</span></div><div class="line"><a name="l12568"></a><span class="lineno">12568</span>&#160; assert(<span class="keyword">false</span>); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160; }</div><div class="line"><a name="l12570"></a><span class="lineno">12570</span>&#160; }</div><div class="line"><a name="l12571"></a><span class="lineno">12571</span>&#160; }</div><div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160; };</div><div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160;</div><div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160; <span class="comment">// wrapper for &quot;remove&quot; operation; remove value at ptr</span></div><div class="line"><a name="l12575"></a><span class="lineno">12575</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="l12576"></a><span class="lineno">12576</span>&#160; {</div><div class="line"><a name="l12577"></a><span class="lineno">12577</span>&#160; <span class="comment">// get reference to parent of JSON pointer ptr</span></div><div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> last_path = ptr.pop_back();</div><div class="line"><a name="l12579"></a><span class="lineno">12579</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_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(ptr);</div><div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160;</div><div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160; <span class="comment">// remove child</span></div><div class="line"><a name="l12582"></a><span class="lineno">12582</span>&#160; <span class="keywordflow">if</span> (parent.<a class="code" href="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c.html#af8f511af124e82e4579f444b4175787c">is_object</a>())</div><div class="line"><a name="l12583"></a><span class="lineno">12583</span>&#160; {</div><div class="line"><a name="l12584"></a><span class="lineno">12584</span>&#160; <span class="comment">// perform range check</span></div><div class="line"><a name="l12585"></a><span class="lineno">12585</span>&#160; <span class="keyword">auto</span> it = parent.<a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(last_path);</div><div class="line"><a name="l12586"></a><span class="lineno">12586</span>&#160; <span class="keywordflow">if</span> (it != parent.<a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>())</div><div class="line"><a name="l12587"></a><span class="lineno">12587</span>&#160; {</div><div class="line"><a name="l12588"></a><span class="lineno">12588</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed.html#a068a16e76be178e83da6a192916923ed">erase</a>(it);</div><div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160; }</div><div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12591"></a><span class="lineno">12591</span>&#160; {</div><div class="line"><a name="l12592"></a><span class="lineno">12592</span>&#160; JSON_THROW(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="l12593"></a><span class="lineno">12593</span>&#160; }</div><div class="line"><a name="l12594"></a><span class="lineno">12594</span>&#160; }</div><div class="line"><a name="l12595"></a><span class="lineno">12595</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parent.<a class="code" href="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65.html#aef9ce5dd2381caee1f8ddcdb5bdd9c65">is_array</a>())</div><div class="line"><a name="l12596"></a><span class="lineno">12596</span>&#160; {</div><div class="line"><a name="l12597"></a><span class="lineno">12597</span>&#160; <span class="comment">// note erase performs range check</span></div><div class="line"><a name="l12598"></a><span class="lineno">12598</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed.html#a068a16e76be178e83da6a192916923ed">erase</a>(static_cast&lt;size_type&gt;(std::stoi(last_path)));</div><div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160; }</div><div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160; };</div><div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160;</div><div class="line"><a name="l12602"></a><span class="lineno">12602</span>&#160; <span class="comment">// type check</span></div><div class="line"><a name="l12603"></a><span class="lineno">12603</span>&#160; <span class="keywordflow">if</span> (not json_patch.<a class="code" href="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65.html#aef9ce5dd2381caee1f8ddcdb5bdd9c65">is_array</a>())</div><div class="line"><a name="l12604"></a><span class="lineno">12604</span>&#160; {</div><div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160; <span class="comment">// a JSON patch must be an array of objects</span></div><div class="line"><a name="l12606"></a><span class="lineno">12606</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;JSON patch must be an array of objects&quot;</span>));</div><div class="line"><a name="l12607"></a><span class="lineno">12607</span>&#160; }</div><div class="line"><a name="l12608"></a><span class="lineno">12608</span>&#160;</div><div class="line"><a name="l12609"></a><span class="lineno">12609</span>&#160; <span class="comment">// iterate and apply the operations</span></div><div class="line"><a name="l12610"></a><span class="lineno">12610</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="l12611"></a><span class="lineno">12611</span>&#160; {</div><div class="line"><a name="l12612"></a><span class="lineno">12612</span>&#160; <span class="comment">// wrapper to get a value for an operation</span></div><div class="line"><a name="l12613"></a><span class="lineno">12613</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="l12614"></a><span class="lineno">12614</span>&#160; <span class="keyword">const</span> std::string &amp; member,</div><div class="line"><a name="l12615"></a><span class="lineno">12615</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="l12616"></a><span class="lineno">12616</span>&#160; {</div><div class="line"><a name="l12617"></a><span class="lineno">12617</span>&#160; <span class="comment">// find value</span></div><div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160; <span class="keyword">auto</span> it = val.m_value.object-&gt;find(member);</div><div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160;</div><div class="line"><a name="l12620"></a><span class="lineno">12620</span>&#160; <span class="comment">// context-sensitive error message</span></div><div class="line"><a name="l12621"></a><span class="lineno">12621</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="l12622"></a><span class="lineno">12622</span>&#160;</div><div class="line"><a name="l12623"></a><span class="lineno">12623</span>&#160; <span class="comment">// check if desired value is present</span></div><div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160; <span class="keywordflow">if</span> (it == val.m_value.object-&gt;end())</div><div class="line"><a name="l12625"></a><span class="lineno">12625</span>&#160; {</div><div class="line"><a name="l12626"></a><span class="lineno">12626</span>&#160; JSON_THROW(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="l12627"></a><span class="lineno">12627</span>&#160; }</div><div class="line"><a name="l12628"></a><span class="lineno">12628</span>&#160;</div><div class="line"><a name="l12629"></a><span class="lineno">12629</span>&#160; <span class="comment">// check if result is of type string</span></div><div class="line"><a name="l12630"></a><span class="lineno">12630</span>&#160; <span class="keywordflow">if</span> (string_type and not it-&gt;second.is_string())</div><div class="line"><a name="l12631"></a><span class="lineno">12631</span>&#160; {</div><div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160; JSON_THROW(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="l12633"></a><span class="lineno">12633</span>&#160; }</div><div class="line"><a name="l12634"></a><span class="lineno">12634</span>&#160;</div><div class="line"><a name="l12635"></a><span class="lineno">12635</span>&#160; <span class="comment">// no error: return value</span></div><div class="line"><a name="l12636"></a><span class="lineno">12636</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l12637"></a><span class="lineno">12637</span>&#160; };</div><div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160;</div><div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160; <span class="comment">// type check</span></div><div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160; <span class="keywordflow">if</span> (not val.is_object())</div><div class="line"><a name="l12641"></a><span class="lineno">12641</span>&#160; {</div><div class="line"><a name="l12642"></a><span class="lineno">12642</span>&#160; JSON_THROW(std::invalid_argument(<span class="stringliteral">&quot;JSON patch must be an array of objects&quot;</span>));</div><div class="line"><a name="l12643"></a><span class="lineno">12643</span>&#160; }</div><div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160;</div><div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160; <span class="comment">// collect mandatory members</span></div><div class="line"><a name="l12646"></a><span class="lineno">12646</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="l12647"></a><span class="lineno">12647</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="l12648"></a><span class="lineno">12648</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="l12649"></a><span class="lineno">12649</span>&#160;</div><div class="line"><a name="l12650"></a><span class="lineno">12650</span>&#160; <span class="keywordflow">switch</span> (get_op(op))</div><div class="line"><a name="l12651"></a><span class="lineno">12651</span>&#160; {</div><div class="line"><a name="l12652"></a><span class="lineno">12652</span>&#160; <span class="keywordflow">case</span> patch_operations::add:</div><div class="line"><a name="l12653"></a><span class="lineno">12653</span>&#160; {</div><div class="line"><a name="l12654"></a><span class="lineno">12654</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="l12655"></a><span class="lineno">12655</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12656"></a><span class="lineno">12656</span>&#160; }</div><div class="line"><a name="l12657"></a><span class="lineno">12657</span>&#160;</div><div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160; <span class="keywordflow">case</span> patch_operations::remove:</div><div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160; {</div><div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160; operation_remove(ptr);</div><div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12662"></a><span class="lineno">12662</span>&#160; }</div><div class="line"><a name="l12663"></a><span class="lineno">12663</span>&#160;</div><div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160; <span class="keywordflow">case</span> patch_operations::replace:</div><div class="line"><a name="l12665"></a><span class="lineno">12665</span>&#160; {</div><div class="line"><a name="l12666"></a><span class="lineno">12666</span>&#160; <span class="comment">// the &quot;path&quot; location must exist - use at()</span></div><div class="line"><a name="l12667"></a><span class="lineno">12667</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">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="l12668"></a><span class="lineno">12668</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12669"></a><span class="lineno">12669</span>&#160; }</div><div class="line"><a name="l12670"></a><span class="lineno">12670</span>&#160;</div><div class="line"><a name="l12671"></a><span class="lineno">12671</span>&#160; <span class="keywordflow">case</span> patch_operations::move:</div><div class="line"><a name="l12672"></a><span class="lineno">12672</span>&#160; {</div><div class="line"><a name="l12673"></a><span class="lineno">12673</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="l12674"></a><span class="lineno">12674</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="l12675"></a><span class="lineno">12675</span>&#160;</div><div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160; <span class="comment">// the &quot;from&quot; location must exist - use at()</span></div><div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> v = result.<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(from_ptr);</div><div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160;</div><div class="line"><a name="l12679"></a><span class="lineno">12679</span>&#160; <span class="comment">// The move operation is functionally identical to a</span></div><div class="line"><a name="l12680"></a><span class="lineno">12680</span>&#160; <span class="comment">// &quot;remove&quot; operation on the &quot;from&quot; location, followed</span></div><div class="line"><a name="l12681"></a><span class="lineno">12681</span>&#160; <span class="comment">// immediately by an &quot;add&quot; operation at the target</span></div><div class="line"><a name="l12682"></a><span class="lineno">12682</span>&#160; <span class="comment">// location with the value that was just removed.</span></div><div class="line"><a name="l12683"></a><span class="lineno">12683</span>&#160; operation_remove(from_ptr);</div><div class="line"><a name="l12684"></a><span class="lineno">12684</span>&#160; operation_add(ptr, v);</div><div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160; }</div><div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160;</div><div class="line"><a name="l12688"></a><span class="lineno">12688</span>&#160; <span class="keywordflow">case</span> patch_operations::copy:</div><div class="line"><a name="l12689"></a><span class="lineno">12689</span>&#160; {</div><div class="line"><a name="l12690"></a><span class="lineno">12690</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="l12691"></a><span class="lineno">12691</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="l12692"></a><span class="lineno">12692</span>&#160;</div><div class="line"><a name="l12693"></a><span class="lineno">12693</span>&#160; <span class="comment">// the &quot;from&quot; location must exist - use at()</span></div><div class="line"><a name="l12694"></a><span class="lineno">12694</span>&#160; result[ptr] = result.<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">at</a>(from_ptr);</div><div class="line"><a name="l12695"></a><span class="lineno">12695</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160; }</div><div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160;</div><div class="line"><a name="l12698"></a><span class="lineno">12698</span>&#160; <span class="keywordflow">case</span> patch_operations::test:</div><div class="line"><a name="l12699"></a><span class="lineno">12699</span>&#160; {</div><div class="line"><a name="l12700"></a><span class="lineno">12700</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div><div class="line"><a name="l12701"></a><span class="lineno">12701</span>&#160; JSON_TRY</div><div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160; {</div><div class="line"><a name="l12703"></a><span class="lineno">12703</span>&#160; <span class="comment">// check if &quot;value&quot; matches the one at &quot;path&quot;</span></div><div class="line"><a name="l12704"></a><span class="lineno">12704</span>&#160; <span class="comment">// the &quot;path&quot; location must exist - use at()</span></div><div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160; success = (result.<a class="code" href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">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="l12706"></a><span class="lineno">12706</span>&#160; }</div><div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160; JSON_CATCH (std::out_of_range&amp;)</div><div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160; {</div><div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160; <span class="comment">// ignore out of range errors: success remains false</span></div><div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160; }</div><div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160;</div><div class="line"><a name="l12712"></a><span class="lineno">12712</span>&#160; <span class="comment">// throw an exception if test fails</span></div><div class="line"><a name="l12713"></a><span class="lineno">12713</span>&#160; <span class="keywordflow">if</span> (not success)</div><div class="line"><a name="l12714"></a><span class="lineno">12714</span>&#160; {</div><div class="line"><a name="l12715"></a><span class="lineno">12715</span>&#160; JSON_THROW(std::domain_error(<span class="stringliteral">&quot;unsuccessful: &quot;</span> + val.dump()));</div><div class="line"><a name="l12716"></a><span class="lineno">12716</span>&#160; }</div><div class="line"><a name="l12717"></a><span class="lineno">12717</span>&#160;</div><div class="line"><a name="l12718"></a><span class="lineno">12718</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12719"></a><span class="lineno">12719</span>&#160; }</div><div class="line"><a name="l12720"></a><span class="lineno">12720</span>&#160;</div><div class="line"><a name="l12721"></a><span class="lineno">12721</span>&#160; <span class="keywordflow">case</span> patch_operations::invalid:</div><div class="line"><a name="l12722"></a><span class="lineno">12722</span>&#160; {</div><div class="line"><a name="l12723"></a><span class="lineno">12723</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="l12724"></a><span class="lineno">12724</span>&#160; <span class="comment">// &quot;test&quot;</span></div><div class="line"><a name="l12725"></a><span class="lineno">12725</span>&#160; JSON_THROW(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="l12726"></a><span class="lineno">12726</span>&#160; }</div><div class="line"><a name="l12727"></a><span class="lineno">12727</span>&#160; }</div><div class="line"><a name="l12728"></a><span class="lineno">12728</span>&#160; }</div><div class="line"><a name="l12729"></a><span class="lineno">12729</span>&#160;</div><div class="line"><a name="l12730"></a><span class="lineno">12730</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12731"></a><span class="lineno">12731</span>&#160; }</div><div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160;</div><div class="line"><a name="l12765"></a><span class="lineno">12765</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="l12766"></a><span class="lineno">12766</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="l12767"></a><span class="lineno">12767</span>&#160; <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l12768"></a><span class="lineno">12768</span>&#160; {</div><div class="line"><a name="l12769"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a543bd5f7490de54c875b2c0912dc9a49.html#a543bd5f7490de54c875b2c0912dc9a49">12769</a></span>&#160; <span class="comment">// the patch</span></div><div class="line"><a name="l12770"></a><span class="lineno">12770</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result(value_t::array);</div><div class="line"><a name="l12771"></a><span class="lineno">12771</span>&#160;</div><div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160; <span class="comment">// if the values are the same, return empty patch</span></div><div class="line"><a name="l12773"></a><span class="lineno">12773</span>&#160; <span class="keywordflow">if</span> (source == target)</div><div class="line"><a name="l12774"></a><span class="lineno">12774</span>&#160; {</div><div class="line"><a name="l12775"></a><span class="lineno">12775</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160; }</div><div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;</div><div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160; <span class="keywordflow">if</span> (source.<a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>() != target.<a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>())</div><div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160; {</div><div class="line"><a name="l12780"></a><span class="lineno">12780</span>&#160; <span class="comment">// different types: replace value</span></div><div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160; result.push_back(</div><div class="line"><a name="l12782"></a><span class="lineno">12782</span>&#160; {</div><div class="line"><a name="l12783"></a><span class="lineno">12783</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;replace&quot;</span>},</div><div class="line"><a name="l12784"></a><span class="lineno">12784</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path},</div><div class="line"><a name="l12785"></a><span class="lineno">12785</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target}</div><div class="line"><a name="l12786"></a><span class="lineno">12786</span>&#160; });</div><div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160; }</div><div class="line"><a name="l12788"></a><span class="lineno">12788</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12789"></a><span class="lineno">12789</span>&#160; {</div><div class="line"><a name="l12790"></a><span class="lineno">12790</span>&#160; <span class="keywordflow">switch</span> (source.<a class="code" href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">type</a>())</div><div class="line"><a name="l12791"></a><span class="lineno">12791</span>&#160; {</div><div class="line"><a name="l12792"></a><span class="lineno">12792</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l12793"></a><span class="lineno">12793</span>&#160; {</div><div class="line"><a name="l12794"></a><span class="lineno">12794</span>&#160; <span class="comment">// first pass: traverse common elements</span></div><div class="line"><a name="l12795"></a><span class="lineno">12795</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l12796"></a><span class="lineno">12796</span>&#160; <span class="keywordflow">while</span> (i &lt; source.<a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>() and i &lt; target.<a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>())</div><div class="line"><a name="l12797"></a><span class="lineno">12797</span>&#160; {</div><div class="line"><a name="l12798"></a><span class="lineno">12798</span>&#160; <span class="comment">// recursive call to compare array values at index i</span></div><div class="line"><a name="l12799"></a><span class="lineno">12799</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="l12800"></a><span class="lineno">12800</span>&#160; result.insert(result.end(), temp_diff.begin(), temp_diff.end());</div><div class="line"><a name="l12801"></a><span class="lineno">12801</span>&#160; ++i;</div><div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160; }</div><div class="line"><a name="l12803"></a><span class="lineno">12803</span>&#160;</div><div class="line"><a name="l12804"></a><span class="lineno">12804</span>&#160; <span class="comment">// i now reached the end of at least one array</span></div><div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160; <span class="comment">// in a second pass, traverse the remaining elements</span></div><div class="line"><a name="l12806"></a><span class="lineno">12806</span>&#160;</div><div class="line"><a name="l12807"></a><span class="lineno">12807</span>&#160; <span class="comment">// remove my remaining elements</span></div><div class="line"><a name="l12808"></a><span class="lineno">12808</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_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">difference_type</a><span class="keyword">&gt;</span>(result.size());</div><div class="line"><a name="l12809"></a><span class="lineno">12809</span>&#160; <span class="keywordflow">while</span> (i &lt; source.<a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>())</div><div class="line"><a name="l12810"></a><span class="lineno">12810</span>&#160; {</div><div class="line"><a name="l12811"></a><span class="lineno">12811</span>&#160; <span class="comment">// add operations in reverse order to avoid invalid</span></div><div class="line"><a name="l12812"></a><span class="lineno">12812</span>&#160; <span class="comment">// indices</span></div><div class="line"><a name="l12813"></a><span class="lineno">12813</span>&#160; result.insert(result.begin() + end_index, object(</div><div class="line"><a name="l12814"></a><span class="lineno">12814</span>&#160; {</div><div class="line"><a name="l12815"></a><span class="lineno">12815</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;remove&quot;</span>},</div><div class="line"><a name="l12816"></a><span class="lineno">12816</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="l12817"></a><span class="lineno">12817</span>&#160; }));</div><div class="line"><a name="l12818"></a><span class="lineno">12818</span>&#160; ++i;</div><div class="line"><a name="l12819"></a><span class="lineno">12819</span>&#160; }</div><div class="line"><a name="l12820"></a><span class="lineno">12820</span>&#160;</div><div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160; <span class="comment">// add other remaining elements</span></div><div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160; <span class="keywordflow">while</span> (i &lt; target.<a class="code" href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">size</a>())</div><div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160; {</div><div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160; result.push_back(</div><div class="line"><a name="l12825"></a><span class="lineno">12825</span>&#160; {</div><div class="line"><a name="l12826"></a><span class="lineno">12826</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;add&quot;</span>},</div><div class="line"><a name="l12827"></a><span class="lineno">12827</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="l12828"></a><span class="lineno">12828</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target[i]}</div><div class="line"><a name="l12829"></a><span class="lineno">12829</span>&#160; });</div><div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160; ++i;</div><div class="line"><a name="l12831"></a><span class="lineno">12831</span>&#160; }</div><div class="line"><a name="l12832"></a><span class="lineno">12832</span>&#160;</div><div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12834"></a><span class="lineno">12834</span>&#160; }</div><div class="line"><a name="l12835"></a><span class="lineno">12835</span>&#160;</div><div class="line"><a name="l12836"></a><span class="lineno">12836</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l12837"></a><span class="lineno">12837</span>&#160; {</div><div class="line"><a name="l12838"></a><span class="lineno">12838</span>&#160; <span class="comment">// first pass: traverse this object&#39;s elements</span></div><div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = source.<a class="code" href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc">begin</a>(); it != source.<a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>(); ++it)</div><div class="line"><a name="l12840"></a><span class="lineno">12840</span>&#160; {</div><div class="line"><a name="l12841"></a><span class="lineno">12841</span>&#160; <span class="comment">// escape the key name to be used in a JSON patch</span></div><div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = json_pointer::escape(it.key());</div><div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160;</div><div class="line"><a name="l12844"></a><span class="lineno">12844</span>&#160; <span class="keywordflow">if</span> (target.<a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(it.key()) != target.<a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>())</div><div class="line"><a name="l12845"></a><span class="lineno">12845</span>&#160; {</div><div class="line"><a name="l12846"></a><span class="lineno">12846</span>&#160; <span class="comment">// recursive call to compare object values at key it</span></div><div class="line"><a name="l12847"></a><span class="lineno">12847</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="l12848"></a><span class="lineno">12848</span>&#160; result.insert(result.end(), temp_diff.begin(), temp_diff.end());</div><div class="line"><a name="l12849"></a><span class="lineno">12849</span>&#160; }</div><div class="line"><a name="l12850"></a><span class="lineno">12850</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l12851"></a><span class="lineno">12851</span>&#160; {</div><div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160; <span class="comment">// found a key that is not in o -&gt; remove it</span></div><div class="line"><a name="l12853"></a><span class="lineno">12853</span>&#160; result.push_back(<span class="keywordtype">object</span>(</div><div class="line"><a name="l12854"></a><span class="lineno">12854</span>&#160; {</div><div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;remove&quot;</span>},</div><div class="line"><a name="l12856"></a><span class="lineno">12856</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + key}</div><div class="line"><a name="l12857"></a><span class="lineno">12857</span>&#160; }));</div><div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160; }</div><div class="line"><a name="l12859"></a><span class="lineno">12859</span>&#160; }</div><div class="line"><a name="l12860"></a><span class="lineno">12860</span>&#160;</div><div class="line"><a name="l12861"></a><span class="lineno">12861</span>&#160; <span class="comment">// second pass: traverse other object&#39;s elements</span></div><div class="line"><a name="l12862"></a><span class="lineno">12862</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = target.<a class="code" href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc">begin</a>(); it != target.<a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>(); ++it)</div><div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160; {</div><div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160; <span class="keywordflow">if</span> (source.<a class="code" href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">find</a>(it.key()) == source.<a class="code" href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">end</a>())</div><div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160; {</div><div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160; <span class="comment">// found a key that is not in this -&gt; add it</span></div><div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = json_pointer::escape(it.key());</div><div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160; result.push_back(</div><div class="line"><a name="l12869"></a><span class="lineno">12869</span>&#160; {</div><div class="line"><a name="l12870"></a><span class="lineno">12870</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;add&quot;</span>},</div><div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + key},</div><div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, it.value()}</div><div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160; });</div><div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160; }</div><div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160; }</div><div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160;</div><div class="line"><a name="l12877"></a><span class="lineno">12877</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12878"></a><span class="lineno">12878</span>&#160; }</div><div class="line"><a name="l12879"></a><span class="lineno">12879</span>&#160;</div><div class="line"><a name="l12880"></a><span class="lineno">12880</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160; {</div><div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160; <span class="comment">// both primitive type: replace value</span></div><div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160; result.push_back(</div><div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160; {</div><div class="line"><a name="l12885"></a><span class="lineno">12885</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;replace&quot;</span>},</div><div class="line"><a name="l12886"></a><span class="lineno">12886</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path},</div><div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target}</div><div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160; });</div><div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160; }</div><div class="line"><a name="l12891"></a><span class="lineno">12891</span>&#160; }</div><div class="line"><a name="l12892"></a><span class="lineno">12892</span>&#160; }</div><div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160;</div><div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l12895"></a><span class="lineno">12895</span>&#160; }</div><div class="line"><a name="l12896"></a><span class="lineno">12896</span>&#160;</div><div class="line"><a name="l12898"></a><span class="lineno">12898</span>&#160;};</div><div class="line"><a name="l12899"></a><span class="lineno">12899</span>&#160;</div><div class="line"><a name="l12901"></a><span class="lineno">12901</span>&#160;<span class="comment">// presets //</span></div><div class="line"><a name="l12903"></a><span class="lineno">12903</span>&#160;<span class="comment"></span></div><div class="line"><a name="l12912"></a><span class="lineno">12912</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="l12913"></a><span class="lineno">12913</span>&#160;} <span class="comment">// namespace nlohmann</span></div><div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160;</div><div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160;</div><div class="line"><a name="l12917"></a><span class="lineno">12917</span>&#160;<span class="comment">// nonmember support //</span></div><div class="line"><a name="l12919"></a><span class="lineno">12919</span>&#160;<span class="comment"></span></div><div class="line"><a name="l12920"></a><span class="lineno">12920</span>&#160;<span class="comment">// specialization of std::swap, and std::hash</span></div><div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacestd.html">std</a></div><div class="line"><a name="l12922"></a><span class="lineno">12922</span>&#160;{</div><div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l12929"></a><span class="lineno">12929</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="l12930"></a><span class="lineno">12930</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">nlohmann::json</a>&amp; j2) noexcept(</div><div class="line"><a name="l12931"></a><span class="lineno">12931</span>&#160; is_nothrow_move_constructible&lt;nlohmann::json&gt;::value and</div><div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160; is_nothrow_move_assignable&lt;nlohmann::json&gt;::value</div><div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160; )</div><div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160;{</div><div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160; j1.swap(j2);</div><div class="line"><a name="l12936"></a><span class="lineno">12936</span>&#160;}</div><div class="line"><a name="l12937"></a><span class="lineno">12937</span>&#160;</div><div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l12940"></a><span class="lineno">12940</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="l12941"></a><span class="lineno">12941</span>&#160;{</div><div class="line"><a name="l12947"></a><span class="lineno">12947</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="l12948"></a><span class="lineno">12948</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l12949"></a><span class="lineno">12949</span>&#160; <span class="comment">// a naive hashing via the string representation</span></div><div class="line"><a name="l12950"></a><span class="lineno">12950</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="l12951"></a><span class="lineno"><a class="line" href="structstd_1_1hash_3_01nlohmann_1_1json_01_4_aec1567d1fa47dbe5b77954dce3a55b64.html#aec1567d1fa47dbe5b77954dce3a55b64">12951</a></span>&#160; <span class="keywordflow">return</span> h(j.<a class="code" href="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422.html#a5319dc1bb9dfe19ce7ff559aaded3422">dump</a>());</div><div class="line"><a name="l12952"></a><span class="lineno">12952</span>&#160; }</div><div class="line"><a name="l12953"></a><span class="lineno">12953</span>&#160;};</div><div class="line"><a name="l12954"></a><span class="lineno">12954</span>&#160;} <span class="comment">// namespace std</span></div><div class="line"><a name="l12955"></a><span class="lineno">12955</span>&#160;</div><div class="line"><a name="l12969"></a><span class="lineno">12969</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 n)</div><div class="line"><a name="l12970"></a><span class="lineno">12970</span>&#160;{</div><div class="line"><a name="l12971"></a><span class="lineno">12971</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">nlohmann::json::parse</a>(s, s + n);</div><div class="line"><a name="l12972"></a><span class="lineno">12972</span>&#160;}</div><div class="line"><a name="l12973"></a><span class="lineno">12973</span>&#160;</div><div class="line"><a name="l12987"></a><span class="lineno">12987</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 n)</div><div class="line"><a name="l12988"></a><span class="lineno">12988</span>&#160;{</div><div class="line"><a name="l12989"></a><span class="lineno">12989</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">nlohmann::json::json_pointer</a>(std::string(s, n));</div><div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160;}</div><div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160;</div><div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160;<span class="comment">// restore GCC/clang diagnostic settings</span></div><div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic pop</span></div><div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160;</div><div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160;<span class="comment">// clean up</span></div><div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160;<span class="preprocessor">#undef JSON_CATCH</span></div><div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160;<span class="preprocessor">#undef JSON_DEPRECATED</span></div><div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160;<span class="preprocessor">#undef JSON_THROW</span></div><div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160;<span class="preprocessor">#undef JSON_TRY</span></div><div class="line"><a name="l13002"></a><span class="lineno">13002</span>&#160;</div><div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4_html_aefee1f777198c68724bd127e0c8abbe4"><div class="ttname"><a href="classnlohmann_1_1basic__json_aefee1f777198c68724bd127e0c8abbe4.html#aefee1f777198c68724bd127e0c8abbe4">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#l01083">json.hpp:1083</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#l06141">json.hpp:6141</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4b1fb3671ade9afc8d33b2c9510acbfc_html_a4b1fb3671ade9afc8d33b2c9510acbfc"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4b1fb3671ade9afc8d33b2c9510acbfc.html#a4b1fb3671ade9afc8d33b2c9510acbfc">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#l04200">json.hpp:4200</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7768841baaaa7a21098a401c932efaff_html_a7768841baaaa7a21098a401c932efaff"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7768841baaaa7a21098a401c932efaff.html#a7768841baaaa7a21098a401c932efaff">nlohmann::basic_json::json_serializer</a></div><div class="ttdeci">JSONSerializer&lt; T, SFINAE &gt; json_serializer</div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01055">json.hpp:1055</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97_html_a88d6103cb3620410b35200ee8e313d97"><div class="ttname"><a href="classnlohmann_1_1basic__json_a88d6103cb3620410b35200ee8e313d97.html#a88d6103cb3620410b35200ee8e313d97">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#l01618">json.hpp:1618</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082_html_a4c919102a9b4fe0d588af64801436082"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4c919102a9b4fe0d588af64801436082.html#a4c919102a9b4fe0d588af64801436082">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#l01407">json.hpp:1407</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a4d0518f3f2edae9dbaf7ef02f4f20add_html_a4d0518f3f2edae9dbaf7ef02f4f20add"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a4d0518f3f2edae9dbaf7ef02f4f20add.html#a4d0518f3f2edae9dbaf7ef02f4f20add">nlohmann::basic_json::iter_impl::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#l08849">json.hpp:8849</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#l06524">json.hpp:6524</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_adb4db7abbc5ba12c9273f032a7b89198_html_adb4db7abbc5ba12c9273f032a7b89198"><div class="ttname"><a href="classnlohmann_1_1basic__json_adb4db7abbc5ba12c9273f032a7b89198.html#adb4db7abbc5ba12c9273f032a7b89198">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#l04943">json.hpp:4943</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9cb592cd85c14f3e845e30d51cf17efb_html_a9cb592cd85c14f3e845e30d51cf17efb"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9cb592cd85c14f3e845e30d51cf17efb.html#a9cb592cd85c14f3e845e30d51cf17efb">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#l03760">json.hpp:3760</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261_html_a5b7f3c5d86fe89a65d9552c1cac37261"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a5b7f3c5d86fe89a65d9552c1cac37261.html#a5b7f3c5d86fe89a65d9552c1cac37261">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#l09456">json.hpp:9456</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5795b029dbf28e0cb2c7a439ec5d0a88_html_a5795b029dbf28e0cb2c7a439ec5d0a88"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5795b029dbf28e0cb2c7a439ec5d0a88.html#a5795b029dbf28e0cb2c7a439ec5d0a88">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#l04914">json.hpp:4914</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc_html_a0ff28dac23f2bdecee9564d07f51dcdc"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0ff28dac23f2bdecee9564d07f51dcdc.html#a0ff28dac23f2bdecee9564d07f51dcdc">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#l04670">json.hpp:4670</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab275a3e00a40189e96d244de6c8f311a_html_ab275a3e00a40189e96d244de6c8f311a"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab275a3e00a40189e96d244de6c8f311a.html#ab275a3e00a40189e96d244de6c8f311a">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(const CharT 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#l06322">json.hpp:6322</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a3bedce4ada748251e86c7924be54e210_html_a3bedce4ada748251e86c7924be54e210"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a3bedce4ada748251e86c7924be54e210.html#a3bedce4ada748251e86c7924be54e210">nlohmann::basic_json::iter_impl::operator-</a></div><div class="ttdeci">difference_type operator-(const iter_impl &amp;other) const</div><div class="ttdoc">return difference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09342">json.hpp:9342</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c_html_a13e032a02a7fd8a93fdddc2fcbc4763c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a13e032a02a7fd8a93fdddc2fcbc4763c.html#a13e032a02a7fd8a93fdddc2fcbc4763c">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#l04741">json.hpp:4741</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7_html_a2b2d781d7f2a4ee41bc0016e931cadf7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2b2d781d7f2a4ee41bc0016e931cadf7.html#a2b2d781d7f2a4ee41bc0016e931cadf7">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#l02681">json.hpp:2681</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_adc29dd6358ff7a9062d7e168c24e7484_html_adc29dd6358ff7a9062d7e168c24e7484"><div class="ttname"><a href="classnlohmann_1_1basic__json_adc29dd6358ff7a9062d7e168c24e7484.html#adc29dd6358ff7a9062d7e168c24e7484">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#l05318">json.hpp:5318</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4b3f7eb2d4625d95a51fbbdceb7c5f39_html_a4b3f7eb2d4625d95a51fbbdceb7c5f39"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4b3f7eb2d4625d95a51fbbdceb7c5f39.html#a4b3f7eb2d4625d95a51fbbdceb7c5f39">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#l04408">json.hpp:4408</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab0e886db6e9fa91ff9fd853333fed05b_html_ab0e886db6e9fa91ff9fd853333fed05b"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab0e886db6e9fa91ff9fd853333fed05b.html#ab0e886db6e9fa91ff9fd853333fed05b">nlohmann::basic_json::operator!=</a></div><div class="ttdeci">friend bool operator!=(const ScalarType 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#l06017">json.hpp:6017</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae9be9e956bfc4658f35d17c6aa72b063_html_ae9be9e956bfc4658f35d17c6aa72b063"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae9be9e956bfc4658f35d17c6aa72b063.html#ae9be9e956bfc4658f35d17c6aa72b063">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#l01940">json.hpp:1940</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca_html_a9f42ee7d10eee2d5a73fd94ca7f767ca"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9f42ee7d10eee2d5a73fd94ca7f767ca.html#a9f42ee7d10eee2d5a73fd94ca7f767ca">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#l02205">json.hpp:2205</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a869c900ee02cf1a68988dcce3b375424_html_a869c900ee02cf1a68988dcce3b375424"><div class="ttname"><a href="classnlohmann_1_1basic__json_a869c900ee02cf1a68988dcce3b375424.html#a869c900ee02cf1a68988dcce3b375424">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#l04162">json.hpp:4162</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#l05995">json.hpp:5995</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a53a239bddcbd557f335d275c806535c1_html_a53a239bddcbd557f335d275c806535c1"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a53a239bddcbd557f335d275c806535c1.html#a53a239bddcbd557f335d275c806535c1">nlohmann::basic_json::iter_impl::operator&gt;=</a></div><div class="ttdeci">bool operator&gt;=(const iter_impl &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#l09271">json.hpp:9271</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a94c010c069b5aed9e064e0579eac9a64_html_a94c010c069b5aed9e064e0579eac9a64"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a94c010c069b5aed9e064e0579eac9a64.html#a94c010c069b5aed9e064e0579eac9a64">nlohmann::basic_json::iter_impl::iter_impl</a></div><div class="ttdeci">iter_impl(const iter_impl &amp;other) noexcept</div><div class="ttdoc">copy constructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l08925">json.hpp:8925</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abe197e9f3184487805cfb5bba6fd5938_html_abe197e9f3184487805cfb5bba6fd5938"><div class="ttname"><a href="classnlohmann_1_1basic__json_abe197e9f3184487805cfb5bba6fd5938.html#abe197e9f3184487805cfb5bba6fd5938">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#l02276">json.hpp:2276</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afbd800010b67619463c0fce6e74f7878_html_afbd800010b67619463c0fce6e74f7878"><div class="ttname"><a href="classnlohmann_1_1basic__json_afbd800010b67619463c0fce6e74f7878.html#afbd800010b67619463c0fce6e74f7878">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#l03438">json.hpp:3438</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab2716cbe2e997ab8309926b87f044434_html_ab2716cbe2e997ab8309926b87f044434"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab2716cbe2e997ab8309926b87f044434.html#ab2716cbe2e997ab8309926b87f044434">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#l05399">json.hpp:5399</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#l01039">json.hpp:1039</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad154c4228e4867c67b25a6601ced89bd_html_ad154c4228e4867c67b25a6601ced89bd"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad154c4228e4867c67b25a6601ced89bd.html#ad154c4228e4867c67b25a6601ced89bd">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#l05701">json.hpp:5701</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a88cbcefe9a3f4d294bed0653550a5cb9_html_a88cbcefe9a3f4d294bed0653550a5cb9"><div class="ttname"><a href="classnlohmann_1_1basic__json_a88cbcefe9a3f4d294bed0653550a5cb9.html#a88cbcefe9a3f4d294bed0653550a5cb9">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#l04531">json.hpp:4531</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8_html_a3dddd7fa38b36e2531700ceb4a1ce9a8"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a3dddd7fa38b36e2531700ceb4a1ce9a8.html#a3dddd7fa38b36e2531700ceb4a1ce9a8">nlohmann::basic_json::iter_impl::pointer</a></div><div class="ttdeci">typename std::conditional&lt; std::is_const&lt; U &gt;::value, typename basic_json::const_pointer, typename basic_json::pointer &gt;::type 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#l08855">json.hpp:8855</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1c15707055088cd5436ae91db72cbe67_html_a1c15707055088cd5436ae91db72cbe67"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1c15707055088cd5436ae91db72cbe67.html#a1c15707055088cd5436ae91db72cbe67">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#l04751">json.hpp:4751</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a6d2f26a0a84787a43c989c88e2b7023b_html_a6d2f26a0a84787a43c989c88e2b7023b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a6d2f26a0a84787a43c989c88e2b7023b.html#a6d2f26a0a84787a43c989c88e2b7023b">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#l04597">json.hpp:4597</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af4ac14224fbdd29d3547fcb11bb55c8f_html_af4ac14224fbdd29d3547fcb11bb55c8f"><div class="ttname"><a href="classnlohmann_1_1basic__json_af4ac14224fbdd29d3547fcb11bb55c8f.html#af4ac14224fbdd29d3547fcb11bb55c8f">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#l01102">json.hpp:1102</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aef302e3ae215e46e5035d0e4fdf47235_html_aef302e3ae215e46e5035d0e4fdf47235"><div class="ttname"><a href="classnlohmann_1_1basic__json_aef302e3ae215e46e5035d0e4fdf47235.html#aef302e3ae215e46e5035d0e4fdf47235">nlohmann::basic_json::operator==</a></div><div class="ttdeci">friend bool operator==(const ScalarType lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: equal </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_ac871e3b03fb2eeca9a8de4db2bea760f_html_ac871e3b03fb2eeca9a8de4db2bea760f"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac871e3b03fb2eeca9a8de4db2bea760f.html#ac871e3b03fb2eeca9a8de4db2bea760f">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#l03714">json.hpp:3714</a></div></div>
<div class="ttc" id="structnlohmann_1_1adl__serializer_html"><div class="ttname"><a href="structnlohmann_1_1adl__serializer.html">nlohmann::adl_serializer</a></div><div class="ttdoc">default JSONSerializer template argument </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00911">json.hpp:911</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99b0f5e39f0edc9311e28d06e4f28db8_html_a99b0f5e39f0edc9311e28d06e4f28db8"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99b0f5e39f0edc9311e28d06e4f28db8.html#a99b0f5e39f0edc9311e28d06e4f28db8">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#l09512">json.hpp:9512</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db_html_aeed33787bd362c7ead59a4ba945392db"><div class="ttname"><a href="classnlohmann_1_1basic__json_aeed33787bd362c7ead59a4ba945392db.html#aeed33787bd362c7ead59a4ba945392db">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#l04581">json.hpp:4581</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9f68a0af820c3ced7f9d17851ce4c22d_html_a9f68a0af820c3ced7f9d17851ce4c22d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9f68a0af820c3ced7f9d17851ce4c22d.html#a9f68a0af820c3ced7f9d17851ce4c22d">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#l02738">json.hpp:2738</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49_html_aa1eb13d5aa86f80cbee6c58e90fbaf49"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa1eb13d5aa86f80cbee6c58e90fbaf49.html#aa1eb13d5aa86f80cbee6c58e90fbaf49">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#l01282">json.hpp:1282</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e_html_a86f339e8449cce96b89e86635a7d389e"><div class="ttname"><a href="classnlohmann_1_1basic__json_a86f339e8449cce96b89e86635a7d389e.html#a86f339e8449cce96b89e86635a7d389e">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#l06284">json.hpp:6284</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_af6f10c91f59565b6c6e7205ab6969a89_html_af6f10c91f59565b6c6e7205ab6969a89"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_af6f10c91f59565b6c6e7205ab6969a89.html#af6f10c91f59565b6c6e7205ab6969a89">nlohmann::basic_json::iter_impl::operator!=</a></div><div class="ttdeci">bool operator!=(const iter_impl &amp;other) const</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09211">json.hpp:9211</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e_html_ae09599e9cb4a947020a0265c0c4f3d5e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_ae09599e9cb4a947020a0265c0c4f3d5e.html#ae09599e9cb4a947020a0265c0c4f3d5e">nlohmann::basic_json::iter_impl::reference</a></div><div class="ttdeci">typename std::conditional&lt; std::is_const&lt; U &gt;::value, typename basic_json::const_reference, typename basic_json::reference &gt;::type 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#l08859">json.hpp:8859</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a42347bbce75ba5571e292a3540af30e0_html_a42347bbce75ba5571e292a3540af30e0"><div class="ttname"><a href="classnlohmann_1_1basic__json_a42347bbce75ba5571e292a3540af30e0.html#a42347bbce75ba5571e292a3540af30e0">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#l02575">json.hpp:2575</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aab256df8c5594ec693035822fa1e2904_html_aab256df8c5594ec693035822fa1e2904"><div class="ttname"><a href="classnlohmann_1_1basic__json_aab256df8c5594ec693035822fa1e2904.html#aab256df8c5594ec693035822fa1e2904">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#l02542">json.hpp:2542</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_adaa1ed0a889d86c8e0216a3d66980f76_html_adaa1ed0a889d86c8e0216a3d66980f76"><div class="ttname"><a href="classnlohmann_1_1basic__json_adaa1ed0a889d86c8e0216a3d66980f76.html#adaa1ed0a889d86c8e0216a3d66980f76">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#l05836">json.hpp:5836</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac31f12587d2f1a3be5ffc394aa9d72a4_html_ac31f12587d2f1a3be5ffc394aa9d72a4"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac31f12587d2f1a3be5ffc394aa9d72a4.html#ac31f12587d2f1a3be5ffc394aa9d72a4">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#l05803">json.hpp:5803</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4cd30efe5c33a7cf73a0c6495bb16054_html_a4cd30efe5c33a7cf73a0c6495bb16054"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4cd30efe5c33a7cf73a0c6495bb16054.html#a4cd30efe5c33a7cf73a0c6495bb16054">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#l06352">json.hpp:6352</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_a0cf23e7d44e78bb9014484971af2f40f_html_a0cf23e7d44e78bb9014484971af2f40f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0cf23e7d44e78bb9014484971af2f40f.html#a0cf23e7d44e78bb9014484971af2f40f">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#l05416">json.hpp:5416</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5261eba9637f59d17d6cab5f14ce5747_html_a5261eba9637f59d17d6cab5f14ce5747"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5261eba9637f59d17d6cab5f14ce5747.html#a5261eba9637f59d17d6cab5f14ce5747">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#l04630">json.hpp:4630</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a26c551e1cee90ee52be00b5165804598_html_a26c551e1cee90ee52be00b5165804598"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a26c551e1cee90ee52be00b5165804598.html#a26c551e1cee90ee52be00b5165804598">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#l09532">json.hpp:9532</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ae446e535faf6bf4a20d75ffc8525d20d_html_ae446e535faf6bf4a20d75ffc8525d20d"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ae446e535faf6bf4a20d75ffc8525d20d.html#ae446e535faf6bf4a20d75ffc8525d20d">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#l09490">json.hpp:9490</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_adbe1b700b9cdc38f6991fc68683a9c2c_html_adbe1b700b9cdc38f6991fc68683a9c2c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_adbe1b700b9cdc38f6991fc68683a9c2c.html#adbe1b700b9cdc38f6991fc68683a9c2c">nlohmann::basic_json::iter_impl::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#l08861">json.hpp:8861</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_abc37aca3fee5d832f254c94e1cd2f216_html_abc37aca3fee5d832f254c94e1cd2f216"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_abc37aca3fee5d832f254c94e1cd2f216.html#abc37aca3fee5d832f254c94e1cd2f216">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#l09484">json.hpp:9484</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a926f2f9189403e72e4f694a06d4d021a_html_a926f2f9189403e72e4f694a06d4d021a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a926f2f9189403e72e4f694a06d4d021a.html#a926f2f9189403e72e4f694a06d4d021a">nlohmann::basic_json::iter_impl::operator-</a></div><div class="ttdeci">iter_impl operator-(difference_type i)</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09331">json.hpp:9331</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2f47d3c6a441c57dd2be00449fbb88e1_html_a2f47d3c6a441c57dd2be00449fbb88e1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2f47d3c6a441c57dd2be00449fbb88e1.html#a2f47d3c6a441c57dd2be00449fbb88e1">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#l05129">json.hpp:5129</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afbad48316e7cd37366ba3ac5d7e5859e_html_afbad48316e7cd37366ba3ac5d7e5859e"><div class="ttname"><a href="classnlohmann_1_1basic__json_afbad48316e7cd37366ba3ac5d7e5859e.html#afbad48316e7cd37366ba3ac5d7e5859e">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#l02082">json.hpp:2082</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8_html_a73ae333487310e3302135189ce8ff5d8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a73ae333487310e3302135189ce8ff5d8.html#a73ae333487310e3302135189ce8ff5d8">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#l03531">json.hpp:3531</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a757e90574a742ae9cc54c97422fb3043_html_a757e90574a742ae9cc54c97422fb3043"><div class="ttname"><a href="classnlohmann_1_1basic__json_a757e90574a742ae9cc54c97422fb3043.html#a757e90574a742ae9cc54c97422fb3043">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#l02396">json.hpp:2396</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_ada3100cdb8700566051828f1355fa745_html_ada3100cdb8700566051828f1355fa745"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745">nlohmann::basic_json::iter_impl::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#l08840">json.hpp:8840</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_ab58eb87c2362183da21c70be74c2b38c_html_ab58eb87c2362183da21c70be74c2b38c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_ab58eb87c2362183da21c70be74c2b38c.html#ab58eb87c2362183da21c70be74c2b38c">nlohmann::basic_json::iter_impl::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#l09369">json.hpp:9369</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2b9852390abb4b1ef5fac6984e2fc0f3_html_a2b9852390abb4b1ef5fac6984e2fc0f3"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2b9852390abb4b1ef5fac6984e2fc0f3.html#a2b9852390abb4b1ef5fac6984e2fc0f3">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#l02812">json.hpp:2812</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4057c5425f4faacfe39a8046871786ca_html_a4057c5425f4faacfe39a8046871786ca"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4057c5425f4faacfe39a8046871786ca.html#a4057c5425f4faacfe39a8046871786ca">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#l01072">json.hpp:1072</a></div></div>
<div class="ttc" id="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_ae065098e24b08ea79a359950190006d8_html_ae065098e24b08ea79a359950190006d8"><div class="ttname"><a href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_ae065098e24b08ea79a359950190006d8.html#ae065098e24b08ea79a359950190006d8">nlohmann::basic_json::lexer::strtonum::strtonum</a></div><div class="ttdeci">strtonum(const char *start, const char *end)</div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l11103">json.hpp:11103</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_af3beb0d08550188082ea64d8becd12fb_html_af3beb0d08550188082ea64d8becd12fb"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_af3beb0d08550188082ea64d8becd12fb.html#af3beb0d08550188082ea64d8becd12fb">nlohmann::basic_json::iter_impl::operator==</a></div><div class="ttdeci">bool operator==(const iter_impl &amp;other) const</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09178">json.hpp:9178</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a6362b88718eb5c6d4fed6a61eed44b95_html_a6362b88718eb5c6d4fed6a61eed44b95"><div class="ttname"><a href="classnlohmann_1_1basic__json_a6362b88718eb5c6d4fed6a61eed44b95.html#a6362b88718eb5c6d4fed6a61eed44b95">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#l02711">json.hpp:2711</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3acba9c6ceb7214e565fe08c3ba5b352_html_a3acba9c6ceb7214e565fe08c3ba5b352"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3acba9c6ceb7214e565fe08c3ba5b352.html#a3acba9c6ceb7214e565fe08c3ba5b352">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#l04192">json.hpp:4192</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_ae0a628811b09b9adea6d68c3a5c4ca2a_html_ae0a628811b09b9adea6d68c3a5c4ca2a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_ae0a628811b09b9adea6d68c3a5c4ca2a.html#ae0a628811b09b9adea6d68c3a5c4ca2a">nlohmann::basic_json::iter_impl::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#l09019">json.hpp:9019</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1e0769d22d54573f294da0e5c6abc9de_html_a1e0769d22d54573f294da0e5c6abc9de"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1e0769d22d54573f294da0e5c6abc9de.html#a1e0769d22d54573f294da0e5c6abc9de">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#l04885">json.hpp:4885</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab17b18f161ecd014074790e25449094a_html_ab17b18f161ecd014074790e25449094a"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab17b18f161ecd014074790e25449094a.html#ab17b18f161ecd014074790e25449094a">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#l03922">json.hpp:3922</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b_html_a39f2cd0b58106097e0e67bf185cc519b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a39f2cd0b58106097e0e67bf185cc519b.html#a39f2cd0b58106097e0e67bf185cc519b">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#l01077">json.hpp:1077</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4f0f5dd42b2987ff20306ed78bd31d1d_html_a4f0f5dd42b2987ff20306ed78bd31d1d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4f0f5dd42b2987ff20306ed78bd31d1d.html#a4f0f5dd42b2987ff20306ed78bd31d1d">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#l04680">json.hpp:4680</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac382f3d2bc6a5d52d936e4e40593f03b_html_ac382f3d2bc6a5d52d936e4e40593f03b"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac382f3d2bc6a5d52d936e4e40593f03b.html#ac382f3d2bc6a5d52d936e4e40593f03b">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#l03451">json.hpp:3451</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a60e2723dae1c6d537fc914c664f1a81c_html_a60e2723dae1c6d537fc914c664f1a81c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a60e2723dae1c6d537fc914c664f1a81c.html#a60e2723dae1c6d537fc914c664f1a81c">nlohmann::basic_json::iter_impl::operator++</a></div><div class="ttdeci">iter_impl &amp; operator++()</div><div class="ttdoc">pre-increment (++it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09103">json.hpp:9103</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a233b02b0839ef798942dd46157cc0fe6_html_a233b02b0839ef798942dd46157cc0fe6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a233b02b0839ef798942dd46157cc0fe6.html#a233b02b0839ef798942dd46157cc0fe6">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#l03798">json.hpp:3798</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aea8c06bb8e632f14cd77632519213d75_html_aea8c06bb8e632f14cd77632519213d75"><div class="ttname"><a href="classnlohmann_1_1basic__json_aea8c06bb8e632f14cd77632519213d75.html#aea8c06bb8e632f14cd77632519213d75">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#l04935">json.hpp:4935</a></div></div>
<div class="ttc" id="structnlohmann_1_1adl__serializer_ab39cad07c1a2bf4414d6cae5215b4e7a_html_ab39cad07c1a2bf4414d6cae5215b4e7a"><div class="ttname"><a href="structnlohmann_1_1adl__serializer_ab39cad07c1a2bf4414d6cae5215b4e7a.html#ab39cad07c1a2bf4414d6cae5215b4e7a">nlohmann::adl_serializer::from_json</a></div><div class="ttdeci">static void from_json(BasicJsonType &amp;&amp;j, ValueType &amp;val) noexcept(noexcept(::nlohmann::from_json(std::forward&lt; BasicJsonType &gt;(j), val)))</div><div class="ttdoc">convert a JSON value to any value type </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00923">json.hpp:923</a></div></div>
<div class="ttc" id="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989_html_af1b3dc99a67a854750437a60a22f4989"><div class="ttname"><a href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_af1b3dc99a67a854750437a60a22f4989.html#af1b3dc99a67a854750437a60a22f4989">nlohmann::basic_json::lexer::strtonum::to</a></div><div class="ttdeci">bool to(T &amp;val) const</div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l11114">json.hpp:11114</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3eafe0b1fb2f2c443f1b3fea55c8a470_html_a3eafe0b1fb2f2c443f1b3fea55c8a470"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3eafe0b1fb2f2c443f1b3fea55c8a470.html#a3eafe0b1fb2f2c443f1b3fea55c8a470">nlohmann::basic_json::from_msgpack</a></div><div class="ttdeci">static basic_json from_msgpack(const std::vector&lt; uint8_t &gt; &amp;v, const size_t start_index=0)</div><div class="ttdoc">create a JSON value from a byte vector in MessagePack format </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07974">json.hpp:7974</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a3b4cd7db9a93609f8e05f1759d38d633_html_a3b4cd7db9a93609f8e05f1759d38d633"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a3b4cd7db9a93609f8e05f1759d38d633.html#a3b4cd7db9a93609f8e05f1759d38d633">nlohmann::basic_json::iter_impl::operator+</a></div><div class="ttdeci">iter_impl operator+(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09320">json.hpp:9320</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc_html_a98e611d67b7bd75307de99c9358ab2dc"><div class="ttname"><a href="classnlohmann_1_1basic__json_a98e611d67b7bd75307de99c9358ab2dc.html#a98e611d67b7bd75307de99c9358ab2dc">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#l01479">json.hpp:1479</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65_html_aef9ce5dd2381caee1f8ddcdb5bdd9c65"><div class="ttname"><a href="classnlohmann_1_1basic__json_aef9ce5dd2381caee1f8ddcdb5bdd9c65.html#aef9ce5dd2381caee1f8ddcdb5bdd9c65">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#l02941">json.hpp:2941</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab157adb4de8475b452da9ebf04f2de15_html_ab157adb4de8475b452da9ebf04f2de15"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab157adb4de8475b452da9ebf04f2de15.html#ab157adb4de8475b452da9ebf04f2de15">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#l03574">json.hpp:3574</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989_html_ab906e29b5d83ac162e823ada2156b989"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab906e29b5d83ac162e823ada2156b989.html#ab906e29b5d83ac162e823ada2156b989">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#l01550">json.hpp:1550</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aba21440ea1aff44f718285ed7d6d20d9_html_aba21440ea1aff44f718285ed7d6d20d9"><div class="ttname"><a href="classnlohmann_1_1basic__json_aba21440ea1aff44f718285ed7d6d20d9.html#aba21440ea1aff44f718285ed7d6d20d9">nlohmann::basic_json::operator==</a></div><div class="ttdeci">friend bool operator==(const_reference lhs, const ScalarType rhs) noexcept</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05963">json.hpp:5963</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#l06185">json.hpp:6185</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#l06046">json.hpp:6046</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96_html_a25e27ad0c6d53c01871c5485e1f75b96"><div class="ttname"><a href="classnlohmann_1_1basic__json_a25e27ad0c6d53c01871c5485e1f75b96.html#a25e27ad0c6d53c01871c5485e1f75b96">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#l05063">json.hpp:5063</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a1270fe04d4801caf51e7464273305ba8_html_a1270fe04d4801caf51e7464273305ba8"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a1270fe04d4801caf51e7464273305ba8.html#a1270fe04d4801caf51e7464273305ba8">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#l09461">json.hpp:9461</a></div></div>
<div class="ttc" id="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum_html"><div class="ttname"><a href="structnlohmann_1_1basic__json_1_1lexer_1_1strtonum.html">nlohmann::basic_json::lexer::strtonum</a></div><div class="ttdoc">parse string into a built-in arithmetic type as if the current locale is POSIX. </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l11100">json.hpp:11100</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad865d6c291b237ae508d5cb2146b5877_html_ad865d6c291b237ae508d5cb2146b5877"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad865d6c291b237ae508d5cb2146b5877.html#ad865d6c291b237ae508d5cb2146b5877">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#l04710">json.hpp:4710</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abb8eaa633584b5aff9c8fcd242f25ca8_html_abb8eaa633584b5aff9c8fcd242f25ca8"><div class="ttname"><a href="classnlohmann_1_1basic__json_abb8eaa633584b5aff9c8fcd242f25ca8.html#abb8eaa633584b5aff9c8fcd242f25ca8">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#l03955">json.hpp:3955</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aef6d0eeccee7c5c7e1317c2ea1607fab_html_aef6d0eeccee7c5c7e1317c2ea1607fab"><div class="ttname"><a href="classnlohmann_1_1basic__json_aef6d0eeccee7c5c7e1317c2ea1607fab.html#aef6d0eeccee7c5c7e1317c2ea1607fab">nlohmann::basic_json::meta</a></div><div class="ttdeci">static basic_json meta()</div><div class="ttdoc">returns version information on the library </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01130">json.hpp:1130</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3bd712a1351ba28e5440fac2359da1cb_html_a3bd712a1351ba28e5440fac2359da1cb"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3bd712a1351ba28e5440fac2359da1cb.html#a3bd712a1351ba28e5440fac2359da1cb">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#l06361">json.hpp:6361</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab7df4291dda0a80d86f74427cc3993ba_html_ab7df4291dda0a80d86f74427cc3993ba"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab7df4291dda0a80d86f74427cc3993ba.html#ab7df4291dda0a80d86f74427cc3993ba">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#l04139">json.hpp:4139</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab6816ae5100409254ed0a8bc21c387bb_html_ab6816ae5100409254ed0a8bc21c387bb"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab6816ae5100409254ed0a8bc21c387bb.html#ab6816ae5100409254ed0a8bc21c387bb">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#l02229">json.hpp:2229</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a060bdfaef94d3ca21dd6e7034980ea9c_html_a060bdfaef94d3ca21dd6e7034980ea9c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a060bdfaef94d3ca21dd6e7034980ea9c.html#a060bdfaef94d3ca21dd6e7034980ea9c">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#l09471">json.hpp:9471</a></div></div>
<div class="ttc" id="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a69afe041fa2aeac2239b65ae88b64af8_html_a69afe041fa2aeac2239b65ae88b64af8"><div class="ttname"><a href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a69afe041fa2aeac2239b65ae88b64af8.html#a69afe041fa2aeac2239b65ae88b64af8">nlohmann::anonymous_namespace{json.hpp}::from_json</a></div><div class="ttdeci">constexpr const auto &amp; from_json</div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00899">json.hpp:899</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af51506d91ecf911c97521e10a047c841_html_af51506d91ecf911c97521e10a047c841"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af51506d91ecf911c97521e10a047c841.html#af51506d91ecf911c97521e10a047c841">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#l09539">json.hpp:9539</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a943e8cb182d0f2365c76d64b42eaa6fd_html_a943e8cb182d0f2365c76d64b42eaa6fd"><div class="ttname"><a href="classnlohmann_1_1basic__json_a943e8cb182d0f2365c76d64b42eaa6fd.html#a943e8cb182d0f2365c76d64b42eaa6fd">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#l02782">json.hpp:2782</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#l06241">json.hpp:6241</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a93403e803947b86f4da2d1fb3345cf2c_html_a93403e803947b86f4da2d1fb3345cf2c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a93403e803947b86f4da2d1fb3345cf2c.html#a93403e803947b86f4da2d1fb3345cf2c">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#l03621">json.hpp:3621</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aefa46bd2d96bb77a38d1c8b431eab44f_html_aefa46bd2d96bb77a38d1c8b431eab44f"><div class="ttname"><a href="classnlohmann_1_1basic__json_aefa46bd2d96bb77a38d1c8b431eab44f.html#aefa46bd2d96bb77a38d1c8b431eab44f">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#l03361">json.hpp:3361</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afefc38fc08bdb7a9a7474b5ab4a1140f_html_afefc38fc08bdb7a9a7474b5ab4a1140f"><div class="ttname"><a href="classnlohmann_1_1basic__json_afefc38fc08bdb7a9a7474b5ab4a1140f.html#afefc38fc08bdb7a9a7474b5ab4a1140f">nlohmann::basic_json::operator!=</a></div><div class="ttdeci">friend bool operator!=(const_reference lhs, const ScalarType rhs) noexcept</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06006">json.hpp:6006</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#l00108">json.hpp:108</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abac8af76067f1e8fdca9052882c74428_html_abac8af76067f1e8fdca9052882c74428"><div class="ttname"><a href="classnlohmann_1_1basic__json_abac8af76067f1e8fdca9052882c74428.html#abac8af76067f1e8fdca9052882c74428">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#l02841">json.hpp:2841</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a32124a16dc80729d964d9caf607c2bc8_html_a32124a16dc80729d964d9caf607c2bc8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a32124a16dc80729d964d9caf607c2bc8.html#a32124a16dc80729d964d9caf607c2bc8">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#l01916">json.hpp:1916</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af04099cd32946ab37cfa6004ad5a7863_html_af04099cd32946ab37cfa6004ad5a7863"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af04099cd32946ab37cfa6004ad5a7863.html#af04099cd32946ab37cfa6004ad5a7863">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#l09466">json.hpp:9466</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abf04978d85a2d5c4754f4806d42f46fd_html_abf04978d85a2d5c4754f4806d42f46fd"><div class="ttname"><a href="classnlohmann_1_1basic__json_abf04978d85a2d5c4754f4806d42f46fd.html#abf04978d85a2d5c4754f4806d42f46fd">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#l05368">json.hpp:5368</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c_html_af8f511af124e82e4579f444b4175787c"><div class="ttname"><a href="classnlohmann_1_1basic__json_af8f511af124e82e4579f444b4175787c.html#af8f511af124e82e4579f444b4175787c">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#l02919">json.hpp:2919</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aea1085f2d35cc0e1ce119cf0110119e6_html_aea1085f2d35cc0e1ce119cf0110119e6"><div class="ttname"><a href="classnlohmann_1_1basic__json_aea1085f2d35cc0e1ce119cf0110119e6.html#aea1085f2d35cc0e1ce119cf0110119e6">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#l05284">json.hpp:5284</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a344164ae696f1c5e672d1e7d3ac20fd9_html_a344164ae696f1c5e672d1e7d3ac20fd9"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a344164ae696f1c5e672d1e7d3ac20fd9.html#a344164ae696f1c5e672d1e7d3ac20fd9">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#l09520">json.hpp:9520</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a33b4bf898b857c962e798fc7f6e86e70_html_a33b4bf898b857c962e798fc7f6e86e70"><div class="ttname"><a href="classnlohmann_1_1basic__json_a33b4bf898b857c962e798fc7f6e86e70.html#a33b4bf898b857c962e798fc7f6e86e70">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#l02897">json.hpp:2897</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a360d37260add46be89881db2366fe343_html_a360d37260add46be89881db2366fe343"><div class="ttname"><a href="classnlohmann_1_1basic__json_a360d37260add46be89881db2366fe343.html#a360d37260add46be89881db2366fe343">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#l06412">json.hpp:6412</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3b884d9fc5de7013be144b304df9c068_html_a3b884d9fc5de7013be144b304df9c068"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3b884d9fc5de7013be144b304df9c068.html#a3b884d9fc5de7013be144b304df9c068">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#l09497">json.hpp:9497</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a74e26f187519bc7181b825b8f38a4e93_html_a74e26f187519bc7181b825b8f38a4e93"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a74e26f187519bc7181b825b8f38a4e93.html#a74e26f187519bc7181b825b8f38a4e93">nlohmann::basic_json::iter_impl::operator++</a></div><div class="ttdeci">iter_impl operator++(int)</div><div class="ttdoc">post-increment (it++) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09092">json.hpp:9092</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#l11646">json.hpp:11646</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a5ed57d38f57f669f5788cea881772403_html_a5ed57d38f57f669f5788cea881772403"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a5ed57d38f57f669f5788cea881772403.html#a5ed57d38f57f669f5788cea881772403">nlohmann::basic_json::iter_impl::operator&lt;=</a></div><div class="ttdeci">bool operator&lt;=(const iter_impl &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#l09253">json.hpp:9253</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a0c3a102ac61d4c6f869fe9a5d065e91e_html_a0c3a102ac61d4c6f869fe9a5d065e91e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a0c3a102ac61d4c6f869fe9a5d065e91e.html#a0c3a102ac61d4c6f869fe9a5d065e91e">nlohmann::basic_json::iter_impl::operator--</a></div><div class="ttdeci">iter_impl operator--(int)</div><div class="ttdoc">post-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09135">json.hpp:9135</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a50c5d20f733bfe2b13d67366102ba3fe_html_a50c5d20f733bfe2b13d67366102ba3fe"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a50c5d20f733bfe2b13d67366102ba3fe.html#a50c5d20f733bfe2b13d67366102ba3fe">nlohmann::basic_json::iter_impl::operator--</a></div><div class="ttdeci">iter_impl &amp; operator--()</div><div class="ttdoc">pre-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09146">json.hpp:9146</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1ef93e2006dbe52667294f5ef38b0b10_html_a1ef93e2006dbe52667294f5ef38b0b10"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1ef93e2006dbe52667294f5ef38b0b10.html#a1ef93e2006dbe52667294f5ef38b0b10">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#l04811">json.hpp:4811</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a011397134847f36db0ed7d7a93753677_html_a011397134847f36db0ed7d7a93753677"><div class="ttname"><a href="classnlohmann_1_1basic__json_a011397134847f36db0ed7d7a93753677.html#a011397134847f36db0ed7d7a93753677">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#l04235">json.hpp:4235</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a30a7cc24f2931c20ecae37ec4a5e901f_html_a30a7cc24f2931c20ecae37ec4a5e901f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a30a7cc24f2931c20ecae37ec4a5e901f.html#a30a7cc24f2931c20ecae37ec4a5e901f">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#l05593">json.hpp:5593</a></div></div>
<div class="ttc" id="structnlohmann_1_1adl__serializer_adf8cd96afe6ab243b67392dfe35ace89_html_adf8cd96afe6ab243b67392dfe35ace89"><div class="ttname"><a href="structnlohmann_1_1adl__serializer_adf8cd96afe6ab243b67392dfe35ace89.html#adf8cd96afe6ab243b67392dfe35ace89">nlohmann::adl_serializer::to_json</a></div><div class="ttdeci">static void to_json(BasicJsonType &amp;j, ValueType &amp;&amp;val) noexcept(noexcept(::nlohmann::to_json(j, std::forward&lt; ValueType &gt;(val))))</div><div class="ttdoc">convert any value type to a JSON value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00939">json.hpp:939</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_aa496f5348569e75d65592f25e1664770_html_aa496f5348569e75d65592f25e1664770"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_aa496f5348569e75d65592f25e1664770.html#aa496f5348569e75d65592f25e1664770">nlohmann::basic_json::iter_impl::iter_impl</a></div><div class="ttdeci">iter_impl(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#l08872">json.hpp:8872</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a404cfe1bdbf1dc6b229627fcf2afb95f_html_a404cfe1bdbf1dc6b229627fcf2afb95f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a404cfe1bdbf1dc6b229627fcf2afb95f.html#a404cfe1bdbf1dc6b229627fcf2afb95f">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#l05643">json.hpp:5643</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3_html_aecae491e175f8767c550ae3c59e180e3"><div class="ttname"><a href="classnlohmann_1_1basic__json_aecae491e175f8767c550ae3c59e180e3.html#aecae491e175f8767c550ae3c59e180e3">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#l01877">json.hpp:1877</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aacf5eed15a8b66fb1e88910707a5e229_html_aacf5eed15a8b66fb1e88910707a5e229"><div class="ttname"><a href="classnlohmann_1_1basic__json_aacf5eed15a8b66fb1e88910707a5e229.html#aacf5eed15a8b66fb1e88910707a5e229">nlohmann::basic_json::emplace_back</a></div><div class="ttdeci">void emplace_back(Args &amp;&amp;... args)</div><div class="ttdoc">add an object to an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05444">json.hpp:5444</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a69b596a4a6683b362095c9a139637396_html_a69b596a4a6683b362095c9a139637396"><div class="ttname"><a href="classnlohmann_1_1basic__json_a69b596a4a6683b362095c9a139637396.html#a69b596a4a6683b362095c9a139637396">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#l02963">json.hpp:2963</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a87a33e1b5bf42674ebe9c43ac41f8660_html_a87a33e1b5bf42674ebe9c43ac41f8660"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a87a33e1b5bf42674ebe9c43ac41f8660.html#a87a33e1b5bf42674ebe9c43ac41f8660">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#l09504">json.hpp:9504</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8dba7b7d2f38e6b0c614030aa43983f6_html_a8dba7b7d2f38e6b0c614030aa43983f6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8dba7b7d2f38e6b0c614030aa43983f6.html#a8dba7b7d2f38e6b0c614030aa43983f6">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#l04781">json.hpp:4781</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#l05882">json.hpp:5882</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab4384af330b79de0e5f279576803a2c7_html_ab4384af330b79de0e5f279576803a2c7"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab4384af330b79de0e5f279576803a2c7.html#ab4384af330b79de0e5f279576803a2c7">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#l05294">json.hpp:5294</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae11a3a51782c058fff2f6550cdfb9b3c_html_ae11a3a51782c058fff2f6550cdfb9b3c"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae11a3a51782c058fff2f6550cdfb9b3c.html#ae11a3a51782c058fff2f6550cdfb9b3c">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#l05344">json.hpp:5344</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a65b0a24e1361a030ad0a661de22f6c8e_html_a65b0a24e1361a030ad0a661de22f6c8e"><div class="ttname"><a href="classnlohmann_1_1basic__json_a65b0a24e1361a030ad0a661de22f6c8e.html#a65b0a24e1361a030ad0a661de22f6c8e">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#l05770">json.hpp:5770</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2f8484d69c55d8f2a9697a7bec29362a_html_a2f8484d69c55d8f2a9697a7bec29362a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2f8484d69c55d8f2a9697a7bec29362a.html#a2f8484d69c55d8f2a9697a7bec29362a">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#l04496">json.hpp:4496</a></div></div>
<div class="ttc" id="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a455d0daa616e67bbb74d81cf3ba15e79_html_a455d0daa616e67bbb74d81cf3ba15e79"><div class="ttname"><a href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03_a455d0daa616e67bbb74d81cf3ba15e79.html#a455d0daa616e67bbb74d81cf3ba15e79">nlohmann::anonymous_namespace{json.hpp}::to_json</a></div><div class="ttdeci">constexpr const auto &amp; to_json</div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00898">json.hpp:898</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1a86d444bfeaa9518d2421aedd74444a_html_a1a86d444bfeaa9518d2421aedd74444a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1a86d444bfeaa9518d2421aedd74444a.html#a1a86d444bfeaa9518d2421aedd74444a">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#l04995">json.hpp:4995</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a83fe4a151b3a591f357527d5d9aa1b9f_html_a83fe4a151b3a591f357527d5d9aa1b9f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a83fe4a151b3a591f357527d5d9aa1b9f.html#a83fe4a151b3a591f357527d5d9aa1b9f">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#l04245">json.hpp:4245</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a515e7618392317dbf4b72d3e18bf2ab2_html_a515e7618392317dbf4b72d3e18bf2ab2"><div class="ttname"><a href="classnlohmann_1_1basic__json_a515e7618392317dbf4b72d3e18bf2ab2.html#a515e7618392317dbf4b72d3e18bf2ab2">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#l04819">json.hpp:4819</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374_html_ae095578e03df97c5b3991787f1056374"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae095578e03df97c5b3991787f1056374.html#ae095578e03df97c5b3991787f1056374">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#l01328">json.hpp:1328</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a63c655881b0b7b7499a333ba77a7e4d1_html_a63c655881b0b7b7499a333ba77a7e4d1"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a63c655881b0b7b7499a333ba77a7e4d1.html#a63c655881b0b7b7499a333ba77a7e4d1">nlohmann::basic_json::iter_impl::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const iter_impl &amp;other) const</div><div class="ttdoc">comparison: smaller </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09220">json.hpp:9220</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab5e3e1758c1a52ffe89b1d379ef7fbe1_html_ab5e3e1758c1a52ffe89b1d379ef7fbe1"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab5e3e1758c1a52ffe89b1d379ef7fbe1.html#ab5e3e1758c1a52ffe89b1d379ef7fbe1">nlohmann::basic_json::from_cbor</a></div><div class="ttdeci">static basic_json from_cbor(const std::vector&lt; uint8_t &gt; &amp;v, const size_t start_index=0)</div><div class="ttdoc">create a JSON value from a byte vector in CBOR format </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l08037">json.hpp:8037</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_afd0d209ef3a07a8aa3ee46e03538ffa6_html_afd0d209ef3a07a8aa3ee46e03538ffa6"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_afd0d209ef3a07a8aa3ee46e03538ffa6.html#afd0d209ef3a07a8aa3ee46e03538ffa6">nlohmann::basic_json::iter_impl::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#l09058">json.hpp:9058</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422_html_a5319dc1bb9dfe19ce7ff559aaded3422"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5319dc1bb9dfe19ce7ff559aaded3422.html#a5319dc1bb9dfe19ce7ff559aaded3422">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#l02647">json.hpp:2647</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af9c51328fbe1da75eca750be3009917a_html_af9c51328fbe1da75eca750be3009917a"><div class="ttname"><a href="classnlohmann_1_1basic__json_af9c51328fbe1da75eca750be3009917a.html#af9c51328fbe1da75eca750be3009917a">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#l04067">json.hpp:4067</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a083d9d5465de7ddfb6108f404ce54be3_html_a083d9d5465de7ddfb6108f404ce54be3"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a083d9d5465de7ddfb6108f404ce54be3.html#a083d9d5465de7ddfb6108f404ce54be3">nlohmann::basic_json::iter_impl::operator=</a></div><div class="ttdeci">iter_impl &amp; operator=(iter_impl 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#l08934">json.hpp:8934</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f_html_afe7c1303357e19cea9527af4e9a31d8f"><div class="ttname"><a href="classnlohmann_1_1basic__json_afe7c1303357e19cea9527af4e9a31d8f.html#afe7c1303357e19cea9527af4e9a31d8f">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#l01075">json.hpp:1075</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a00795fca3388571ba4a56a1ea6e0466b_html_a00795fca3388571ba4a56a1ea6e0466b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a00795fca3388571ba4a56a1ea6e0466b.html#a00795fca3388571ba4a56a1ea6e0466b">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#l06484">json.hpp:6484</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350_html_a86ce930490cf7773b26f5ef49c04a350"><div class="ttname"><a href="classnlohmann_1_1basic__json_a86ce930490cf7773b26f5ef49c04a350.html#a86ce930490cf7773b26f5ef49c04a350">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#l01080">json.hpp:1080</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__pointer_abaa66b0d30811b8a8670a673c686b75a_html_abaa66b0d30811b8a8670a673c686b75a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__pointer_abaa66b0d30811b8a8670a673c686b75a.html#abaa66b0d30811b8a8670a673c686b75a">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#l11674">json.hpp:11674</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad6a18403e7fbac9c4efd06facc71fc88_html_ad6a18403e7fbac9c4efd06facc71fc88"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad6a18403e7fbac9c4efd06facc71fc88.html#ad6a18403e7fbac9c4efd06facc71fc88">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#l04091">json.hpp:4091</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a92e849ca687355935c02f492be936b68_html_a92e849ca687355935c02f492be936b68"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a92e849ca687355935c02f492be936b68.html#a92e849ca687355935c02f492be936b68">nlohmann::basic_json::iter_impl::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#l09422">json.hpp:9422</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1ecce113ff11dd294689ee4d45cbb855_html_a1ecce113ff11dd294689ee4d45cbb855"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1ecce113ff11dd294689ee4d45cbb855.html#a1ecce113ff11dd294689ee4d45cbb855">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#l05564">json.hpp:5564</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_acac9d438c9bb12740dcdb01069293a34_html_acac9d438c9bb12740dcdb01069293a34"><div class="ttname"><a href="classnlohmann_1_1basic__json_acac9d438c9bb12740dcdb01069293a34.html#acac9d438c9bb12740dcdb01069293a34">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#l03668">json.hpp:3668</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4f73d4cee67ea328d785979c22af0ae1_html_a4f73d4cee67ea328d785979c22af0ae1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4f73d4cee67ea328d785979c22af0ae1.html#a4f73d4cee67ea328d785979c22af0ae1">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#l04856">json.hpp:4856</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5a6558bfd1be139a638f91f0e09fc737_html_a5a6558bfd1be139a638f91f0e09fc737"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5a6558bfd1be139a638f91f0e09fc737.html#a5a6558bfd1be139a638f91f0e09fc737">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(CompatibleType &amp;&amp;val) noexcept(noexcept(JSONSerializer&lt; U &gt;::to_json(std::declval&lt; basic_json_t &amp;&gt;(), std::forward&lt; CompatibleType &gt;(val))))</div><div class="ttdoc">create a JSON value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02006">json.hpp:2006</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab2318780e5ae692039e816b6ac32c91e_html_ab2318780e5ae692039e816b6ac32c91e"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab2318780e5ae692039e816b6ac32c91e.html#ab2318780e5ae692039e816b6ac32c91e">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#l03847">json.hpp:3847</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8faa039ca82427ed29c486ffd00600c3_html_a8faa039ca82427ed29c486ffd00600c3"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8faa039ca82427ed29c486ffd00600c3.html#a8faa039ca82427ed29c486ffd00600c3">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#l02760">json.hpp:2760</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a09ca1dc273d226afe0ca83a9d7438d9c_html_a09ca1dc273d226afe0ca83a9d7438d9c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a09ca1dc273d226afe0ca83a9d7438d9c.html#a09ca1dc273d226afe0ca83a9d7438d9c">nlohmann::basic_json::to_msgpack</a></div><div class="ttdeci">static std::vector&lt; uint8_t &gt; to_msgpack(const basic_json &amp;j)</div><div class="ttdoc">create a MessagePack serialization of a given JSON value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07941">json.hpp:7941</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58_html_aff3d5cd2a75612364b888d8693231b58"><div class="ttname"><a href="classnlohmann_1_1basic__json_aff3d5cd2a75612364b888d8693231b58.html#aff3d5cd2a75612364b888d8693231b58">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#l01085">json.hpp:1085</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005_html_a61f8566a1a85a424c7266fb531dca005"><div class="ttname"><a href="classnlohmann_1_1basic__json_a61f8566a1a85a424c7266fb531dca005.html#a61f8566a1a85a424c7266fb531dca005">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#l01381">json.hpp:1381</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af4879af64a0f24bd308b13b859808f84_html_af4879af64a0f24bd308b13b859808f84"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af4879af64a0f24bd308b13b859808f84.html#af4879af64a0f24bd308b13b859808f84">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#l09526">json.hpp:9526</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4a4ec75e4d2845d9bcf7a9e5458e4949_html_a4a4ec75e4d2845d9bcf7a9e5458e4949"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4a4ec75e4d2845d9bcf7a9e5458e4949.html#a4a4ec75e4d2845d9bcf7a9e5458e4949">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#l02165">json.hpp:2165</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9a06d1efd50a00f4889f831f851ce124_html_a9a06d1efd50a00f4889f831f851ce124"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9a06d1efd50a00f4889f831f851ce124.html#a9a06d1efd50a00f4889f831f851ce124">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#l02505">json.hpp:2505</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#l06163">json.hpp:6163</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abc7378cba0613a78b9aad1c8e7044bb0_html_abc7378cba0613a78b9aad1c8e7044bb0"><div class="ttname"><a href="classnlohmann_1_1basic__json_abc7378cba0613a78b9aad1c8e7044bb0.html#abc7378cba0613a78b9aad1c8e7044bb0">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#l02869">json.hpp:2869</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715_html_aa3d908ee643e5938d32e5f6d261d7715"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_aa3d908ee643e5938d32e5f6d261d7715.html#aa3d908ee643e5938d32e5f6d261d7715">nlohmann::basic_json::iter_impl::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#l08851">json.hpp:8851</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a14abd48803a8d5447faf5f583fa8e2a1_html_a14abd48803a8d5447faf5f583fa8e2a1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a14abd48803a8d5447faf5f583fa8e2a1.html#a14abd48803a8d5447faf5f583fa8e2a1">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#l03389">json.hpp:3389</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a9fd84e884e8474c000dc966d331a4854_html_a9fd84e884e8474c000dc966d331a4854"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a9fd84e884e8474c000dc966d331a4854.html#a9fd84e884e8474c000dc966d331a4854">nlohmann::basic_json::iter_impl::operator-=</a></div><div class="ttdeci">iter_impl &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#l09311">json.hpp:9311</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e_html_ab0021ef2007fd338615360af404dcd4e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ab0021ef2007fd338615360af404dcd4e.html#ab0021ef2007fd338615360af404dcd4e">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#l09458">json.hpp:9458</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#l01052">json.hpp:1052</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7_html_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac8e523ddc8c2dd7e5d2daf0d49a9c0d7.html#ac8e523ddc8c2dd7e5d2daf0d49a9c0d7">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#l05258">json.hpp:5258</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0136728f5db69d4051c77b94307abd6c_html_a0136728f5db69d4051c77b94307abd6c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0136728f5db69d4051c77b94307abd6c.html#a0136728f5db69d4051c77b94307abd6c">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#l05540">json.hpp:5540</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abfeba47810ca72f2176419942c4e1952_html_abfeba47810ca72f2176419942c4e1952"><div class="ttname"><a href="classnlohmann_1_1basic__json_abfeba47810ca72f2176419942c4e1952.html#abfeba47810ca72f2176419942c4e1952">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#l05185">json.hpp:5185</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2566783e190dec524bf3445b322873b8_html_a2566783e190dec524bf3445b322873b8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2566783e190dec524bf3445b322873b8.html#a2566783e190dec524bf3445b322873b8">nlohmann::basic_json::to_cbor</a></div><div class="ttdeci">static std::vector&lt; uint8_t &gt; to_cbor(const basic_json &amp;j)</div><div class="ttdoc">create a MessagePack serialization of a given JSON value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l08004">json.hpp:8004</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2b3297873b70c080837e8eedc4fec32f_html_a2b3297873b70c080837e8eedc4fec32f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2b3297873b70c080837e8eedc4fec32f.html#a2b3297873b70c080837e8eedc4fec32f">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#l01067">json.hpp:1067</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a170970e99b7a6d124da0fffa4cb76dba_html_a170970e99b7a6d124da0fffa4cb76dba"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a170970e99b7a6d124da0fffa4cb76dba.html#a170970e99b7a6d124da0fffa4cb76dba">nlohmann::basic_json::iter_impl::operator+=</a></div><div class="ttdeci">iter_impl &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#l09280">json.hpp:9280</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_a030a45b63b70e12b18ad4f6c1c4f1239_html_a030a45b63b70e12b18ad4f6c1c4f1239"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_a030a45b63b70e12b18ad4f6c1c4f1239.html#a030a45b63b70e12b18ad4f6c1c4f1239">nlohmann::basic_json::iter_impl::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#l09406">json.hpp:9406</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8c9d932353e1ab98a7dc2fc27e002031_html_a8c9d932353e1ab98a7dc2fc27e002031"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8c9d932353e1ab98a7dc2fc27e002031.html#a8c9d932353e1ab98a7dc2fc27e002031">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#l05738">json.hpp:5738</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#l06514">json.hpp:6514</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a26554213cbb1722accc460ce348c860a_html_a26554213cbb1722accc460ce348c860a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a26554213cbb1722accc460ce348c860a.html#a26554213cbb1722accc460ce348c860a">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#l04005">json.hpp:4005</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5338e282d1d02bed389d852dd670d98d_html_a5338e282d1d02bed389d852dd670d98d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5338e282d1d02bed389d852dd670d98d.html#a5338e282d1d02bed389d852dd670d98d">nlohmann::basic_json::emplace</a></div><div class="ttdeci">std::pair&lt; iterator, bool &gt; emplace(Args &amp;&amp;... args)</div><div class="ttdoc">add an object to an object if key does not exist </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05492">json.hpp:5492</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af5de621bcf646c332343f9c1e011126c_html_af5de621bcf646c332343f9c1e011126c"><div class="ttname"><a href="classnlohmann_1_1basic__json_af5de621bcf646c332343f9c1e011126c.html#af5de621bcf646c332343f9c1e011126c">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#l02428">json.hpp:2428</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_ae6c8e672ff064e0b92073b4dd939ada6_html_ae6c8e672ff064e0b92073b4dd939ada6"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl_ae6c8e672ff064e0b92073b4dd939ada6.html#ae6c8e672ff064e0b92073b4dd939ada6">nlohmann::basic_json::iter_impl::operator&gt;</a></div><div class="ttdeci">bool operator&gt;(const iter_impl &amp;other) const</div><div class="ttdoc">comparison: greater than </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09262">json.hpp:9262</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#l06222">json.hpp:6222</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed_html_a068a16e76be178e83da6a192916923ed"><div class="ttname"><a href="classnlohmann_1_1basic__json_a068a16e76be178e83da6a192916923ed.html#a068a16e76be178e83da6a192916923ed">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#l04301">json.hpp:4301</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iter__impl_html"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iter__impl.html">nlohmann::basic_json::iter_impl</a></div><div class="ttdoc">a template for a random access iterator for the basic_json class </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01051">json.hpp:1051</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_aa10b55b0c57a849cfe0cba15e7818e97_html_aa10b55b0c57a849cfe0cba15e7818e97"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_aa10b55b0c57a849cfe0cba15e7818e97.html#aa10b55b0c57a849cfe0cba15e7818e97">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#l09477">json.hpp:9477</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aabe623bc8304c2ba92d96d91f390fab4_html_aabe623bc8304c2ba92d96d91f390fab4"><div class="ttname"><a href="classnlohmann_1_1basic__json_aabe623bc8304c2ba92d96d91f390fab4.html#aabe623bc8304c2ba92d96d91f390fab4">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#l02990">json.hpp:2990</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#l01807">json.hpp:1807</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1416bbec9d9a8eeca21c213cf5290868_html_a1416bbec9d9a8eeca21c213cf5290868"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1416bbec9d9a8eeca21c213cf5290868.html#a1416bbec9d9a8eeca21c213cf5290868">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#l03887">json.hpp:3887</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac77aed0925d447744676725ab0b6d535_html_ac77aed0925d447744676725ab0b6d535"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac77aed0925d447744676725ab0b6d535.html#ac77aed0925d447744676725ab0b6d535">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#l04848">json.hpp:4848</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Feb 25 2017 16:40:28 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.14
</small></address>
</body>
</html>