You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jr...@apache.org on 2018/05/01 13:44:58 UTC

[08/51] [abbrv] [partial] qpid-site git commit: QPID-8154: Refresh the proton doc snapshot

http://git-wip-us.apache.org/repos/asf/qpid-site/blob/701caf21/content/releases/qpid-proton-master/proton/cpp/api/encoder_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-master/proton/cpp/api/encoder_8hpp_source.html b/content/releases/qpid-proton-master/proton/cpp/api/encoder_8hpp_source.html
index 6cdac6a..7cc3555 100755
--- a/content/releases/qpid-proton-master/proton/cpp/api/encoder_8hpp_source.html
+++ b/content/releases/qpid-proton-master/proton/cpp/api/encoder_8hpp_source.html
@@ -93,7 +93,7 @@ $(document).ready(function(){initNavTree('encoder_8hpp_source.html','');});
 <div class="title">encoder.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<a href="encoder_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef PROTON_CODEC_ENCODER_HPP</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define PROTON_CODEC_ENCODER_HPP</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * or more contrib
 utor license agreements.  See the NOTICE file</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&
 #160;<span class="comment"> *</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * KIND, either express or implied.  See the Licens
 e for the</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * under the License.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;../internal/data.hpp&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;../internal/type_traits.hpp&quot;</span></div><div class="line"><a name="l00
 027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;../types_fwd.hpp&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="common_8hpp.html">./common.hpp</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;proton/type_compat.h&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceproton.html">proton</a> {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="
 keyword">class </span>scalar_base;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">namespace </span>internal{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">class </span>value_base;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;}</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">namespace </span>codec {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classproton_1_1codec_1_1encoder.html">   50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classproton_1_1codec_1_1encod
 er.html">encoder</a> : <span class="keyword">public</span> internal::data {</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classproton_1_1codec_1_1encoder.html#a3c0a094e7f852de0a4197c0fdab85004">   53</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classproton_1_1codec_1_1encoder.html#a3c0a094e7f852de0a4197c0fdab85004">encoder</a>(<span class="keyword">const</span> data&amp; d) : data(d) {}</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    PN_CPP_EXTERN <span class="keyword">explicit</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>(internal::value_base&amp; v);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<
 /div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    PN_CPP_EXTERN <span class="keywordtype">bool</span> encode(<span class="keywordtype">char</span>* buffer, <span class="keywordtype">size_t</span>&amp; size);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    PN_CPP_EXTERN <span class="keywordtype">void</span> encode(std::string&amp;);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    PN_CPP_EXTERN std::string encode();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>
 (<span class="keywordtype">bool</span>);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint8_t);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int8_t);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint16_t);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int16_t);</div><div class="line"><a name="l00083"></a><span class="lineno"
 >   83</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint32_t);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int32_t);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">wchar_t</span>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint64_t);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href
 ="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int64_t);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1timestamp.html">timestamp</a>);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">float</span>);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">double</span>);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    PN_CPP_EXTERN encoder&amp; <a 
 class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal32.html">decimal32</a>);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal64.html">decimal64</a>);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal128.html">decimal128</a>);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" hr
 ef="classproton_1_1uuid.html">uuid</a>&amp;);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> std::string&amp;);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1symbol.html">symbol</a>&amp;);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1binary.html">binary</a>&amp;);</div><div class="line"><a name="l00098"></a><span cl
 ass="lineno">   98</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1scalar__base.html">scalar_base</a>&amp;);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> null&amp;);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> internal::value_base&amp;);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="l
 ine"><a name="l00109"></a><span class="lineno">  109</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1start">start</a>&amp;);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>&amp;);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno
 ">  116</span>&#160;    <span class="comment">// Undefined template to  prevent pointers being implicitly converted to bool.</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">void</span>* <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> T*);</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span>list_cref { T&amp; ref; list_cref(T&amp; r) : ref(r) {} };</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt
 ; <span class="keyword">struct </span>map_cref { T&amp; ref;  map_cref(T&amp; r) : ref(r) {} };</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span>array_cref {</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1start">start</a> array_start;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        T&amp; ref;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        array_cref(T&amp; r, <a class="code" href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9">type_id</a> el, <span class="keywordtype">bool</span> described) : array_start(<a class="code" href="namesp
 aceproton.html#a83c2656d467d69eb49725c18f5aa13a9a1e029fbf0c881b85d80fc8e89b753688">ARRAY</a>, el, described), ref(r) {}</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    };</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> list_cref&lt;T&gt; list(T&amp; x) { <span class="keywordflow">return</span> list_cref&lt;T&gt;(x); }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> map_cref&lt;T&gt; <a class="code" href="classproton_1_1map.html">map</a>(T&amp; x) { <span class="keywordflow">return</span> map_cref&lt;T&gt;(x); }</div><div class="line"><a name="l00130"><
 /a><span class="lineno">  130</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> array_cref&lt;T&gt; array(T&amp; x, <a class="code" href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9">type_id</a> element, <span class="keywordtype">bool</span> described=<span class="keyword">false</span>) {</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <span class="keywordflow">return</span> array_cref&lt;T&gt;(x, element, described);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    }</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;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; encoder&amp; operator&lt;&lt;(const map_cref&lt;T&gt;&amp; x) {</div><div class="line"><a nam
 e="l00135"></a><span class="lineno">  135</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        *<span class="keyword">this</span> &lt;&lt; start::map();</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">typename</span> T::const_iterator i = x.ref.begin(); i != x.ref.end(); ++i)</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;            *<span class="keyword">this</span> &lt;&lt; i-&gt;first &lt;&lt; i-&gt;second;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      
   <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    }</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; encoder&amp; operator&lt;&lt;(const list_cref&lt;T&gt;&amp; x) {</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        *<span class="keyword">this</span> &lt;&lt; start::list();</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">typename</span> T::const_iterator i = x.ref.begin(); i !=
  x.ref.end(); ++i)</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            *<span class="keyword">this</span> &lt;&lt; *i;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    }</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; encoder&amp; operator&lt;&lt;(const array_cref&lt;T&gt;&amp; x) {</div><div class="line"><a
  name="l00153"></a><span class="lineno">  153</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        *<span class="keyword">this</span> &lt;&lt; x.array_start;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">typename</span> T::const_iterator i = x.ref.begin(); i != x.ref.end(); ++i)</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;            *<span class="keyword">this</span> &lt;&lt; *i;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow
 ">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  <span class="keyword">private</span>:</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt; encoder&amp; insert(<span class="keyword">const</span> T&amp; x, <span class="keywordtype">int</span> (*put)(pn_data_t*, U));</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordtype">void</span> check(<span class="keywordtype">long</span> result);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;};</div><div class="line"><a name="l00166"></a><span cl
 ass="lineno">  166</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="namespaceproton_1_1codec.html#acdb9db1193e2f3d0719ed56e4d7ae8d2">  168</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp; e, <span class="keyword">const</span> <span class="keywordtype">char</span>* s) { <span class="keywordflow">return</span> e &lt;&lt; std::string(s); }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">typename</span> internal::enable_if&lt;internal::is_unknown_integer&lt;T&gt;::v
 alue, <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp;&gt;::type</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="namespaceproton_1_1codec.html#aad3ea7f84bd70e8fef93486f56e4ee17">  172</a></span>&#160;<a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp; e, T i)  {</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keyword">using namespace </span>internal;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">return</span> e &lt;&lt; static_cast&lt;typename integer_type&lt;sizeof(T), is_signed&lt;T&gt;::value&gt;::type&gt;(i);</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;}</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;
 </div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="keyword">namespace </span>is_encodable_impl {   <span class="comment">// Protect the world from fallback operator&lt;&lt;</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="keyword">using namespace </span>internal;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;sfinae::no <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a> <span class="keyword">const</span>&amp;, <span class="keyword">const</span> sfinae::any_t &amp;); <span class="comme
 nt">// Fallback</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>is_encodable : <span class="keyword">public</span> sfinae {</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="keyword">static</span> yes test(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp;);</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keyword">static</span> no test(...);         <span class="comment">// Failed test, no match.</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keyword">static</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>* e;</div><div class=
 "line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> T* t;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> <a class="code" href="classproton_1_1value.html">value</a> = <span class="keyword">sizeof</span>(test(*e &lt;&lt; *t)) == <span class="keyword">sizeof</span>(yes);</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;};</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="comment">// Avoid recursion</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>is_encodable&lt;value&
 gt; : <span class="keyword">public</span> true_type {};</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;} <span class="comment">// is_encodable_impl</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="keyword">using</span> is_encodable_impl::is_encodable;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="comment">// Metafunction to test if a class looks like an encodable map from K to T.</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> M, <span class="keyword">class</span> K, <span class="k
 eyword">class</span> T, <span class="keyword">class</span> Enable = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="keyword">struct </span>is_encodable_map : <span class="keyword">public</span> internal::false_type {};</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> M, <span class="keyword">class</span> K, <span class="keyword">class</span> T&gt; <span class="keyword">struct </span>is_encodable_map&lt;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    M, K, T, typename internal::enable_if&lt;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                 internal::is_same&lt;K, typename M::key_type&gt;::value &amp;&amp;</div><div
  class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;                 internal::is_same&lt;T, typename M::mapped_type&gt;::value &amp;&amp;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                 is_encodable&lt;M&gt;::value</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;                 &gt;::type</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    &gt; : <span class="keyword">public</span> internal::true_type {};</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;} <span class="comment">// codec</span></div><div class="line"><a name="l00216"></a><span class="lineno">  
 216</span>&#160;} <span class="comment">// proton</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="preprocessor">#endif </span></div><div class="ttc" id="namespaceproton_html_ae6fabe30961a3d3280bb8445e743b21c"><div class="ttname"><a href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">proton::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;, const binary &amp;)</div><div class="ttdoc">Print a binary value. </div></div>
