blob: 2585b7c65266000922c815b3b4300c94f5a05a8d [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Apache Geode Native C++ Reference: DataOutput.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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</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" />
</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">Apache Geode Native C++ Reference
&#160;<span id="projectnumber">1.13.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('a00107_source.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">DataOutput.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"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * this work for additional information regarding copyright ownership.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * (the &quot;License&quot;); you may not use this file except in compliance with</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * limitations under the License.</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;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifndef GEODE_DATAOUTPUT_H_</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#define GEODE_DATAOUTPUT_H_</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00044.html">CacheableString.hpp</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;ExceptionTypes.hpp&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;Serializable.hpp&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;internal/geode_globals.hpp&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span>apache {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">namespace </span>geode {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">namespace </span>client {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">class </span>SerializationRegistry;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">class </span>DataOutputInternal;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>CacheImpl;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">class </span>Pool;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">class </span>TcrMessage;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00439.html"> 48</a></span>&#160;<span class="keyword">class </span>APACHE_GEODE_EXPORT <a class="code" href="a00439.html">DataOutput</a> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00439.html#ab584bfb66bc14fddfffb4282a2eafb9b"> 55</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ab584bfb66bc14fddfffb4282a2eafb9b">write</a>(uint8_t value) {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; ensureCapacity(1);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; writeNoCheck(value);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="a00439.html#a545bafa6899d72fc9c08b99fd0c33896"> 65</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a545bafa6899d72fc9c08b99fd0c33896">write</a>(int8_t value) { <a class="code" href="a00439.html#a545bafa6899d72fc9c08b99fd0c33896">write</a>(static_cast&lt;uint8_t&gt;(value)); }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00439.html#ad394efcb48c1a358a58e5741d914d58d"> 72</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ad394efcb48c1a358a58e5741d914d58d">writeBoolean</a>(<span class="keywordtype">bool</span> value) { write(static_cast&lt;uint8_t&gt;(value)); }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="a00439.html#a92779f7b388b020878a3616cdcc8896d"> 80</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a92779f7b388b020878a3616cdcc8896d">writeBytes</a>(<span class="keyword">const</span> uint8_t* bytes, int32_t len) {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (len &gt;= 0) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; ensureCapacity(len + 5);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; writeArrayLen(bytes == <span class="keyword">nullptr</span> ? 0 : len); <span class="comment">// length of bytes...</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (len &gt; 0 &amp;&amp; bytes != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::memcpy(m_buf, bytes, len);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; m_buf += len;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; write(static_cast&lt;int8_t&gt;(-1));</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</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;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00439.html#a62d535a34e37cee85404250ac4f8b514"> 99</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a62d535a34e37cee85404250ac4f8b514">writeBytes</a>(<span class="keyword">const</span> int8_t* bytes, int32_t len) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; writeBytes(reinterpret_cast&lt;const uint8_t*&gt;(bytes), len);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="a00439.html#aa6768e74ab19803b2bf466dc2d612fdd"> 114</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#aa6768e74ab19803b2bf466dc2d612fdd">writeBytesOnly</a>(<span class="keyword">const</span> uint8_t* bytes, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; ensureCapacity(len);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; std::memcpy(m_buf, bytes, len);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; m_buf += len;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00439.html#a181844ecf7bb41c5df5c2fe01aeb1f2d"> 131</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a181844ecf7bb41c5df5c2fe01aeb1f2d">writeBytesOnly</a>(<span class="keyword">const</span> int8_t* bytes, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; writeBytesOnly(reinterpret_cast&lt;const uint8_t*&gt;(bytes), len);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00439.html#a7f5e95a11c0fe3078fe9d0ba158ee894"> 140</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a7f5e95a11c0fe3078fe9d0ba158ee894">writeInt</a>(uint16_t value) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; ensureCapacity(2);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 8);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00439.html#a2b283a6645b10786ad31d49b3c4e7575"> 151</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a2b283a6645b10786ad31d49b3c4e7575">writeChar</a>(uint16_t value) {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; ensureCapacity(2);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 8);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="a00439.html#ab313f27382acec8e32d07b5d56aee3c4"> 162</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ab313f27382acec8e32d07b5d56aee3c4">writeInt</a>(uint32_t value) {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; ensureCapacity(4);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 24);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 16);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 8);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="a00439.html#a12f4df4f3cd0dfef9773c97890e4203e"> 175</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a12f4df4f3cd0dfef9773c97890e4203e">writeInt</a>(uint64_t value) {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; ensureCapacity(8);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 56);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 48);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 40);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 32);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 24);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 16);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value &gt;&gt; 8);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(value);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00439.html#a276d2915b4b5ed859f6dfa7a8632db77"> 192</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a276d2915b4b5ed859f6dfa7a8632db77">writeInt</a>(int16_t value) {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; writeInt(static_cast&lt;uint16_t&gt;(value));</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="l00201"></a><span class="lineno"><a class="line" href="a00439.html#ac8322019f5260c9b28f7c373c3e54cbd"> 201</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ac8322019f5260c9b28f7c373c3e54cbd">writeInt</a>(int32_t value) {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; writeInt(static_cast&lt;uint32_t&gt;(value));</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;</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="a00439.html#ad41c4a2ecad093aa06aead762105bc53"> 210</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ad41c4a2ecad093aa06aead762105bc53">writeInt</a>(int64_t value) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; writeInt(static_cast&lt;uint64_t&gt;(value));</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;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00439.html#a74d7360f33e3187d9582cb199099b84f"> 221</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a74d7360f33e3187d9582cb199099b84f">writeArrayLen</a>(int32_t len) {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (len == -1) {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; write(static_cast&lt;int8_t&gt;(-1));</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &lt;= 252) { <span class="comment">// 252 is java&#39;s ((byte)-4 &amp;&amp; 0xFF)</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; write(static_cast&lt;uint8_t&gt;(len));</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &lt;= 0xFFFF) {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; write(static_cast&lt;int8_t&gt;(-2));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; writeInt(static_cast&lt;uint16_t&gt;(len));</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; write(static_cast&lt;int8_t&gt;(-3));</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; writeInt(len);</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; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="a00439.html#a3959bca668435c2f33eb870df34e4132"> 240</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a3959bca668435c2f33eb870df34e4132">writeFloat</a>(<span class="keywordtype">float</span> value) {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">union </span>float_uint32_t {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">float</span> f;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; uint32_t u;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; } v;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; v.f = value;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; writeInt(v.u);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00439.html#a2b8d781f1558bf7395367e97bfd98cf0"> 254</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a2b8d781f1558bf7395367e97bfd98cf0">writeDouble</a>(<span class="keywordtype">double</span> value) {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">union </span>double_uint64_t {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordtype">double</span> d;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; uint64_t ll;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; } v;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; v.d = value;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; writeInt(v.ll);</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;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT&gt;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeString(<span class="keyword">const</span> _CharT* value) {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// TODO string should we convert to empty string?</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">nullptr</span> == value) {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; write(static_cast&lt;uint8_t&gt;(DSCode::CacheableNullString));</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; writeString(std::basic_string&lt;_CharT&gt;(value));</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; }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class </span>_CharT, <span class="keyword">class</span>... _Tail&gt;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeString(<span class="keyword">const</span> std::basic_string&lt;_CharT, _Tail...&gt;&amp; value) {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// without scanning string, making worst case choices.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// TODO constexp for each string type to jmutf8 length conversion</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (value.length() * 3 &lt;= std::numeric_limits&lt;uint16_t&gt;::max()) {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; write(static_cast&lt;uint8_t&gt;(DSCode::CacheableString));</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; writeJavaModifiedUtf8(value);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; write(static_cast&lt;uint8_t&gt;(DSCode::CacheableStringHuge));</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; writeUtf16Huge(value);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT&gt;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUTF(<span class="keyword">const</span> _CharT* value) {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">nullptr</span> == value) {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">throw</span> NullPointerException(<span class="stringliteral">&quot;Parameter value must not be null.&quot;</span>);</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; writeUTF(std::basic_string&lt;_CharT&gt;(value));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</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; <span class="keyword">template</span> &lt;<span class="keyword">class </span>_CharT, <span class="keyword">class</span>... Tail&gt;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUTF(<span class="keyword">const</span> std::basic_string&lt;_CharT, Tail...&gt;&amp; value) {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; writeJavaModifiedUtf8(value);</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="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class </span>_CharT, <span class="keyword">class</span>... _Tail&gt;</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="a00439.html#a20ce3cac43a3171c84c8bb6551ef938d"> 309</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#a20ce3cac43a3171c84c8bb6551ef938d">writeChars</a>(<span class="keyword">const</span> std::basic_string&lt;_CharT, _Tail...&gt;&amp; value) {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; writeUtf16(value);</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;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT&gt;</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="a00439.html#ae5507be2b7d4830a7d0bd286eae72069"> 326</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ae5507be2b7d4830a7d0bd286eae72069">writeChars</a>(<span class="keyword">const</span> _CharT* value) {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; writeChars(std::basic_string&lt;_CharT&gt;(value));</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;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> PTR&gt;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="a00439.html#ab5ccdc412d23aa886c4f2e7fd3596382"> 337</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="a00439.html#ab5ccdc412d23aa886c4f2e7fd3596382">writeObject</a>(<span class="keyword">const</span> std::shared_ptr&lt;PTR&gt;&amp; objptr, <span class="keywordtype">bool</span> isDelta = <span class="keyword">false</span>) {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; writeObjectInternal(objptr, isDelta);</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;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="a00439.html#ab13fa790ed34ffe9999a097d35ba0c8a"> 345</a></span>&#160; <span class="keyword">const</span> uint8_t* <a class="code" href="a00439.html#ab13fa790ed34ffe9999a097d35ba0c8a">getCursor</a>() { <span class="keywordflow">return</span> m_buf; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="a00439.html#ae9419d1d5e9e1d208619e63676e87f48"> 352</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="a00439.html#ae9419d1d5e9e1d208619e63676e87f48">advanceCursor</a>(<span class="keywordtype">size_t</span> offset) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; ensureCapacity(offset);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; m_buf += offset;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="a00439.html#a1ee6730cba24a959cdd31cb0db7e9d2a"> 362</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="a00439.html#a1ee6730cba24a959cdd31cb0db7e9d2a">rewindCursor</a>(<span class="keywordtype">size_t</span> offset) { m_buf -= offset; }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordtype">void</span> updateValueAtPos(<span class="keywordtype">size_t</span> offset, uint8_t value) {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; m_bytes.get()[offset] = value;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; uint8_t getValueAtPos(<span class="keywordtype">size_t</span> offset) { <span class="keywordflow">return</span> m_bytes.get()[offset]; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="a00439.html#a3cc2f8b86e6c1196f0ded4d39698e0a5"> 373</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> uint8_t* <a class="code" href="a00439.html#a3cc2f8b86e6c1196f0ded4d39698e0a5">getBuffer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// GF_R_ASSERT(!((uint32_t)(m_bytes) % 4));</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> m_bytes.get();</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="a00439.html#a5d630c68986bbb665ea6326905868cfd"> 381</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="a00439.html#a5d630c68986bbb665ea6326905868cfd">getRemainingBufferLength</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// GF_R_ASSERT(!((uint32_t)(m_bytes) % 4));</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> m_size - getBufferLength();</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="a00439.html#a0999e17499bbc619a016ac19bf112c37"> 392</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> uint8_t* <a class="code" href="a00439.html#a0999e17499bbc619a016ac19bf112c37">getBuffer</a>(<span class="keywordtype">size_t</span>* rsize)<span class="keyword"> const </span>{</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; *rsize = m_buf - m_bytes.get();</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// GF_R_ASSERT(!((uint32_t)(m_bytes) % 4));</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> m_bytes.get();</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;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">inline</span> uint8_t* getBufferCopy() {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">size_t</span> size = m_buf - m_bytes.get();</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">auto</span> result = static_cast&lt;uint8_t*&gt;(std::malloc(size * <span class="keyword">sizeof</span>(uint8_t)));</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (result == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="a00583.html">OutOfMemoryException</a>(<span class="stringliteral">&quot;Out of Memory while resizing buffer&quot;</span>);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; std::memcpy(result, m_bytes.get(), size);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00439.html#addd887a9322e2e40921c83263adce1f7"> 412</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="a00439.html#addd887a9322e2e40921c83263adce1f7">getBufferLength</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_buf - m_bytes.get(); }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="a00439.html#ac640f11ac3d107a939a7cc16996d1132"> 417</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00439.html#ac640f11ac3d107a939a7cc16996d1132">reset</a>() {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (m_haveBigBuffer) {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// create smaller buffer</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; m_bytes.reset(</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; static_cast&lt;uint8_t*&gt;(std::malloc(m_lowWaterMark * <span class="keyword">sizeof</span>(uint8_t))));</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (m_bytes == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="a00583.html">OutOfMemoryException</a>(<span class="stringliteral">&quot;Out of Memory while resizing buffer&quot;</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; m_size = m_lowWaterMark;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// reset the flag</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; m_haveBigBuffer = <span class="keyword">false</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// release the lock</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; releaseLock();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; m_buf = m_bytes.get();</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;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// make sure there is room left for the requested size item.</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> ensureCapacity(<span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordtype">size_t</span> offset = m_buf - m_bytes.get();</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> ((m_size - offset) &lt; size) {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">size_t</span> newSize = m_size * 2 + (8192 * (size / 8192));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">if</span> (newSize &gt;= m_highWaterMark &amp;&amp; !m_haveBigBuffer) {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// acquire the lock</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; acquireLock();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// set flag</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; m_haveBigBuffer = <span class="keyword">true</span>;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; m_size = newSize;</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">auto</span> bytes = m_bytes.release();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">auto</span> tmp =</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; static_cast&lt;uint8_t*&gt;(std::realloc(bytes, m_size * <span class="keyword">sizeof</span>(uint8_t)));</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span> (tmp == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">throw</span> OutOfMemoryException(<span class="stringliteral">&quot;Out of Memory while resizing buffer&quot;</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; m_bytes.reset(tmp);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; m_buf = m_bytes.get() + offset;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; uint8_t* getBufferCopyFrom(<span class="keyword">const</span> uint8_t* from, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; uint8_t* result;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; _GEODE_NEW(result, uint8_t[length]);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; std::memcpy(result, from, length);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> safeDelete(uint8_t* src) { _GEODE_SAFE_DELETE(src); }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keyword">virtual</span> Cache* getCache() <span class="keyword">const</span>;</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; DataOutput() = <span class="keyword">delete</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="a00439.html#ac09763165d0c7803e46424c40428b925"> 473</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="a00439.html#ac09763165d0c7803e46424c40428b925">~DataOutput</a>() noexcept {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; reset();</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (m_bytes) {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; DataOutput::checkinBuffer(m_bytes.release(), m_size);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="a00439.html">DataOutput</a>(<span class="keyword">const</span> <a class="code" href="a00439.html">DataOutput</a>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="a00439.html">DataOutput</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="a00439.html">DataOutput</a>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="a00439.html">DataOutput</a>(<a class="code" href="a00439.html">DataOutput</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="a00439.html">DataOutput</a>&amp; operator=(<a class="code" href="a00439.html">DataOutput</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="a00439.html">DataOutput</a>(<span class="keyword">const</span> CacheImpl* cache, <a class="code" href="a00787.html">Pool</a>* pool);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> SerializationRegistry&amp; getSerializationRegistry() <span class="keyword">const</span>;</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="keywordtype">void</span> writeObjectInternal(<span class="keyword">const</span> std::shared_ptr&lt;Serializable&gt;&amp; ptr,</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordtype">bool</span> isDelta = <span class="keyword">false</span>);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> acquireLock();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> releaseLock();</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">struct </span>FreeDeleter {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordtype">void</span> operator()(uint8_t* p) { free(p); }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; };</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="comment">// memory m_buffer to encode to.</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; std::unique_ptr&lt;uint8_t, FreeDeleter&gt; m_bytes;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// cursor.</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; uint8_t* m_buf;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// size of m_bytes.</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordtype">size_t</span> m_size;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// high and low water marks for buffer size</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">static</span> <span class="keywordtype">size_t</span> m_lowWaterMark;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keyword">static</span> <span class="keywordtype">size_t</span> m_highWaterMark;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// flag to indicate we have a big buffer</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">bool</span> m_haveBigBuffer;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">const</span> CacheImpl* m_cache;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; Pool* m_pool;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeAscii(<span class="keyword">const</span> std::string&amp; value) {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; uint16_t len = static_cast&lt;uint16_t&gt;(</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; std::min&lt;size_t&gt;(value.length(), std::numeric_limits&lt;uint16_t&gt;::max()));</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; writeInt(len);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</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="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// blindly assumes ascii so mask off only 7 bits</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; write(static_cast&lt;int8_t&gt;(value.data()[i] &amp; 0x7F));</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeAsciiHuge(<span class="keyword">const</span> std::string&amp; value) {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; uint32_t len = static_cast&lt;uint32_t&gt;(</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; std::min&lt;size_t&gt;(value.length(), std::numeric_limits&lt;uint32_t&gt;::max()));</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; writeInt(static_cast&lt;uint32_t&gt;(len));</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</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="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// blindly assumes ascii so mask off only 7 bits</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; write(static_cast&lt;int8_t&gt;(value.data()[i] &amp; 0x7F));</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</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; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT, <span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">void</span> writeJavaModifiedUtf8(</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">const</span> std::basic_string&lt;_CharT, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; writeJavaModifiedUtf8(value.data(), value.length());</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordtype">void</span> writeJavaModifiedUtf8(</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keyword">const</span> std::basic_string&lt;char, _Traits, _Allocator&gt;&amp; value);</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;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordtype">void</span> writeJavaModifiedUtf8(</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">const</span> std::basic_string&lt;char32_t, _Traits, _Allocator&gt;&amp; value);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeJavaModifiedUtf8(</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keyword">const</span> std::basic_string&lt;wchar_t, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keyword">typedef</span> std::conditional&lt;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char16_t), char16_t,</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; std::conditional&lt;<span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char32_t), char32_t,</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordtype">char</span>&gt;::type&gt;::type _Convert;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; writeJavaModifiedUtf8(reinterpret_cast&lt;const _Convert*&gt;(value.data()),</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; value.length());</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</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; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeJavaModifiedUtf8(<span class="keyword">const</span> char16_t* data, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (0 == len) {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; writeInt(static_cast&lt;uint16_t&gt;(0));</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">auto</span> encodedLen = static_cast&lt;uint16_t&gt;(</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; std::min&lt;size_t&gt;(getJavaModifiedUtf8EncodedLength(data, len),</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; std::numeric_limits&lt;uint16_t&gt;::max()));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; writeInt(encodedLen);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; ensureCapacity(encodedLen);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> end = m_buf + encodedLen;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">while</span> (m_buf &lt; end) {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; encodeJavaModifiedUtf8(*data++);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">if</span> (m_buf &gt; end) m_buf = end;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordtype">void</span> writeJavaModifiedUtf8(<span class="keyword">const</span> char32_t* data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT, <span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16Huge(</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keyword">const</span> std::basic_string&lt;_CharT, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; writeUtf16Huge(value.data(), value.length());</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">void</span> writeUtf16Huge(</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">const</span> std::basic_string&lt;char, _Traits, _Allocator&gt;&amp; value);</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; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordtype">void</span> writeUtf16Huge(</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keyword">const</span> std::basic_string&lt;char32_t, _Traits, _Allocator&gt;&amp; value);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16Huge(</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">const</span> std::basic_string&lt;wchar_t, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">typedef</span> std::conditional&lt;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char16_t), char16_t,</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; std::conditional&lt;<span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char32_t), char32_t,</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordtype">char</span>&gt;::type&gt;::type _Convert;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; writeUtf16Huge(reinterpret_cast&lt;const _Convert*&gt;(value.data()),</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; value.length());</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;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16Huge(<span class="keyword">const</span> char16_t* data, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; uint32_t len = static_cast&lt;uint32_t&gt;(</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; std::min&lt;size_t&gt;(length, std::numeric_limits&lt;uint32_t&gt;::max()));</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; writeInt(len);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; writeUtf16(data, length);</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</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="keywordtype">void</span> writeUtf16Huge(<span class="keyword">const</span> char32_t* data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _CharT, <span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16(</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> std::basic_string&lt;_CharT, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; writeUtf16(value.data(), value.length());</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordtype">void</span> writeUtf16(<span class="keyword">const</span> std::basic_string&lt;char, _Traits, _Allocator&gt;&amp; value);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordtype">void</span> writeUtf16(</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> std::basic_string&lt;char32_t, _Traits, _Allocator&gt;&amp; value);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Traits, <span class="keyword">class</span> _Allocator&gt;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16(</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> std::basic_string&lt;wchar_t, _Traits, _Allocator&gt;&amp; value) {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keyword">typedef</span> std::conditional&lt;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char16_t), char16_t,</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; std::conditional&lt;<span class="keyword">sizeof</span>(wchar_t) == <span class="keyword">sizeof</span>(char32_t), char32_t,</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordtype">char</span>&gt;::type&gt;::type _Convert;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; writeUtf16(reinterpret_cast&lt;const _Convert*&gt;(value.data()), value.length());</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeUtf16(<span class="keyword">const</span> char16_t* data, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; ensureCapacity(length * 2);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">for</span> (; length &gt; 0; length--, data++) {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; writeNoCheck(static_cast&lt;uint8_t&gt;(*data &gt;&gt; 8));</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; writeNoCheck(static_cast&lt;uint8_t&gt;(*data));</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</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="keywordtype">void</span> writeUtf16(<span class="keyword">const</span> char32_t* data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">static</span> <span class="keywordtype">size_t</span> getJavaModifiedUtf8EncodedLength(<span class="keyword">const</span> char16_t* data,</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> getEncodedLength(<span class="keyword">const</span> <span class="keywordtype">char</span> val, int32_t&amp; encodedLen) {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> ((val == 0) || (val &amp; 0x80)) {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// two byte.</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; encodedLen += 2;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// one byte.</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; encodedLen++;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> getEncodedLength(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span> val, int32_t&amp; encodedLen) {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">if</span> (val == 0) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; encodedLen += 2;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (val &lt; 0x80) <span class="comment">// ASCII character</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; encodedLen++;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (val &lt; 0x800) {</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; encodedLen += 2;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; encodedLen += 3;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> encodeChar(<span class="keyword">const</span> <span class="keywordtype">char</span> value) {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; uint8_t tmp = static_cast&lt;uint8_t&gt;(value);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> ((tmp == 0) || (tmp &amp; 0x80)) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="comment">// two byte.</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0xc0 | ((tmp &amp; 0xc0) &gt;&gt; 6));</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | (tmp &amp; 0x3f));</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// one byte.</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; *(m_buf++) = tmp;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</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;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// this will lose the character set encoding.</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> encodeChar(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span> value) {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; uint16_t c = static_cast&lt;uint16_t&gt;(value);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">if</span> (c == 0) {</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; *(m_buf++) = 0xc0;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; *(m_buf++) = 0x80;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0x80) { <span class="comment">// ASCII character</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(c);</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0x800) {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0xC0 | c &gt;&gt; 6);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | (c &amp; 0x3F));</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0xE0 | c &gt;&gt; 12);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | ((c &gt;&gt; 6) &amp; 0x3F));</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | (c &amp; 0x3F));</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; }</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; <span class="keyword">inline</span> <span class="keywordtype">void</span> encodeJavaModifiedUtf8(<span class="keyword">const</span> char16_t c) {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (c == 0) {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// NUL</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; *(m_buf++) = 0xc0;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; *(m_buf++) = 0x80;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0x80) {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="comment">// ASCII character</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(c);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0x800) {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0xC0 | c &gt;&gt; 6);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | (c &amp; 0x3F));</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0xE0 | c &gt;&gt; 12);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | ((c &gt;&gt; 6) &amp; 0x3F));</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; *(m_buf++) = static_cast&lt;uint8_t&gt;(0x80 | (c &amp; 0x3F));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeNoCheck(uint8_t value) { *(m_buf++) = value; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeNoCheck(int8_t value) {</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; writeNoCheck(static_cast&lt;uint8_t&gt;(value));</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; Pool* getPool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_pool; }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keyword">static</span> uint8_t* checkoutBuffer(<span class="keywordtype">size_t</span>* size);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> checkinBuffer(uint8_t* buffer, <span class="keywordtype">size_t</span> size);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">friend</span> Cache;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">friend</span> CacheImpl;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">friend</span> DataOutputInternal;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">friend</span> CacheableString;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">friend</span> TcrMessage;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;};</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;<span class="keyword">template</span> <span class="keywordtype">void</span> DataOutput::writeJavaModifiedUtf8(<span class="keyword">const</span> std::u16string&amp;);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;<span class="comment">// template void DataOutput::writeJavaModifiedUtf8(const std::u32string&amp;);</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;<span class="keyword">template</span> <span class="keywordtype">void</span> DataOutput::writeJavaModifiedUtf8(<span class="keyword">const</span> std::wstring&amp;);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;} <span class="comment">// namespace client</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;} <span class="comment">// namespace geode</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;} <span class="comment">// namespace apache</span></div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;<span class="preprocessor">#endif // GEODE_DATAOUTPUT_H_</span></div><div class="ttc" id="a00439_html_ab5ccdc412d23aa886c4f2e7fd3596382"><div class="ttname"><a href="a00439.html#ab5ccdc412d23aa886c4f2e7fd3596382">apache::geode::client::DataOutput::writeObject</a></div><div class="ttdeci">void writeObject(const std::shared_ptr&lt; PTR &gt; &amp;objptr, bool isDelta=false)</div><div class="ttdoc">Write a Serializable object to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:337</div></div>
<div class="ttc" id="a00439_html_ab313f27382acec8e32d07b5d56aee3c4"><div class="ttname"><a href="a00439.html#ab313f27382acec8e32d07b5d56aee3c4">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(uint32_t value)</div><div class="ttdoc">Write a 32-bit unsigned integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:162</div></div>
<div class="ttc" id="a00439_html"><div class="ttname"><a href="a00439.html">apache::geode::client::DataOutput</a></div><div class="ttdoc">Provide operations for writing primitive data values, byte arrays, strings, Serializable objects to a...</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:48</div></div>
<div class="ttc" id="a00044_html"><div class="ttname"><a href="a00044.html">CacheableString.hpp</a></div></div>
<div class="ttc" id="a00439_html_aa6768e74ab19803b2bf466dc2d612fdd"><div class="ttname"><a href="a00439.html#aa6768e74ab19803b2bf466dc2d612fdd">apache::geode::client::DataOutput::writeBytesOnly</a></div><div class="ttdeci">void writeBytesOnly(const uint8_t *bytes, size_t len)</div><div class="ttdoc">Write an array of unsigned bytes without its length to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:114</div></div>
<div class="ttc" id="a00439_html_a92779f7b388b020878a3616cdcc8896d"><div class="ttname"><a href="a00439.html#a92779f7b388b020878a3616cdcc8896d">apache::geode::client::DataOutput::writeBytes</a></div><div class="ttdeci">void writeBytes(const uint8_t *bytes, int32_t len)</div><div class="ttdoc">Write an array of unsigned bytes to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:80</div></div>
<div class="ttc" id="a00439_html_a181844ecf7bb41c5df5c2fe01aeb1f2d"><div class="ttname"><a href="a00439.html#a181844ecf7bb41c5df5c2fe01aeb1f2d">apache::geode::client::DataOutput::writeBytesOnly</a></div><div class="ttdeci">void writeBytesOnly(const int8_t *bytes, size_t len)</div><div class="ttdoc">Write an array of signed bytes without its length to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:131</div></div>
<div class="ttc" id="a00439_html_a0999e17499bbc619a016ac19bf112c37"><div class="ttname"><a href="a00439.html#a0999e17499bbc619a016ac19bf112c37">apache::geode::client::DataOutput::getBuffer</a></div><div class="ttdeci">const uint8_t * getBuffer(size_t *rsize) const</div><div class="ttdoc">Get a pointer to the internal buffer of DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:392</div></div>
<div class="ttc" id="a00439_html_a2b283a6645b10786ad31d49b3c4e7575"><div class="ttname"><a href="a00439.html#a2b283a6645b10786ad31d49b3c4e7575">apache::geode::client::DataOutput::writeChar</a></div><div class="ttdeci">void writeChar(uint16_t value)</div><div class="ttdoc">Write a 16-bit Char (wchar_t) value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:151</div></div>
<div class="ttc" id="a00439_html_a545bafa6899d72fc9c08b99fd0c33896"><div class="ttname"><a href="a00439.html#a545bafa6899d72fc9c08b99fd0c33896">apache::geode::client::DataOutput::write</a></div><div class="ttdeci">void write(int8_t value)</div><div class="ttdoc">Write a signed byte to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:65</div></div>
<div class="ttc" id="a00439_html_ad394efcb48c1a358a58e5741d914d58d"><div class="ttname"><a href="a00439.html#ad394efcb48c1a358a58e5741d914d58d">apache::geode::client::DataOutput::writeBoolean</a></div><div class="ttdeci">void writeBoolean(bool value)</div><div class="ttdoc">Write a boolean value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:72</div></div>
<div class="ttc" id="a00439_html_a2b8d781f1558bf7395367e97bfd98cf0"><div class="ttname"><a href="a00439.html#a2b8d781f1558bf7395367e97bfd98cf0">apache::geode::client::DataOutput::writeDouble</a></div><div class="ttdeci">void writeDouble(double value)</div><div class="ttdoc">Write a double precision real number to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:254</div></div>
<div class="ttc" id="a00439_html_a12f4df4f3cd0dfef9773c97890e4203e"><div class="ttname"><a href="a00439.html#a12f4df4f3cd0dfef9773c97890e4203e">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(uint64_t value)</div><div class="ttdoc">Write a 64-bit unsigned integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:175</div></div>
<div class="ttc" id="a00439_html_a3cc2f8b86e6c1196f0ded4d39698e0a5"><div class="ttname"><a href="a00439.html#a3cc2f8b86e6c1196f0ded4d39698e0a5">apache::geode::client::DataOutput::getBuffer</a></div><div class="ttdeci">const uint8_t * getBuffer() const</div><div class="ttdoc">Get a pointer to the internal buffer of DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:373</div></div>
<div class="ttc" id="a00787_html"><div class="ttname"><a href="a00787.html">apache::geode::client::Pool</a></div><div class="ttdoc">A pool of connections to connect from a client to a set of Geode Cache Servers.</div><div class="ttdef"><b>Definition:</b> Pool.hpp:63</div></div>
<div class="ttc" id="a00439_html_a62d535a34e37cee85404250ac4f8b514"><div class="ttname"><a href="a00439.html#a62d535a34e37cee85404250ac4f8b514">apache::geode::client::DataOutput::writeBytes</a></div><div class="ttdeci">void writeBytes(const int8_t *bytes, int32_t len)</div><div class="ttdoc">Write an array of signed bytes to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:99</div></div>
<div class="ttc" id="a00439_html_a1ee6730cba24a959cdd31cb0db7e9d2a"><div class="ttname"><a href="a00439.html#a1ee6730cba24a959cdd31cb0db7e9d2a">apache::geode::client::DataOutput::rewindCursor</a></div><div class="ttdeci">void rewindCursor(size_t offset)</div><div class="ttdoc">Rewind the buffer cursor by the given offset.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:362</div></div>
<div class="ttc" id="a00439_html_a5d630c68986bbb665ea6326905868cfd"><div class="ttname"><a href="a00439.html#a5d630c68986bbb665ea6326905868cfd">apache::geode::client::DataOutput::getRemainingBufferLength</a></div><div class="ttdeci">size_t getRemainingBufferLength() const</div><div class="ttdoc">Get a pointer to the internal buffer of DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:381</div></div>
<div class="ttc" id="a00439_html_a3959bca668435c2f33eb870df34e4132"><div class="ttname"><a href="a00439.html#a3959bca668435c2f33eb870df34e4132">apache::geode::client::DataOutput::writeFloat</a></div><div class="ttdeci">void writeFloat(float value)</div><div class="ttdoc">Write a float value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:240</div></div>
<div class="ttc" id="a00439_html_a7f5e95a11c0fe3078fe9d0ba158ee894"><div class="ttname"><a href="a00439.html#a7f5e95a11c0fe3078fe9d0ba158ee894">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(uint16_t value)</div><div class="ttdoc">Write a 16-bit unsigned integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:140</div></div>
<div class="ttc" id="a00583_html"><div class="ttname"><a href="a00583.html">apache::geode::client::OutOfMemoryException</a></div><div class="ttdoc">Thrown when the system cannot allocate any more memory.</div><div class="ttdef"><b>Definition:</b> ExceptionTypes.hpp:392</div></div>
<div class="ttc" id="a00439_html_ac640f11ac3d107a939a7cc16996d1132"><div class="ttname"><a href="a00439.html#ac640f11ac3d107a939a7cc16996d1132">apache::geode::client::DataOutput::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Reset the internal cursor to the start of the buffer.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:417</div></div>
<div class="ttc" id="a00439_html_ae5507be2b7d4830a7d0bd286eae72069"><div class="ttname"><a href="a00439.html#ae5507be2b7d4830a7d0bd286eae72069">apache::geode::client::DataOutput::writeChars</a></div><div class="ttdeci">void writeChars(const _CharT *value)</div><div class="ttdoc">Writes a sequence of UTF-16 code units representing the given string value.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:326</div></div>
<div class="ttc" id="a00439_html_ac8322019f5260c9b28f7c373c3e54cbd"><div class="ttname"><a href="a00439.html#ac8322019f5260c9b28f7c373c3e54cbd">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(int32_t value)</div><div class="ttdoc">Write a 32-bit signed integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:201</div></div>
<div class="ttc" id="a00439_html_ac09763165d0c7803e46424c40428b925"><div class="ttname"><a href="a00439.html#ac09763165d0c7803e46424c40428b925">apache::geode::client::DataOutput::~DataOutput</a></div><div class="ttdeci">virtual ~DataOutput() noexcept</div><div class="ttdoc">Destruct a DataOutput, including releasing the created buffer.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:473</div></div>
<div class="ttc" id="a00439_html_addd887a9322e2e40921c83263adce1f7"><div class="ttname"><a href="a00439.html#addd887a9322e2e40921c83263adce1f7">apache::geode::client::DataOutput::getBufferLength</a></div><div class="ttdeci">size_t getBufferLength() const</div><div class="ttdoc">Get the length of current data in the internal buffer of DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:412</div></div>
<div class="ttc" id="a00439_html_ab584bfb66bc14fddfffb4282a2eafb9b"><div class="ttname"><a href="a00439.html#ab584bfb66bc14fddfffb4282a2eafb9b">apache::geode::client::DataOutput::write</a></div><div class="ttdeci">void write(uint8_t value)</div><div class="ttdoc">Write an unsigned byte to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:55</div></div>
<div class="ttc" id="a00439_html_ae9419d1d5e9e1d208619e63676e87f48"><div class="ttname"><a href="a00439.html#ae9419d1d5e9e1d208619e63676e87f48">apache::geode::client::DataOutput::advanceCursor</a></div><div class="ttdeci">void advanceCursor(size_t offset)</div><div class="ttdoc">Advance the buffer cursor by the given offset.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:352</div></div>
<div class="ttc" id="a00439_html_a20ce3cac43a3171c84c8bb6551ef938d"><div class="ttname"><a href="a00439.html#a20ce3cac43a3171c84c8bb6551ef938d">apache::geode::client::DataOutput::writeChars</a></div><div class="ttdeci">void writeChars(const std::basic_string&lt; _CharT, _Tail... &gt; &amp;value)</div><div class="ttdoc">Writes a sequence of UTF-16 code units representing the given string value.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:309</div></div>
<div class="ttc" id="a00439_html_a276d2915b4b5ed859f6dfa7a8632db77"><div class="ttname"><a href="a00439.html#a276d2915b4b5ed859f6dfa7a8632db77">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(int16_t value)</div><div class="ttdoc">Write a 16-bit signed integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:192</div></div>
<div class="ttc" id="a00439_html_ad41c4a2ecad093aa06aead762105bc53"><div class="ttname"><a href="a00439.html#ad41c4a2ecad093aa06aead762105bc53">apache::geode::client::DataOutput::writeInt</a></div><div class="ttdeci">void writeInt(int64_t value)</div><div class="ttdoc">Write a 64-bit signed integer value to the DataOutput.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:210</div></div>
<div class="ttc" id="a00439_html_a74d7360f33e3187d9582cb199099b84f"><div class="ttname"><a href="a00439.html#a74d7360f33e3187d9582cb199099b84f">apache::geode::client::DataOutput::writeArrayLen</a></div><div class="ttdeci">void writeArrayLen(int32_t len)</div><div class="ttdoc">Write a 32-bit signed integer array length value to the DataOutput in a manner compatible with java s...</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:221</div></div>
<div class="ttc" id="a00439_html_ab13fa790ed34ffe9999a097d35ba0c8a"><div class="ttname"><a href="a00439.html#ab13fa790ed34ffe9999a097d35ba0c8a">apache::geode::client::DataOutput::getCursor</a></div><div class="ttdeci">const uint8_t * getCursor()</div><div class="ttdoc">Get an internal pointer to the current location in the DataOutput byte array.</div><div class="ttdef"><b>Definition:</b> DataOutput.hpp:345</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<HR><address style="align: right;"><small>Apache Geode C++ Cache API Documentation</small></address>