This file is indexed.

/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
   &#160;<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&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;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&#160;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>&#160;<span class="preprocessor">#ifndef WREPORT_BUFFERS_BUFR_H</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define WREPORT_BUFFERS_BUFR_H</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="preprocessor">#include &lt;<a class="code" href="error_8h.html">wreport/error.h</a>&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;wreport/var.h&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<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>&#160;<span class="keyword">struct </span>Var;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="keyword">namespace </span>buffers {</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="classwreport_1_1buffers_1_1BufrInput.html">   18</a></span>&#160;<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>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <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>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#a689962bd302f91ecd617b492257d340e">BufrInput</a>(<span class="keyword">const</span> std::string&amp; in);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <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>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;</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>&#160;    <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>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <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>&#160;    }</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</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>&#160;    <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>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <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>&#160;    }</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</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>&#160;    <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>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        <span class="keywordtype">unsigned</span> res = 0;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; byte_len; ++i)</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;            res &lt;&lt;= 8;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;            res |= data[pos + i];</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="keywordflow">return</span> res;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</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>&#160;    <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>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <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>&#160;    }</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</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>&#160;    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>&#160;    {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        uint32_t result = 0;</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;        <span class="keywordflow">if</span> (s4_cursor == data_len)</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;            <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="stringliteral">&quot;end of buffer while looking for %d bits of bit-packed data&quot;</span>, n);</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;        <span class="comment">// TODO: review and benchmark and possibly simplify</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <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>&#160;        <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>&#160;        <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>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; n; i++)</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;            <span class="keywordflow">if</span> (pbyte_len == 0)</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            {</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                pbyte_len = 8;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                pbyte = data[s4_cursor++];</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            }</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;            result &lt;&lt;= 1;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;            <span class="keywordflow">if</span> (pbyte &amp; 0x80)</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                result |= 1;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;            pbyte &lt;&lt;= 1;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;            pbyte_len--;</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;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="keywordflow">return</span> result;</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;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <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>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <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>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <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>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <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>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <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>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <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>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <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>&amp; dest, uint32_t base, <span class="keywordtype">unsigned</span> diffbits);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <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>&amp; dest);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordtype">bool</span> decode_compressed_base(<a class="code" href="structwreport_1_1__Varinfo.html">Varinfo</a> info, uint32_t&amp; base, uint32_t&amp; diffbits);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</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>&#160;    <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&lt;<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&amp;&amp;)&gt; dest)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    {</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        <span class="comment">// Data field base value</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        uint32_t base;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        <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>&#160;        uint32_t diffbits;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <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>&#160;        <span class="keywordflow">if</span> (missing)</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        {</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; subsets; ++i)</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;                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>&#160;        }</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!diffbits)</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            <a class="code" href="classwreport_1_1Var.html">Var</a> var(info, info-&gt;<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>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; subsets; ++i)</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;                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>&#160;        }</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        {</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;            <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>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; subsets; ++i)</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            {</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;                <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>&#160;                dest(i, std::move(var));</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            }</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    }</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Adder&gt;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <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&amp; dest)</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    {</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="comment">// Decode the base value</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <span class="keywordtype">char</span> str[info-&gt;<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>&#160;        <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="keywordtype">bool</span> missing = !decode_string(info-&gt;<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>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <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>&#160;        <span class="comment">// value</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        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>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        <span class="keywordflow">if</span> (missing &amp;&amp; diffbits == 0)</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;            dest.add_missing(info);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        <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>&#160;        {</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;            <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>&#160;            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>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            <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>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; ++i)</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                <span class="keywordflow">if</span> (str[i] != 0)</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                    <a class="code" href="structwreport_1_1error__unimplemented.html#a33dfd9e1d7a575b4acb38b94d5d33230">error_unimplemented::throwf</a>(<span class="stringliteral">&quot;compressed strings with %d bit deltas have non-zero reference value&quot;</span>, diffbits);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;            <span class="comment">/* Let&#39;s also check that the number of</span></div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="comment">             * difference characters is the same length as</span></div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="comment">             * the reference string */</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;            <span class="keywordflow">if</span> (diffbits &gt; len)</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;                <a class="code" href="structwreport_1_1error__unimplemented.html#a33dfd9e1d7a575b4acb38b94d5d33230">error_unimplemented::throwf</a>(<span class="stringliteral">&quot;compressed strings with %zd characters have %d bit deltas (deltas should not be longer than field)&quot;</span>, len, diffbits);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; subsets; ++i)</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;            {</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;                <span class="comment">// Set the variable value</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;                <span class="keywordflow">if</span> (decode_string(diffbits * 8, str, len))</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;                {</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;                    <span class="comment">// Compute the value for this subset</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;                    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>&#160;                } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;                    <span class="comment">// Missing value</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;                    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>&#160;                }</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;            }</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        }</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    }</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Adder&gt;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <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&amp; dest)</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    {</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        <span class="comment">// Data field base value</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        uint32_t base;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <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>&#160;        uint32_t diffbits;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <span class="keywordtype">bool</span> missing = decode_compressed_base(info, base, diffbits);</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">if</span> (missing)</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;            dest.add_missing(info);</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!diffbits)</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;            dest.add_same(<a class="code" href="classwreport_1_1Var.html">Var</a>(info, info-&gt;<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>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        {</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;            <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>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; subsets; ++i)</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            {</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;                <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>&#160;                dest.add_var(i, std::move(var));</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;            }</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        }</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    }</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <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&lt;<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&amp;&amp;, uint32_t)&gt; dest);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <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>&amp; dest, <span class="keywordtype">unsigned</span> subsets);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <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>&amp; len);</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="keywordtype">void</span> decode_string(<a class="code" href="classwreport_1_1Var.html">Var</a>&amp; dest);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="keywordtype">void</span> decode_string(<a class="code" href="classwreport_1_1Var.html">Var</a>&amp; dest, <span class="keywordtype">unsigned</span> subsets);</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    <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&lt;<span class="keywordtype">void</span>(<span class="keywordtype">unsigned</span>, <a class="code" href="classwreport_1_1Var.html">Var</a>&amp;&amp;)&gt; dest);</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <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>&amp; dest);</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;</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>&#160;    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>&#160;    {</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        std::string buf;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        buf.resize(size);</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; size; ++i)</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        {</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;            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>&#160;            buf[i] = (val == 0) ? <span class="charliteral">&#39;+&#39;</span> : <span class="charliteral">&#39;-&#39;</span>;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        }</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    }</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</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>&#160;    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>&#160;    {</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;        std::string buf;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        buf.resize(size);</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; size; ++i)</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        {</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;            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>&#160;            buf[i] = (val == 0) ? <span class="charliteral">&#39;+&#39;</span> : <span class="charliteral">&#39;-&#39;</span>;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;            <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>&#160;            <span class="comment">// values. It&#39;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>&#160;            <span class="comment">// that&#39;s how things are transmitted and it&#39;s somewhat consistent</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;            <span class="comment">// with how data compression is specified</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            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>&#160;            <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>&#160;            <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>&#160;            <span class="keywordflow">if</span> (val != 0)</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;                <a class="code" href="classwreport_1_1buffers_1_1BufrInput.html#af2ae028b4aeb21a4a08ae0ca13a83d95">parse_error</a>(<span class="stringliteral">&quot;bitmap entry %u declares %u difference bits, but we only support 0&quot;</span>, i, val);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        }</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    }</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;};</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="structwreport_1_1buffers_1_1BufrOutput.html">  478</a></span>&#160;<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>&#160;{</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>&#160;    std::string&amp; <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>&#160;</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>&#160;    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>&#160;</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>&#160;    <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>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <a class="code" href="structwreport_1_1buffers_1_1BufrOutput.html">BufrOutput</a>(std::string&amp; out);</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <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>&#160;</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>&#160;    <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>&#160;    {</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;        out.append(str, len);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    }</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</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>&#160;    <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>&#160;    {</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        add_bits(val, 16);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    }</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;</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>&#160;    <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>&#160;    {</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        add_bits(val, 8);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    }</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</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>&#160;    <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>&#160;    {</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        add_bits(0xffffffff, len_bits);</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    }</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="keywordtype">void</span> append_string(<span class="keyword">const</span> <a class="code" href="classwreport_1_1Var.html">Var</a>&amp; var, <span class="keywordtype">unsigned</span> len_bits);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <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>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <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>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <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>&amp; var);</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    <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>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    <span class="keywordtype">void</span> flush();</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;};</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;}</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;}</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<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 &amp;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 &amp;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 &amp;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 &amp;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&lt; void(unsigned, Var &amp;&amp;)&gt; 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 &amp;#39;count&amp;#39; bits of &amp;#39;buf&amp;#39;, starting at the &amp;#39;ofs-th&amp;#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 &quot;compressed&quot; 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 &amp;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 &amp;#39;n&amp;#39; bits from the decode input n must be &lt;= 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 &amp; 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 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>