/usr/share/doc/libwreport-doc/apidocs/bufr_8h_source.html is in libwreport-doc 3.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libwreport: bufr.h 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="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">libwreport
 <span id="projectnumber">3.6</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_a77a435eba5a6a11d9ac0a833d87986c.html">wreport</a></li><li class="navelem"><a class="el" href="dir_ed27460347f6a2476cdc3bc32b044e8c.html">buffers</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">bufr.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef WREPORT_BUFFERS_BUFR_H</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define WREPORT_BUFFERS_BUFR_H</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <<a class="code" href="error_8h.html">wreport/error.h</a>></span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <wreport/var.h></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <functional></span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">namespace </span><a class="code" href="namespacewreport.html">wreport</a> {</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">struct </span>Var;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span>buffers {</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html"> 18</a></span> <span class="keyword">class </span><a class="code" href="classwreport_1_1buffers_1_1BufrInput.html">BufrInput</a></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0e793046cdfae6ffaf976e444ad1bcc8">scan_section_length</a>(<span class="keywordtype">unsigned</span> sec_no);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a27d03edd90b5ffdc591787c4094a357b"> 29</a></span>  <span class="keyword">const</span> uint8_t* <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a27d03edd90b5ffdc591787c4094a357b">data</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a91fe25c7719986bc004738b7f82a89ab"> 32</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a91fe25c7719986bc004738b7f82a89ab">data_len</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a157ae41028b30944b77350577ed1e674"> 41</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a157ae41028b30944b77350577ed1e674">fname</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a34fe1e20e64b0c1ba0ae83c4eccc4402"> 50</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a34fe1e20e64b0c1ba0ae83c4eccc4402">start_offset</a> = 0;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a6a83b4e0288790827100cb30121f71aa"> 53</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a6a83b4e0288790827100cb30121f71aa">s4_cursor</a> = 0;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#aec3ce8d51ed493dd567ec07190790254"> 56</a></span>  uint8_t <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#aec3ce8d51ed493dd567ec07190790254">pbyte</a> = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a41875e7f3f670d44f14a58ff917d219b"> 59</a></span>  <span class="keywordtype">int</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a41875e7f3f670d44f14a58ff917d219b">pbyte_len</a> = 0;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a3623e40d33a8d008164006bade149e60"> 62</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a3623e40d33a8d008164006bade149e60">sec</a>[6];</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a689962bd302f91ecd617b492257d340e">BufrInput</a>(<span class="keyword">const</span> std::string& in);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ab0ea620a21afd96df1e2297d1ec04d4d">scan_lead_sections</a>();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#aaec61fc6af1956f898ed013092a19a51">scan_other_sections</a>(<span class="keywordtype">bool</span> has_optional);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#aafde03b7e2e3d61d23075a416cd873cf"> 96</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#aafde03b7e2e3d61d23075a416cd873cf">offset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a6a83b4e0288790827100cb30121f71aa">s4_cursor</a>; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#ae0471a2e8cd46d104c3230e597d70e26"> 99</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ae0471a2e8cd46d104c3230e597d70e26">bits_left</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_len - s4_cursor) * 8 + <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a41875e7f3f670d44f14a58ff917d219b">pbyte_len</a>; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a665407336a4d5b36851d02e172dfd471"> 102</a></span>  <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a665407336a4d5b36851d02e172dfd471">read_byte</a>(<span class="keywordtype">unsigned</span> pos)<span class="keyword"> const</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span>)data[pos];</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a7832558aa5dfff73bb9b8fe597a9bd4b"> 108</a></span>  <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a7832558aa5dfff73bb9b8fe597a9bd4b">read_byte</a>(<span class="keywordtype">unsigned</span> section, <span class="keywordtype">unsigned</span> pos)<span class="keyword"> const</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span>)data[sec[section] + pos];</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a42b24b3793c4228871f3d6fe295ff0b5"> 114</a></span>  <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a42b24b3793c4228871f3d6fe295ff0b5">read_number</a>(<span class="keywordtype">unsigned</span> pos, <span class="keywordtype">unsigned</span> byte_len)<span class="keyword"> const</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordtype">unsigned</span> res = 0;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < byte_len; ++i)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  res <<= 8;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  res |= data[pos + i];</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#af8726f8759de5831fce84c58c5c1ef1f"> 129</a></span>  <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af8726f8759de5831fce84c58c5c1ef1f">read_number</a>(<span class="keywordtype">unsigned</span> section, <span class="keywordtype">unsigned</span> pos, <span class="keywordtype">unsigned</span> byte_len)<span class="keyword"> const</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a42b24b3793c4228871f3d6fe295ff0b5">read_number</a>(sec[section] + pos, byte_len);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f"> 138</a></span>  uint32_t <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">get_bits</a>(<span class="keywordtype">unsigned</span> n)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  uint32_t result = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (s4_cursor == data_len)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="stringliteral">"end of buffer while looking for %d bits of bit-packed data"</span>, n);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// TODO: review and benchmark and possibly simplify</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// (a possible alternative approach is to keep a current bitmask that</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="comment">// starts at 0x80 and is shifted right by 1 at each read until it</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// reaches 0, and get rid of pbyte_len)</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < n; i++)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> (pbyte_len == 0)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  pbyte_len = 8;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  pbyte = data[s4_cursor++];</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  result <<= 1;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">if</span> (pbyte & 0x80)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  result |= 1;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  pbyte <<= 1;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  pbyte_len--;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a519ce02222d8c0b22cb450d8f63a4259">debug_dump_next_bits</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* desc, <span class="keywordtype">int</span> count) <span class="keyword">const</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* fmt, ...) <span class="keyword">const</span> <a class="code" href="error_8h.html#ac90261814c6621766ebec4d00df9f794">WREPORT_THROWF_ATTRS</a>(2, 3);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="keywordtype">unsigned</span> pos, <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt, ...) <span class="keyword">const</span> <a class="code" href="error_8h.html#ac90261814c6621766ebec4d00df9f794">WREPORT_THROWF_ATTRS</a>(3, 4);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="keywordtype">unsigned</span> section, <span class="keywordtype">unsigned</span> pos, <span class="keyword">const</span> <span class="keywordtype">char</span>* fmt, ...) <span class="keyword">const</span> <a class="code" href="error_8h.html#ac90261814c6621766ebec4d00df9f794">WREPORT_THROWF_ATTRS</a>(4, 5);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ac7174e27eaffcb32c5aa87798fc261a6">check_available_data</a>(<span class="keywordtype">unsigned</span> pos, <span class="keywordtype">size_t</span> datalen, <span class="keyword">const</span> <span class="keywordtype">char</span>* expected);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ac7174e27eaffcb32c5aa87798fc261a6">check_available_data</a>(<span class="keywordtype">unsigned</span> section, <span class="keywordtype">unsigned</span> pos, <span class="keywordtype">size_t</span> datalen, <span class="keyword">const</span> <span class="keywordtype">char</span>* expected);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">decode_compressed_number</a>(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest, uint32_t base, <span class="keywordtype">unsigned</span> diffbits);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a13e3a84859ab4d8274a4e322fa61eeb9">decode_number</a>(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordtype">bool</span> decode_compressed_base(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, uint32_t& base, uint32_t& diffbits);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#a7b54bb7ad52c377a3f18b19d31d8aeb9"> 238</a></span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a7b54bb7ad52c377a3f18b19d31d8aeb9">decode_compressed_number</a>(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keywordtype">unsigned</span> subsets, std::function<<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&&)> dest)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Data field base value</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  uint32_t base;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// Number of bits used for each difference value</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  uint32_t diffbits;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">bool</span> missing = decode_compressed_base(info, base, diffbits);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span> (missing)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  {</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < subsets; ++i)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  dest(i, <a class="code" href="classwreport_1_1Var.html">Var</a>(info));</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!diffbits)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classwreport_1_1Var.html">Var</a> var(info, info-><a class="code" href="structwreport_1_1__Varinfo.html#aee0a2ac9dbe48c0aa3e054d8ce5f8956">decode_binary</a>(base));</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < subsets; ++i)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  dest(i, <a class="code" href="classwreport_1_1Var.html">Var</a>(var));</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="classwreport_1_1Var.html">Var</a> var(info);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < subsets; ++i)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">decode_compressed_number</a>(var, base, diffbits);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  dest(i, std::move(var));</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Adder></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordtype">void</span> decode_string(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keywordtype">unsigned</span> subsets, Adder& dest)</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">// Decode the base value</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">char</span> str[info-><a class="code" href="structwreport_1_1__Varinfo.html#a6e59f435570fcd665a4c2f27043d4543">bit_len</a> / 8 + 2];</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordtype">bool</span> missing = !decode_string(info-><a class="code" href="structwreport_1_1__Varinfo.html#a6e59f435570fcd665a4c2f27043d4543">bit_len</a>, str, len);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="comment">// Decode the number of bits (encoded in 6 bits) for each difference</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="comment">// value</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  uint32_t diffbits = <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">get_bits</a>(6);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (missing && diffbits == 0)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  dest.add_missing(info);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (diffbits == 0)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">// Add the same string to all the subsets</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  dest.add_same(<a class="code" href="classwreport_1_1Var.html">Var</a>(info, str));</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">/* For compressed strings, the reference value must be all zeros */</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; ++i)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (str[i] != 0)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="structwreport_1_1error__unimplemented.html#a33dfd9e1d7a575b4acb38b94d5d33230">error_unimplemented::throwf</a>(<span class="stringliteral">"compressed strings with %d bit deltas have non-zero reference value"</span>, diffbits);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">/* Let's also check that the number of</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"> * difference characters is the same length as</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment"> * the reference string */</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (diffbits > len)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="structwreport_1_1error__unimplemented.html#a33dfd9e1d7a575b4acb38b94d5d33230">error_unimplemented::throwf</a>(<span class="stringliteral">"compressed strings with %zd characters have %d bit deltas (deltas should not be longer than field)"</span>, len, diffbits);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < subsets; ++i)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// Set the variable value</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (decode_string(diffbits * 8, str, len))</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">// Compute the value for this subset</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  dest.add_var(i, <a class="code" href="classwreport_1_1Var.html">Var</a>(info, str));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">// Missing value</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  dest.add_var(i, <a class="code" href="classwreport_1_1Var.html">Var</a>(info));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Adder></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">decode_compressed_number</a>(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keywordtype">unsigned</span> subsets, Adder& dest)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// Data field base value</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  uint32_t base;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="comment">// Number of bits used for each difference value</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  uint32_t diffbits;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordtype">bool</span> missing = decode_compressed_base(info, base, diffbits);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (missing)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  dest.add_missing(info);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!diffbits)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  dest.add_same(<a class="code" href="classwreport_1_1Var.html">Var</a>(info, info-><a class="code" href="structwreport_1_1__Varinfo.html#aee0a2ac9dbe48c0aa3e054d8ce5f8956">decode_binary</a>(base)));</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="classwreport_1_1Var.html">Var</a> var(info);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < subsets; ++i)</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">decode_compressed_number</a>(var, base, diffbits);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  dest.add_var(i, std::move(var));</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">decode_compressed_number</a>(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keywordtype">unsigned</span> associated_field_bits, <span class="keywordtype">unsigned</span> subsets, std::function<<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&&, uint32_t)> dest);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#aabc2f5baf89f979d1453367b08cd9fca">decode_compressed_semantic_number</a>(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest, <span class="keywordtype">unsigned</span> subsets);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordtype">bool</span> decode_string(<span class="keywordtype">unsigned</span> bit_len, <span class="keywordtype">char</span>* str, <span class="keywordtype">size_t</span>& len);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordtype">void</span> decode_string(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordtype">void</span> decode_string(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest, <span class="keywordtype">unsigned</span> subsets);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordtype">void</span> decode_string(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keywordtype">unsigned</span> subsets, std::function<<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&&)> dest);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordtype">void</span> <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#afee77cce5e3a3903cae805295e6c79cd">decode_binary</a>(<a class="code" href="classwreport_1_1Var.html">Var</a>& dest);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#ad292e24230a885c3e6108748e9f16b12"> 428</a></span>  std::string <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ad292e24230a885c3e6108748e9f16b12">decode_uncompressed_bitmap</a>(<span class="keywordtype">unsigned</span> size)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  std::string buf;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  buf.resize(size);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < size; ++i)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  uint32_t val = <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">get_bits</a>(1);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  buf[i] = (val == 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html#ad0027970f36dba1b01621ff51f3cf0e5"> 453</a></span>  std::string <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#ad0027970f36dba1b01621ff51f3cf0e5">decode_compressed_bitmap</a>(<span class="keywordtype">unsigned</span> size)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  std::string buf;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  buf.resize(size);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < size; ++i)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  uint32_t val = <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">get_bits</a>(1);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  buf[i] = (val == 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// Decode the number of bits (encoded in 6 bits) of difference</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="comment">// values. It's odd to repeat this for each bit in the bitmap, but</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="comment">// that's how things are transmitted and it's somewhat consistent</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="comment">// with how data compression is specified</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  val = <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">get_bits</a>(6);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// If compressed, ensure that the difference bits are 0 and they are</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// not trying to transmit odd things like delta bitmaps</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">if</span> (val != 0)</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="stringliteral">"bitmap entry %u declares %u difference bits, but we only support 0"</span>, i, val);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> };</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html"> 478</a></span> <span class="keyword">struct </span><a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html">BufrOutput</a></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> {</div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#a2bd782b9fa97acce38d6de3850277a9b"> 481</a></span>  std::string& <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#a2bd782b9fa97acce38d6de3850277a9b">out</a>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#a63a58f0edc58c290d5e97006be04931c"> 484</a></span>  uint8_t <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#a63a58f0edc58c290d5e97006be04931c">pbyte</a>;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#aad186af85106c3cf8e0521d721dacc5c"> 487</a></span>  <span class="keywordtype">int</span> <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#aad186af85106c3cf8e0521d721dacc5c">pbyte_len</a>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html">BufrOutput</a>(std::string& out);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordtype">void</span> add_bits(uint32_t val, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#a5c6ddcf03f761dc00fa11528b55d84d5"> 506</a></span>  <span class="keywordtype">void</span> <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#a5c6ddcf03f761dc00fa11528b55d84d5">raw_append</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keywordtype">int</span> len)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  out.append(str, len);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#ab7ad6ec249897d6e88ec9a5b8955536e"> 512</a></span>  <span class="keywordtype">void</span> <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#ab7ad6ec249897d6e88ec9a5b8955536e">append_short</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> val)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  add_bits(val, 16);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#a887db0d0f90fd9454943bb4bc05fbe7e"> 518</a></span>  <span class="keywordtype">void</span> <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#a887db0d0f90fd9454943bb4bc05fbe7e">append_byte</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> val)</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  add_bits(val, 8);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html#a9d5f6560925673f3bc6960b954452fc7"> 524</a></span>  <span class="keywordtype">void</span> <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html#a9d5f6560925673f3bc6960b954452fc7">append_missing</a>(<span class="keywordtype">unsigned</span> len_bits)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  add_bits(0xffffffff, len_bits);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordtype">void</span> append_string(<span class="keyword">const</span> <a class="code" href="classwreport_1_1Var.html">Var</a>& var, <span class="keywordtype">unsigned</span> len_bits);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordtype">void</span> append_string(<span class="keyword">const</span> <span class="keywordtype">char</span>* val, <span class="keywordtype">unsigned</span> len_bits);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordtype">void</span> append_binary(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* val, <span class="keywordtype">unsigned</span> len_bits);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordtype">void</span> append_var(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, <span class="keyword">const</span> <a class="code" href="classwreport_1_1Var.html">Var</a>& var);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordtype">void</span> append_missing(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordtype">void</span> flush();</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> };</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_aafde03b7e2e3d61d23075a416cd873cf"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#aafde03b7e2e3d61d23075a416cd873cf">wreport::buffers::BufrInput::offset</a></div><div class="ttdeci">unsigned offset() const </div><div class="ttdoc">Return the current decoding byte offset. </div><div class="ttdef"><b>Definition:</b> bufr.h:96</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_af2ae028b4aeb21a4a08ae0ca13a83d95"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">wreport::buffers::BufrInput::parse_error</a></div><div class="ttdeci">void parse_error(const char *fmt,...) const WREPORT_THROWF_ATTRS(2</div><div class="ttdoc">Throw an error_parse at the current decoding location. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a13e3a84859ab4d8274a4e322fa61eeb9"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a13e3a84859ab4d8274a4e322fa61eeb9">wreport::buffers::BufrInput::decode_number</a></div><div class="ttdeci">void decode_number(Var &dest)</div><div class="ttdoc">Decode a number as described by dest.info(), and set it as value for dest. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_aabc2f5baf89f979d1453367b08cd9fca"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#aabc2f5baf89f979d1453367b08cd9fca">wreport::buffers::BufrInput::decode_compressed_semantic_number</a></div><div class="ttdeci">void decode_compressed_semantic_number(Var &dest, unsigned subsets)</div><div class="ttdoc">Decode a number as described by dest.info(), and set it as value for dest. </div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_a887db0d0f90fd9454943bb4bc05fbe7e"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#a887db0d0f90fd9454943bb4bc05fbe7e">wreport::buffers::BufrOutput::append_byte</a></div><div class="ttdeci">void append_byte(unsigned char val)</div><div class="ttdoc">Append an 8 bits integer. </div><div class="ttdef"><b>Definition:</b> bufr.h:518</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_a63a58f0edc58c290d5e97006be04931c"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#a63a58f0edc58c290d5e97006be04931c">wreport::buffers::BufrOutput::pbyte</a></div><div class="ttdeci">uint8_t pbyte</div><div class="ttdoc">Byte to which we are appending bits to encode. </div><div class="ttdef"><b>Definition:</b> bufr.h:484</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a27d03edd90b5ffdc591787c4094a357b"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a27d03edd90b5ffdc591787c4094a357b">wreport::buffers::BufrInput::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdoc">Input buffer. </div><div class="ttdef"><b>Definition:</b> bufr.h:29</div></div>
<div class="ttc" id="structwreport_1_1error__unimplemented_html_a33dfd9e1d7a575b4acb38b94d5d33230"><div class="ttname"><a href="structwreport_1_1error__unimplemented.html#a33dfd9e1d7a575b4acb38b94d5d33230">wreport::error_unimplemented::throwf</a></div><div class="ttdeci">static void throwf(const char *fmt,...) WREPORT_THROWF_ATTRS(1</div><div class="ttdoc">Throw the exception, building the message printf-style. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a689962bd302f91ecd617b492257d340e"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a689962bd302f91ecd617b492257d340e">wreport::buffers::BufrInput::BufrInput</a></div><div class="ttdeci">BufrInput(const std::string &in)</div><div class="ttdoc">Wrap a string iinto a BufrInput. </div></div>
<div class="ttc" id="classwreport_1_1Var_html"><div class="ttname"><a href="classwreport_1_1Var.html">wreport::Var</a></div><div class="ttdoc">A physical variable. </div><div class="ttdef"><b>Definition:</b> var.h:23</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_ad292e24230a885c3e6108748e9f16b12"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#ad292e24230a885c3e6108748e9f16b12">wreport::buffers::BufrInput::decode_uncompressed_bitmap</a></div><div class="ttdeci">std::string decode_uncompressed_bitmap(unsigned size)</div><div class="ttdoc">Decode an uncompressed bitmap of size bits. </div><div class="ttdef"><b>Definition:</b> bufr.h:428</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_ab7ad6ec249897d6e88ec9a5b8955536e"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#ab7ad6ec249897d6e88ec9a5b8955536e">wreport::buffers::BufrOutput::append_short</a></div><div class="ttdeci">void append_short(unsigned short val)</div><div class="ttdoc">Append a 16 bits integer. </div><div class="ttdef"><b>Definition:</b> bufr.h:512</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a34fe1e20e64b0c1ba0ae83c4eccc4402"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a34fe1e20e64b0c1ba0ae83c4eccc4402">wreport::buffers::BufrInput::start_offset</a></div><div class="ttdeci">size_t start_offset</div><div class="ttdoc">File offset of the start of the message. </div><div class="ttdef"><b>Definition:</b> bufr.h:50</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a7832558aa5dfff73bb9b8fe597a9bd4b"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a7832558aa5dfff73bb9b8fe597a9bd4b">wreport::buffers::BufrInput::read_byte</a></div><div class="ttdeci">unsigned read_byte(unsigned section, unsigned pos) const </div><div class="ttdoc">Read a byte value at offset pos inside section section. </div><div class="ttdef"><b>Definition:</b> bufr.h:108</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html">wreport::buffers::BufrOutput</a></div><div class="ttdoc">Binary buffer with bit-level append operations. </div><div class="ttdef"><b>Definition:</b> bufr.h:478</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_afee77cce5e3a3903cae805295e6c79cd"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#afee77cce5e3a3903cae805295e6c79cd">wreport::buffers::BufrInput::decode_binary</a></div><div class="ttdeci">void decode_binary(Var &dest)</div><div class="ttdoc">Decode a generic binary value as-is, as described by dest.info(), ad set it as value for dest...</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a157ae41028b30944b77350577ed1e674"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a157ae41028b30944b77350577ed1e674">wreport::buffers::BufrInput::fname</a></div><div class="ttdeci">const char * fname</div><div class="ttdoc">Input file name (optional). </div><div class="ttdef"><b>Definition:</b> bufr.h:41</div></div>
<div class="ttc" id="error_8h_html"><div class="ttname"><a href="error_8h.html">error.h</a></div><div class="ttdoc">wreport exceptions. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a7b54bb7ad52c377a3f18b19d31d8aeb9"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a7b54bb7ad52c377a3f18b19d31d8aeb9">wreport::buffers::BufrInput::decode_compressed_number</a></div><div class="ttdeci">void decode_compressed_number(Varinfo info, unsigned subsets, std::function< void(unsigned, Var &&)> dest)</div><div class="ttdoc">Decode a number as described by info from a compressed bufr with subsets subsets, and send the result...</div><div class="ttdef"><b>Definition:</b> bufr.h:238</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a3623e40d33a8d008164006bade149e60"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a3623e40d33a8d008164006bade149e60">wreport::buffers::BufrInput::sec</a></div><div class="ttdeci">unsigned sec[6]</div><div class="ttdoc">Offsets of the start of BUFR sections. </div><div class="ttdef"><b>Definition:</b> bufr.h:62</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a6a83b4e0288790827100cb30121f71aa"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a6a83b4e0288790827100cb30121f71aa">wreport::buffers::BufrInput::s4_cursor</a></div><div class="ttdeci">unsigned s4_cursor</div><div class="ttdoc">Offset of the byte we are currently decoding. </div><div class="ttdef"><b>Definition:</b> bufr.h:53</div></div>
<div class="ttc" id="structwreport_1_1__Varinfo_html_aee0a2ac9dbe48c0aa3e054d8ce5f8956"><div class="ttname"><a href="structwreport_1_1__Varinfo.html#aee0a2ac9dbe48c0aa3e054d8ce5f8956">wreport::_Varinfo::decode_binary</a></div><div class="ttdeci">double decode_binary(uint32_t val) const </div><div class="ttdoc">Decode a double value from a decimal integer value using Varinfo binary encoding informations (bit_re...</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_aec3ce8d51ed493dd567ec07190790254"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#aec3ce8d51ed493dd567ec07190790254">wreport::buffers::BufrInput::pbyte</a></div><div class="ttdeci">uint8_t pbyte</div><div class="ttdoc">Byte we are currently decoding. </div><div class="ttdef"><b>Definition:</b> bufr.h:56</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_a9d5f6560925673f3bc6960b954452fc7"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#a9d5f6560925673f3bc6960b954452fc7">wreport::buffers::BufrOutput::append_missing</a></div><div class="ttdeci">void append_missing(unsigned len_bits)</div><div class="ttdoc">Append a missing value len_bits long. </div><div class="ttdef"><b>Definition:</b> bufr.h:524</div></div>
<div class="ttc" id="structwreport_1_1__Varinfo_html"><div class="ttname"><a href="structwreport_1_1__Varinfo.html">wreport::_Varinfo</a></div><div class="ttdoc">Information about a variable. </div><div class="ttdef"><b>Definition:</b> varinfo.h:135</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a91fe25c7719986bc004738b7f82a89ab"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a91fe25c7719986bc004738b7f82a89ab">wreport::buffers::BufrInput::data_len</a></div><div class="ttdeci">size_t data_len</div><div class="ttdoc">Input buffer size. </div><div class="ttdef"><b>Definition:</b> bufr.h:32</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_a5c6ddcf03f761dc00fa11528b55d84d5"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#a5c6ddcf03f761dc00fa11528b55d84d5">wreport::buffers::BufrOutput::raw_append</a></div><div class="ttdeci">void raw_append(const char *str, int len)</div><div class="ttdoc">Append a string len bits long to the output buffer as it is, ignoring partially encoded bits...</div><div class="ttdef"><b>Definition:</b> bufr.h:506</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a665407336a4d5b36851d02e172dfd471"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a665407336a4d5b36851d02e172dfd471">wreport::buffers::BufrInput::read_byte</a></div><div class="ttdeci">unsigned read_byte(unsigned pos) const </div><div class="ttdoc">Read a byte value at offset pos. </div><div class="ttdef"><b>Definition:</b> bufr.h:102</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a41875e7f3f670d44f14a58ff917d219b"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a41875e7f3f670d44f14a58ff917d219b">wreport::buffers::BufrInput::pbyte_len</a></div><div class="ttdeci">int pbyte_len</div><div class="ttdoc">Bits left in pbyte to decode. </div><div class="ttdef"><b>Definition:</b> bufr.h:59</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_ab0ea620a21afd96df1e2297d1ec04d4d"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#ab0ea620a21afd96df1e2297d1ec04d4d">wreport::buffers::BufrInput::scan_lead_sections</a></div><div class="ttdeci">void scan_lead_sections()</div><div class="ttdoc">Scan the message filling in the sec[] array of start offsets of sections 0 and 1. ...</div></div>
<div class="ttc" id="structwreport_1_1__Varinfo_html_a6e59f435570fcd665a4c2f27043d4543"><div class="ttname"><a href="structwreport_1_1__Varinfo.html#a6e59f435570fcd665a4c2f27043d4543">wreport::_Varinfo::bit_len</a></div><div class="ttdeci">unsigned bit_len</div><div class="ttdoc">Length in bits of the variable when encoded as an unsigned binary value. </div><div class="ttdef"><b>Definition:</b> varinfo.h:170</div></div>
<div class="ttc" id="namespacewreport_html"><div class="ttname"><a href="namespacewreport.html">wreport</a></div><div class="ttdoc">String functions. </div><div class="ttdef"><b>Definition:</b> benchmark.h:13</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a519ce02222d8c0b22cb450d8f63a4259"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a519ce02222d8c0b22cb450d8f63a4259">wreport::buffers::BufrInput::debug_dump_next_bits</a></div><div class="ttdeci">void debug_dump_next_bits(const char *desc, int count) const </div><div class="ttdoc">Dump to stderr &#39;count&#39; bits of &#39;buf&#39;, starting at the &#39;ofs-th&#39; bit. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_ad0027970f36dba1b01621ff51f3cf0e5"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#ad0027970f36dba1b01621ff51f3cf0e5">wreport::buffers::BufrInput::decode_compressed_bitmap</a></div><div class="ttdeci">std::string decode_compressed_bitmap(unsigned size)</div><div class="ttdoc">Decode a "compressed" bitmap of size bits. </div><div class="ttdef"><b>Definition:</b> bufr.h:453</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_aad186af85106c3cf8e0521d721dacc5c"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#aad186af85106c3cf8e0521d721dacc5c">wreport::buffers::BufrOutput::pbyte_len</a></div><div class="ttdeci">int pbyte_len</div><div class="ttdoc">Number of bits already encoded in pbyte. </div><div class="ttdef"><b>Definition:</b> bufr.h:487</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_aaec61fc6af1956f898ed013092a19a51"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#aaec61fc6af1956f898ed013092a19a51">wreport::buffers::BufrInput::scan_other_sections</a></div><div class="ttdeci">void scan_other_sections(bool has_optional)</div><div class="ttdoc">Scan the message filling in the sec[] array of section start offsets of all sections from 2 on...</div></div>
<div class="ttc" id="error_8h_html_ac90261814c6621766ebec4d00df9f794"><div class="ttname"><a href="error_8h.html#ac90261814c6621766ebec4d00df9f794">WREPORT_THROWF_ATTRS</a></div><div class="ttdeci">#define WREPORT_THROWF_ATTRS(a, b)</div><div class="ttdoc">Tell the compiler that a function always throws and expects printf-style arguments. </div><div class="ttdef"><b>Definition:</b> error.h:56</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a0e793046cdfae6ffaf976e444ad1bcc8"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a0e793046cdfae6ffaf976e444ad1bcc8">wreport::buffers::BufrInput::scan_section_length</a></div><div class="ttdeci">void scan_section_length(unsigned sec_no)</div><div class="ttdoc">Scan length of section sec_no, filling in the start of the next section in sec[sec_no + 1]...</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a0a8ef1113b059d27d3bc2625dd100150"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a0a8ef1113b059d27d3bc2625dd100150">wreport::buffers::BufrInput::decode_compressed_number</a></div><div class="ttdeci">void decode_compressed_number(Var &dest, uint32_t base, unsigned diffbits)</div><div class="ttdoc">Decode a compressed number as described by dest.info(), ad set it as value for dest. </div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html">wreport::buffers::BufrInput</a></div><div class="ttdoc">Binary buffer with bit-level read operations. </div><div class="ttdef"><b>Definition:</b> bufr.h:18</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a82f9fb083ab4e35ebdb8b25eb514235f"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a82f9fb083ab4e35ebdb8b25eb514235f">wreport::buffers::BufrInput::get_bits</a></div><div class="ttdeci">uint32_t get_bits(unsigned n)</div><div class="ttdoc">Get the integer value of the next &#39;n&#39; bits from the decode input n must be <= 32. ...</div><div class="ttdef"><b>Definition:</b> bufr.h:138</div></div>
<div class="ttc" id="structwreport_1_1buffers_1_1BufrOutput_html_a2bd782b9fa97acce38d6de3850277a9b"><div class="ttname"><a href="structwreport_1_1buffers_1_1BufrOutput.html#a2bd782b9fa97acce38d6de3850277a9b">wreport::buffers::BufrOutput::out</a></div><div class="ttdeci">std::string & out</div><div class="ttdoc">Output buffer to which we append encoded data. </div><div class="ttdef"><b>Definition:</b> bufr.h:481</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_ac7174e27eaffcb32c5aa87798fc261a6"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#ac7174e27eaffcb32c5aa87798fc261a6">wreport::buffers::BufrInput::check_available_data</a></div><div class="ttdeci">void void void void check_available_data(unsigned pos, size_t datalen, const char *expected)</div><div class="ttdoc">Check that the input buffer contains at least datalen characters after offset pos; throw error_parse ...</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_a42b24b3793c4228871f3d6fe295ff0b5"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#a42b24b3793c4228871f3d6fe295ff0b5">wreport::buffers::BufrInput::read_number</a></div><div class="ttdeci">unsigned read_number(unsigned pos, unsigned byte_len) const </div><div class="ttdoc">Read a big endian integer value byte_len bytes long, at offset pos. </div><div class="ttdef"><b>Definition:</b> bufr.h:114</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_ae0471a2e8cd46d104c3230e597d70e26"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#ae0471a2e8cd46d104c3230e597d70e26">wreport::buffers::BufrInput::bits_left</a></div><div class="ttdeci">unsigned bits_left() const </div><div class="ttdoc">Return the number of bits left in the message to be decoded. </div><div class="ttdef"><b>Definition:</b> bufr.h:99</div></div>
<div class="ttc" id="classwreport_1_1buffers_1_1BufrInput_html_af8726f8759de5831fce84c58c5c1ef1f"><div class="ttname"><a href="classwreport_1_1buffers_1_1BufrInput.html#af8726f8759de5831fce84c58c5c1ef1f">wreport::buffers::BufrInput::read_number</a></div><div class="ttdeci">unsigned read_number(unsigned section, unsigned pos, unsigned byte_len) const </div><div class="ttdoc">Read a big endian integer value byte_len bytes long, at offset pos inside section section...</div><div class="ttdef"><b>Definition:</b> bufr.h:129</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Aug 18 2016 13:32:18 for libwreport by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
|