+<a href="encoder_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef PROTON_CODEC_ENCODER_HPP</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define PROTON_CODEC_ENCODER_HPP</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * or more contrib
 utor license agreements.  See the NOTICE file</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&
 #160;<span class="comment"> *</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * KIND, either express or implied.  See the Licens
 e for the</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * under the License.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;../internal/data.hpp&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;../internal/type_traits.hpp&quot;</span></div><div class="line"><a name="l00
 027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;../types_fwd.hpp&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="common_8hpp.html">./common.hpp</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;proton/type_compat.h&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceproton.html">proton</a> {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="
 keyword">class </span>scalar_base;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">namespace </span>internal{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">class </span>value_base;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;}</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">namespace </span>codec {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classproton_1_1codec_1_1encoder.html">   50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classproton_1_1codec_1_1encod
 er.html">encoder</a> : <span class="keyword">public</span> internal::data {</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classproton_1_1codec_1_1encoder.html#a3c0a094e7f852de0a4197c0fdab85004">   53</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classproton_1_1codec_1_1encoder.html#a3c0a094e7f852de0a4197c0fdab85004">encoder</a>(<span class="keyword">const</span> data&amp; d) : data(d) {}</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    PN_CPP_EXTERN <span class="keyword">explicit</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>(internal::value_base&amp; v);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<
 /div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    PN_CPP_EXTERN <span class="keywordtype">bool</span> encode(<span class="keywordtype">char</span>* buffer, <span class="keywordtype">size_t</span>&amp; size);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    PN_CPP_EXTERN <span class="keywordtype">void</span> encode(std::string&amp;);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    PN_CPP_EXTERN std::string encode();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>
 (<span class="keywordtype">bool</span>);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint8_t);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int8_t);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint16_t);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int16_t);</div><div class="line"><a name="l00083"></a><span class="lineno"
 >   83</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint32_t);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int32_t);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">wchar_t</span>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(uint64_t);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href
 ="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(int64_t);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1timestamp.html">timestamp</a>);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">float</span>);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keywordtype">double</span>);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    PN_CPP_EXTERN encoder&amp; <a 
 class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal32.html">decimal32</a>);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal64.html">decimal64</a>);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1decimal128.html">decimal128</a>);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" hr
 ef="classproton_1_1uuid.html">uuid</a>&amp;);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> std::string&amp;);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1symbol.html">symbol</a>&amp;);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1binary.html">binary</a>&amp;);</div><div class="line"><a name="l00098"></a><span cl
 ass="lineno">   98</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1scalar__base.html">scalar_base</a>&amp;);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="classproton_1_1null.html">null</a>&amp;);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#if PN_CPP_HAS_NULLPTR</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(decltype(<span class="keyword">nullptr</span>));</div><di
 v class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> internal::value_base&amp;);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1start">start</a>&amp;);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div
 ><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    PN_CPP_EXTERN encoder&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<span class="keyword">const</span> <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>&amp;);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="comment">// Undefined template to  prevent pointers being implicitly converted to bool.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keywordtype">void</span>* <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">
 operator&lt;&lt;</a>(<span class="keyword">const</span> T*);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span>list_cref { T&amp; ref; list_cref(T&amp; r) : ref(r) {} };</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span>map_cref { T&amp; ref;  map_cref(T&amp; r) : ref(r) {} };</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">struct </span>array_cref {</div><div class="lin
 e"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1start">start</a> array_start;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        T&amp; ref;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        array_cref(T&amp; r, <a class="code" href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9">type_id</a> el, <span class="keywordtype">bool</span> described) : array_start(<a class="code" href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9a1e029fbf0c881b85d80fc8e89b753688">ARRAY</a>, el, described), ref(r) {}</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    };</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keyword">template</span> 
 &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> list_cref&lt;T&gt; list(T&amp; x) { <span class="keywordflow">return</span> list_cref&lt;T&gt;(x); }</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> map_cref&lt;T&gt; <a class="code" href="classproton_1_1map.html">map</a>(T&amp; x) { <span class="keywordflow">return</span> map_cref&lt;T&gt;(x); }</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">static</span> array_cref&lt;T&gt; array(T&amp; x, <a class="code" href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9">type_id</a> element, <span class="keywordtype">bool</span> described=<span class="keyword">false</span>) {</div><div class="line"><a name="l
 00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordflow">return</span> array_cref&lt;T&gt;(x, element, described);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    }</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; encoder&amp; operator&lt;&lt;(const map_cref&lt;T&gt;&amp; x) {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        *<span class="keyword">this</span> &lt;&lt; start::map();</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <span class="keywordflow">for</span> (<span class="keyw
 ord">typename</span> T::const_iterator i = x.ref.begin(); i != x.ref.end(); ++i)</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;            *<span class="keyword">this</span> &lt;&lt; i-&gt;first &lt;&lt; i-&gt;second;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    }</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt
 ; encoder&amp; operator&lt;&lt;(const list_cref&lt;T&gt;&amp; x) {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        *<span class="keyword">this</span> &lt;&lt; start::list();</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">typename</span> T::const_iterator i = x.ref.begin(); i != x.ref.end(); ++i)</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            *<span class="keyword">this</span> &lt;&lt; *i;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line">
 <a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    }</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; encoder&amp; operator&lt;&lt;(const array_cref&lt;T&gt;&amp; x) {</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        internal::state_guard sg(*<span class="keyword">this</span>);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        *<span class="keyword">this</span> &lt;&lt; x.array_start;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">for</span> (<span class=
 "keyword">typename</span> T::const_iterator i = x.ref.begin(); i != x.ref.end(); ++i)</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;            *<span class="keyword">this</span> &lt;&lt; *i;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        *<span class="keyword">this</span> &lt;&lt; <a class="code" href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">finish</a>();</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    }</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  <span class="keyword">private</span>:</div><div class="line"><a name="l00166"></a><span class="lineno">  166<
 /span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt; encoder&amp; insert(<span class="keyword">const</span> T&amp; x, <span class="keywordtype">int</span> (*put)(pn_data_t*, U));</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <span class="keywordtype">void</span> check(<span class="keywordtype">long</span> result);</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="l00171"></a><span class="lineno"><a class="line" href="namespaceproton_1_1codec.html#acdb9db1193e2f3d0719ed56e4d7ae8d2">  171</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp; <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<
 a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp; e, <span class="keyword">const</span> <span class="keywordtype">char</span>* s) { <span class="keywordflow">return</span> e &lt;&lt; std::string(s); }</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">typename</span> internal::enable_if&lt;internal::is_unknown_integer&lt;T&gt;::value, <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp;&gt;::type</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="namespaceproton_1_1codec.html#aad3ea7f84bd70e8fef93486f56e4ee17">  175</a></span>&#160;<a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1codec_1_1encoder
 .html">encoder</a>&amp; e, T i)  {</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keyword">using namespace </span>internal;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">return</span> e &lt;&lt; static_cast&lt;typename integer_type&lt;sizeof(T), is_signed&lt;T&gt;::value&gt;::type&gt;(i);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;}</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="keyword">namespace </span>is_encodable_impl {   <span class="comment">// Protect the world from fallback operator&lt;&lt;</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div><div class="line"><a
  name="l00184"></a><span class="lineno">  184</span>&#160;<span class="keyword">using namespace </span>internal;</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;sfinae::no <a class="code" href="namespaceproton.html#ae6fabe30961a3d3280bb8445e743b21c">operator&lt;&lt;</a>(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a> <span class="keyword">const</span>&amp;, <span class="keyword">const</span> sfinae::any_t &amp;); <span class="comment">// Fallback</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>is_encodable : <span class="keyword">public</span> sfinae {</div><div class="line"><a name="l00189"></a><spa
 n class="lineno">  189</span>&#160;    <span class="keyword">static</span> yes test(<a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>&amp;);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keyword">static</span> no test(...);         <span class="comment">// Failed test, no match.</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keyword">static</span> <a class="code" href="classproton_1_1codec_1_1encoder.html">encoder</a>* e;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> T* t;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> <a class="code" href="classproton_1_1value.html">value</a> = <span class="k
 eyword">sizeof</span>(test(*e &lt;&lt; *t)) == <span class="keyword">sizeof</span>(yes);</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="l00196"></a><span class="lineno">  196</span>&#160;<span class="comment">// Avoid recursion</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>is_encodable&lt;value&gt; : <span class="keyword">public</span> true_type {};</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;} <span class="comment">// is_encodable_impl</span></div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lin
 eno">  201</span>&#160;<span class="keyword">using</span> is_encodable_impl::is_encodable;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment">// Metafunction to test if a class looks like an encodable map from K to T.</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> M, <span class="keyword">class</span> K, <span class="keyword">class</span> T, <span class="keyword">class</span> Enable = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="keyword">struct </span>is_encodable_map : <span class="keyword">public</span> internal::false_type {};</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a 
 name="l00207"></a><span class="lineno">  207</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> M, <span class="keyword">class</span> K, <span class="keyword">class</span> T&gt; <span class="keyword">struct </span>is_encodable_map&lt;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    M, K, T, typename internal::enable_if&lt;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;                 internal::is_same&lt;K, typename M::key_type&gt;::value &amp;&amp;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;                 internal::is_same&lt;T, typename M::mapped_type&gt;::value &amp;&amp;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;                 is_encodable&lt;M&gt;::value</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;                 &gt;::type</div><div class="l
 ine"><a name="l00213"></a><span class="lineno">  213</span>&#160;    &gt; : <span class="keyword">public</span> internal::true_type {};</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;} <span class="comment">// codec</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;} <span class="comment">// proton</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="preprocessor">#endif </span></div><div class="ttc" id="namespaceproton_html_ae6fabe30961a3d3280bb8445e743b21c"><div class="ttname"><a href="namespaceproton.html#ae6fabe30961a3d3280bb
 8445e743b21c">proton::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;, const binary &amp;)</div><div class="ttdoc">Print a binary value. </div></div>
 <div class="ttc" id="namespaceproton_1_1codec_html_structproton_1_1codec_1_1start"><div class="ttname"><a href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1start">proton::codec::start</a></div><div class="ttdoc">Unsettled API - Start encoding a complex type. </div><div class="ttdef"><b>Definition:</b> common.hpp:34</div></div>
 <div class="ttc" id="classproton_1_1codec_1_1encoder_html"><div class="ttname"><a href="classproton_1_1codec_1_1encoder.html">proton::codec::encoder</a></div><div class="ttdoc">Unsettled API - A stream-like encoder from C++ values to AMQP bytes. </div><div class="ttdef"><b>Definition:</b> encoder.hpp:50</div></div>
 <div class="ttc" id="namespaceproton_html_a83c2656d467d69eb49725c18f5aa13a9a1e029fbf0c881b85d80fc8e89b753688"><div class="ttname"><a href="namespaceproton.html#a83c2656d467d69eb49725c18f5aa13a9a1e029fbf0c881b85d80fc8e89b753688">proton::ARRAY</a></div><div class="ttdoc">A sequence of values of the same type. </div><div class="ttdef"><b>Definition:</b> type_id.hpp:60</div></div>
