crc.html
9.67 KB
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Function template crc</title>
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../crc/reference.html#header.boost.crc_hpp" title="Header <boost/crc.hpp>">
<link rel="prev" href="crc_xmodem_type.html" title="Type definition crc_xmodem_type">
<link rel="next" href="augmented_crc.html" title="Function template augmented_crc">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
<td align="center"><a href="../../../index.html">Home</a></td>
<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="crc_xmodem_type.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../crc/reference.html#header.boost.crc_hpp"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="augmented_crc.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="refentry">
<a name="boost.crc"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2><span class="refentrytitle">Function template crc</span></h2>
<p>boost::crc — Compute the (unaugmented) CRC of a memory block. </p>
</div>
<h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2>
<div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: <<a class="link" href="../crc/reference.html#header.boost.crc_hpp" title="Header <boost/crc.hpp>">boost/crc.hpp</a>>
</span>
<span class="keyword">template</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> Bits<span class="special">,</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_t</span><span class="special"><</span> <span class="identifier">Bits</span> <span class="special">></span><span class="special">::</span><span class="identifier">fast</span> TruncPoly<span class="special">,</span>
<span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_t</span><span class="special"><</span> <span class="identifier">Bits</span> <span class="special">></span><span class="special">::</span><span class="identifier">fast</span> InitRem<span class="special">,</span>
<span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_t</span><span class="special"><</span> <span class="identifier">Bits</span> <span class="special">></span><span class="special">::</span><span class="identifier">fast</span> FinalXor<span class="special">,</span> <span class="keyword">bool</span> ReflectIn<span class="special">,</span>
<span class="keyword">bool</span> ReflectRem<span class="special">></span>
<span class="identifier">uint_t</span><span class="special"><</span> <span class="identifier">Bits</span> <span class="special">></span><span class="special">::</span><span class="identifier">fast</span> <span class="identifier">crc</span><span class="special">(</span><span class="keyword">void</span> <span class="keyword">const</span> <span class="special">*</span> buffer<span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> byte_count<span class="special">)</span><span class="special">;</span></pre></div>
<div class="refsect1">
<a name="id-1.3.11.11.2.11.4"></a><h2>Description</h2>
<p>Computes the polynomial remainder of a CRC run, assuming that <span class="emphasis"><em>buffer</em></span> and <span class="emphasis"><em>byte_count</em></span> describe a memory block representing the polynomial dividend. The division steps are altered so the result directly gives a checksum, without need to augment the memory block with scratch-space bytes. The first byte is considered the highest order, going down for subsequent bytes.</p>
<p>
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>Unaugmented-style CRC runs perform modulo-2 polynomial division in an altered order. The trailing <span class="emphasis"><em>Bits</em></span> number of zero-valued bits needed to extracted an (unprocessed) checksum is virtually moved to near the beginning of the message. This is OK since the XOR operation is commutative and associative. It also means that you can get a checksum anytime. Since data is being read byte-wise, a table of pre-computed remainder changes (as XOR masks) can be used to speed computation. </p></td></tr>
</table></div>
<p>
</p>
<div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">Parameters:</span></p></td>
<td><div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term"><code class="computeroutput">buffer</code></span></p></td>
<td><p>The address where the memory block begins. </p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">byte_count</code></span></p></td>
<td><p>The number of bytes in the memory block.</p></td>
</tr>
</tbody>
</table></div></td>
</tr>
<tr>
<td><p><span class="term">Template Parameters:</span></p></td>
<td><div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term"><code class="computeroutput">Bits</code></span></p></td>
<td><p>The order of the modulo-2 polynomial divisor. (<span class="emphasis"><em>Width</em></span> from the RMCA) </p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">FinalXor</code></span></p></td>
<td><p>The (XOR) bit-mask to be applied to the output remainder, after possible reflection but before returning. (<span class="emphasis"><em>XorOut</em></span> from the RMCA) </p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">InitRem</code></span></p></td>
<td><p>The (unaugmented) initial state of the polynomial remainder. (<span class="emphasis"><em>Init</em></span> from the RMCA) </p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">ReflectIn</code></span></p></td>
<td><p>If <code class="computeroutput">True</code>, input bytes are read lowest-order bit first, otherwise highest-order bit first. (<span class="emphasis"><em>RefIn</em></span> from the RMCA) </p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">ReflectRem</code></span></p></td>
<td><p>If <code class="computeroutput">True</code>, the output remainder is reflected before the XOR-mask. (<span class="emphasis"><em>RefOut</em></span> from the RMCA)</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="computeroutput">TruncPoly</code></span></p></td>
<td><p>The lowest coefficients of the divisor polynomial. The highest-order coefficient is omitted and always assumed to be 1. (<span class="emphasis"><em>Poly</em></span> from the RMCA) </p></td>
</tr>
</tbody>
</table></div></td>
</tr>
<tr>
<td><p><span class="term">Requires:</span></p></td>
<td><p>0 < <span class="emphasis"><em>Bits</em></span> <= <code class="computeroutput">std::numeric_limits<uintmax_t>::digits</code> </p></td>
</tr>
<tr>
<td><p><span class="term">Returns:</span></p></td>
<td><p>The checksum, which is the last (interim) remainder plus any output processing.</p></td>
</tr>
</tbody>
</table></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2001, 2003, 2012 Daryle Walker<p>
Distributed under the Boost Software License, Version 1.0. (See the accompanying
file LICENSE_1_0.txt or a copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="crc_xmodem_type.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../crc/reference.html#header.boost.crc_hpp"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="augmented_crc.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>