<html> <head> <title> JsonCpp - JSON data format manipulation library </title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head> <body bgcolor="#ffffff"> <table width="100%"> <tr> <td width="40%" align="left" valign="center"> <a href="https://github.com/open-source-parsers/jsoncpp"> JsonCpp project page </a> </td> <td width="40%" align="right" valign="center"> <a href="http://open-source-parsers.github.io/jsoncpp-docs/doxygen/">JsonCpp home page</a> </td> </tr> </table> <hr> <!-- Generated by Doxygen 1.8.8 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_558a3a6fe8f26971847c96e209994c71.html">lib_json</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">json_tool.h</div> </div> </div><!--header--> <div class="contents"> <a href="json__tool_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// Copyright 2007-2010 Baptiste Lepilleur</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// Distributed under MIT license, or public domain if desired and</span></div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// recognized in your jurisdiction.</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE</span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED</span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED</span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">/* This header provides common string manipulation support, such as UTF-8,</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * portable conversion from/to string...</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * It is an internal header that must not be exposed.</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> */</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">namespace </span><a class="code" href="namespace_json.html">Json</a> {</div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div> <div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="namespace_json.html#adf0456e397a18cd7218a7b51dfc13c73"> 18</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> std::string <a class="code" href="namespace_json.html#adf0456e397a18cd7218a7b51dfc13c73">codePointToUTF8</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cp) {</div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::string result;</div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="comment">// based on description from http://en.wikipedia.org/wiki/UTF-8</span></div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">if</span> (cp <= 0x7f) {</div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  result.resize(1);</div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  result[0] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(cp);</div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cp <= 0x7FF) {</div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  result.resize(2);</div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  result[1] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & cp));</div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  result[0] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0xC0 | (0x1f & (cp >> 6)));</div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cp <= 0xFFFF) {</div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  result.resize(3);</div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  result[2] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & cp));</div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  result[1] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & (cp >> 6)));</div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  result[0] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0xE0 | (0xf & (cp >> 12)));</div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cp <= 0x10FFFF) {</div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  result.resize(4);</div> <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  result[3] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & cp));</div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  result[2] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & (cp >> 6)));</div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  result[1] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0x80 | (0x3f & (cp >> 12)));</div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  result[0] = <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(0xF0 | (0x7 & (cp >> 18)));</div> <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div> <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> result;</div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div> <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespace_json.html#a0381e631737f51331065a388f4f59197"> 47</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespace_json.html#a0381e631737f51331065a388f4f59197">isControlCharacter</a>(<span class="keywordtype">char</span> ch) { <span class="keywordflow">return</span> ch > 0 && ch <= 0x1F; }</div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">enum</span> {</div> <div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="namespace_json.html#a0c5f614b019f20b4598dcaec09d9e820ae4f2008c7919f20d81286121d1374424"> 52</a></span>  <a class="code" href="namespace_json.html#a0c5f614b019f20b4598dcaec09d9e820ae4f2008c7919f20d81286121d1374424">uintToStringBufferSize</a> = 3 * <span class="keyword">sizeof</span>(<a class="code" href="namespace_json.html#ae202ecad69725e23443f465e257456d0">LargestUInt</a>) + 1</div> <div class="line"><a name="l00053"></a><span class="lineno"> 53</span> };</div> <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// Defines a char buffer for use with uintToString().</span></div> <div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="namespace_json.html#a602bcf69c2042fb61c3b243cb16f04ca"> 56</a></span> <span class="keyword">typedef</span> <span class="keywordtype">char</span> <a class="code" href="namespace_json.html#a602bcf69c2042fb61c3b243cb16f04ca">UIntToStringBuffer</a>[<a class="code" href="namespace_json.html#a0c5f614b019f20b4598dcaec09d9e820ae4f2008c7919f20d81286121d1374424">uintToStringBufferSize</a>];</div> <div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> <div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="namespace_json.html#ac1ffd21a9e55122014353c773ccc496e"> 63</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespace_json.html#ac1ffd21a9e55122014353c773ccc496e">uintToString</a>(<a class="code" href="namespace_json.html#ae202ecad69725e23443f465e257456d0">LargestUInt</a> value, <span class="keywordtype">char</span>*& current) {</div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  *--current = 0;</div> <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">do</span> {</div> <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  *--current = <span class="keyword">static_cast<</span><span class="keywordtype">signed</span> <span class="keywordtype">char</span><span class="keyword">></span>(value % 10U + <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span><span class="keyword">></span>(<span class="charliteral">'0'</span>));</div> <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  value /= 10;</div> <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  } <span class="keywordflow">while</span> (value != 0);</div> <div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div> <div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div> <div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="namespace_json.html#aa208904144dc7b11ccc28f47c9afab9a"> 76</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespace_json.html#aa208904144dc7b11ccc28f47c9afab9a">fixNumericLocale</a>(<span class="keywordtype">char</span>* begin, <span class="keywordtype">char</span>* end) {</div> <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">while</span> (begin < end) {</div> <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (*begin == <span class="charliteral">','</span>) {</div> <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  *begin = <span class="charliteral">'.'</span>;</div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  ++begin;</div> <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> <div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div> <div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div> <div class="line"><a name="l00085"></a><span class="lineno"> 85</span> } <span class="comment">// namespace Json {</span></div> <div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div> <div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED</span></div> <div class="ttc" id="namespace_json_html_adf0456e397a18cd7218a7b51dfc13c73"><div class="ttname"><a href="namespace_json.html#adf0456e397a18cd7218a7b51dfc13c73">Json::codePointToUTF8</a></div><div class="ttdeci">static std::string codePointToUTF8(unsigned int cp)</div><div class="ttdoc">Converts a unicode code-point to UTF-8. </div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00018">json_tool.h:18</a></div></div> <div class="ttc" id="namespace_json_html_ac1ffd21a9e55122014353c773ccc496e"><div class="ttname"><a href="namespace_json.html#ac1ffd21a9e55122014353c773ccc496e">Json::uintToString</a></div><div class="ttdeci">static void uintToString(LargestUInt value, char *&current)</div><div class="ttdoc">Converts an unsigned integer to string. </div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00063">json_tool.h:63</a></div></div> <div class="ttc" id="namespace_json_html_a602bcf69c2042fb61c3b243cb16f04ca"><div class="ttname"><a href="namespace_json.html#a602bcf69c2042fb61c3b243cb16f04ca">Json::UIntToStringBuffer</a></div><div class="ttdeci">char UIntToStringBuffer[uintToStringBufferSize]</div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00056">json_tool.h:56</a></div></div> <div class="ttc" id="namespace_json_html_a0381e631737f51331065a388f4f59197"><div class="ttname"><a href="namespace_json.html#a0381e631737f51331065a388f4f59197">Json::isControlCharacter</a></div><div class="ttdeci">static bool isControlCharacter(char ch)</div><div class="ttdoc">Returns true if ch is a control character (in range [1,31]). </div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00047">json_tool.h:47</a></div></div> <div class="ttc" id="namespace_json_html_aa208904144dc7b11ccc28f47c9afab9a"><div class="ttname"><a href="namespace_json.html#aa208904144dc7b11ccc28f47c9afab9a">Json::fixNumericLocale</a></div><div class="ttdeci">static void fixNumericLocale(char *begin, char *end)</div><div class="ttdoc">Change ',' to '. </div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00076">json_tool.h:76</a></div></div> <div class="ttc" id="namespace_json_html_ae202ecad69725e23443f465e257456d0"><div class="ttname"><a href="namespace_json.html#ae202ecad69725e23443f465e257456d0">Json::LargestUInt</a></div><div class="ttdeci">UInt64 LargestUInt</div><div class="ttdef"><b>Definition:</b> <a href="config_8h_source.html#l00104">config.h:104</a></div></div> <div class="ttc" id="namespace_json_html"><div class="ttname"><a href="namespace_json.html">Json</a></div><div class="ttdoc">JSON (JavaScript Object Notation). </div><div class="ttdef"><b>Definition:</b> <a href="config_8h_source.html#l00087">config.h:87</a></div></div> <div class="ttc" id="namespace_json_html_a0c5f614b019f20b4598dcaec09d9e820ae4f2008c7919f20d81286121d1374424"><div class="ttname"><a href="namespace_json.html#a0c5f614b019f20b4598dcaec09d9e820ae4f2008c7919f20d81286121d1374424">Json::uintToStringBufferSize</a></div><div class="ttdoc">Constant that specify the size of the buffer that must be passed to uintToString. ...</div><div class="ttdef"><b>Definition:</b> <a href="json__tool_8h_source.html#l00052">json_tool.h:52</a></div></div> </div><!-- fragment --></div><!-- contents --> <hr> </body> </html>