@@ -112,6 +112,7 @@ $(document).ready(function(){initNavTree('encoder_8hpp_source.html','');});
 <div class="ttc" id="classproton_1_1value_html"><div class="ttname"><a href="classproton_1_1value.html">proton::value</a></div><div class="ttdoc">A holder for any AMQP value, simple or complex. </div><div class="ttdef"><b>Definition:</b> value.hpp:57</div></div>
 <div class="ttc" id="namespaceproton_1_1codec_html_structproton_1_1codec_1_1finish"><div class="ttname"><a href="namespaceproton_1_1codec.html#structproton_1_1codec_1_1finish">proton::codec::finish</a></div><div class="ttdoc">Unsettled API - Finish inserting or extracting a complex type. </div><div class="ttdef"><b>Definition:</b> common.hpp:57</div></div>
 <div class="ttc" id="namespaceproton_html"><div class="ttname"><a href="namespaceproton.html">proton</a></div><div class="ttdoc">The main Proton namespace. </div><div class="ttdef"><b>Definition:</b> annotation_key.hpp:33</div></div>
+<div class="ttc" id="classproton_1_1null_html"><div class="ttname"><a href="classproton_1_1null.html">proton::null</a></div><div class="ttdoc">The type of the AMQP null value. </div><div class="ttdef"><b>Definition:</b> null.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 </div><!-- doc-content -->
 <!-- start footer part -->


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org