~ubuntu-branches/ubuntu/quantal/ceph/quantal

« back to all changes in this revision

Viewing changes to src/leveldb/util/crc32c.cc

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-07-16 09:56:24 UTC
  • mfrom: (0.3.11)
  • mto: This revision was merged to the branch mainline in revision 17.
  • Revision ID: package-import@ubuntu.com-20120716095624-azr2w4hbhei1rxmx
Tags: upstream-0.48
ImportĀ upstreamĀ versionĀ 0.48

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
 
// Use of this source code is governed by a BSD-style license that can be
3
 
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4
 
//
5
 
// A portable implementation of crc32c, optimized to handle
6
 
// four bytes at a time.
7
 
 
8
 
#include "util/crc32c.h"
9
 
 
10
 
#include <stdint.h>
11
 
#include "util/coding.h"
12
 
 
13
 
namespace leveldb {
14
 
namespace crc32c {
15
 
 
16
 
static const uint32_t table0_[256] = {
17
 
  0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4,
18
 
  0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
19
 
  0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
20
 
  0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
21
 
  0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b,
22
 
  0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
23
 
  0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
24
 
  0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
25
 
  0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
26
 
  0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
27
 
  0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5,
28
 
  0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
29
 
  0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45,
30
 
  0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
31
 
  0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
32
 
  0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
33
 
  0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48,
34
 
  0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
35
 
  0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687,
36
 
  0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
37
 
  0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
38
 
  0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
39
 
  0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8,
40
 
  0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
41
 
  0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096,
42
 
  0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
43
 
  0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
44
 
  0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
45
 
  0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9,
46
 
  0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
47
 
  0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36,
48
 
  0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
49
 
  0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
50
 
  0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
51
 
  0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
52
 
  0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
53
 
  0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3,
54
 
  0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
55
 
  0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
56
 
  0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
57
 
  0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652,
58
 
  0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
59
 
  0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d,
60
 
  0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
61
 
  0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
62
 
  0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
63
 
  0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2,
64
 
  0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
65
 
  0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
66
 
  0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
67
 
  0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
68
 
  0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
69
 
  0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f,
70
 
  0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
71
 
  0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90,
72
 
  0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
73
 
  0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
74
 
  0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
75
 
  0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321,
76
 
  0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
77
 
  0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81,
78
 
  0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
79
 
  0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
80
 
  0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351
81
 
};
82
 
static const uint32_t table1_[256] = {
83
 
  0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899,
84
 
  0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945,
85
 
  0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21,
86
 
  0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd,
87
 
  0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918,
88
 
  0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4,
89
 
  0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0,
90
 
  0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c,
91
 
  0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b,
92
 
  0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47,
93
 
  0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823,
94
 
  0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff,
95
 
  0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a,
96
 
  0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6,
97
 
  0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2,
98
 
  0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e,
99
 
  0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d,
100
 
  0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41,
101
 
  0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25,
102
 
  0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9,
103
 
  0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c,
104
 
  0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0,
105
 
  0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4,
106
 
  0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78,
107
 
  0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f,
108
 
  0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43,
109
 
  0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27,
110
 
  0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb,
111
 
  0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e,
112
 
  0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2,
113
 
  0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6,
114
 
  0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a,
115
 
  0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260,
116
 
  0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc,
117
 
  0x66d73941, 0x7575a136, 0x419209af, 0x523091d8,
118
 
  0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004,
119
 
  0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1,
120
 
  0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d,
121
 
  0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059,
122
 
  0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185,
123
 
  0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162,
124
 
  0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be,
125
 
  0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da,
126
 
  0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306,
127
 
  0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3,
128
 
  0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f,
129
 
  0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b,
130
 
  0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287,
131
 
  0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464,
132
 
  0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8,
133
 
  0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc,
134
 
  0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600,
135
 
  0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5,
136
 
  0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439,
137
 
  0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d,
138
 
  0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781,
139
 
  0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766,
140
 
  0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba,
141
 
  0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de,
142
 
  0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502,
143
 
  0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7,
144
 
  0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b,
145
 
  0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f,
146
 
  0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483
147
 
};
148
 
static const uint32_t table2_[256] = {
149
 
  0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073,
150
 
  0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469,
151
 
  0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6,
152
 
  0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac,
153
 
  0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9,
154
 
  0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3,
155
 
  0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c,
156
 
  0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726,
157
 
  0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67,
158
 
  0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d,
159
 
  0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2,
160
 
  0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8,
161
 
  0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed,
162
 
  0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7,
163
 
  0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828,
164
 
  0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32,
165
 
  0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa,
166
 
  0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0,
167
 
  0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f,
168
 
  0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75,
169
 
  0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20,
170
 
  0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a,
171
 
  0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5,
172
 
  0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff,
173
 
  0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe,
174
 
  0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4,
175
 
  0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b,
176
 
  0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161,
177
 
  0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634,
178
 
  0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e,
179
 
  0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1,
180
 
  0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb,
181
 
  0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730,
182
 
  0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a,
183
 
  0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5,
184
 
  0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def,
185
 
  0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba,
186
 
  0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0,
187
 
  0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f,
188
 
  0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065,
189
 
  0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24,
190
 
  0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e,
191
 
  0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1,
192
 
  0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb,
193
 
  0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae,
194
 
  0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4,
195
 
  0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b,
196
 
  0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71,
197
 
  0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9,
198
 
  0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3,
199
 
  0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c,
200
 
  0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36,
201
 
  0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63,
202
 
  0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79,
203
 
  0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6,
204
 
  0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc,
205
 
  0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd,
206
 
  0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7,
207
 
  0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238,
208
 
  0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622,
209
 
  0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177,
210
 
  0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d,
211
 
  0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2,
212
 
  0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8
213
 
};
214
 
static const uint32_t table3_[256] = {
215
 
  0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939,
216
 
  0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca,
217
 
  0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf,
218
 
  0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c,
219
 
  0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804,
220
 
  0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7,
221
 
  0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2,
222
 
  0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11,
223
 
  0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2,
224
 
  0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41,
225
 
  0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54,
226
 
  0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7,
227
 
  0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f,
228
 
  0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c,
229
 
  0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69,
230
 
  0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a,
231
 
  0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de,
232
 
  0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d,
233
 
  0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538,
234
 
  0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb,
235
 
  0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3,
236
 
  0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610,
237
 
  0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405,
238
 
  0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6,
239
 
  0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255,
240
 
  0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6,
241
 
  0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3,
242
 
  0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040,
243
 
  0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368,
244
 
  0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b,
245
 
  0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e,
246
 
  0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d,
247
 
  0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006,
248
 
  0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5,
249
 
  0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0,
250
 
  0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213,
251
 
  0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b,
252
 
  0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8,
253
 
  0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd,
254
 
  0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e,
255
 
  0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d,
256
 
  0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e,
257
 
  0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b,
258
 
  0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698,
259
 
  0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0,
260
 
  0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443,
261
 
  0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656,
262
 
  0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5,
263
 
  0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1,
264
 
  0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12,
265
 
  0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07,
266
 
  0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4,
267
 
  0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc,
268
 
  0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f,
269
 
  0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a,
270
 
  0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9,
271
 
  0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a,
272
 
  0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99,
273
 
  0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c,
274
 
  0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f,
275
 
  0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57,
276
 
  0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4,
277
 
  0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1,
278
 
  0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842
279
 
};
280
 
 
281
 
// Used to fetch a naturally-aligned 32-bit word in little endian byte-order
282
 
static inline uint32_t LE_LOAD32(const uint8_t *p) {
283
 
  return DecodeFixed32(reinterpret_cast<const char*>(p));
284
 
}
285
 
 
286
 
uint32_t Extend(uint32_t crc, const char* buf, size_t size) {
287
 
  const uint8_t *p = reinterpret_cast<const uint8_t *>(buf);
288
 
  const uint8_t *e = p + size;
289
 
  uint32_t l = crc ^ 0xffffffffu;
290
 
 
291
 
#define STEP1 do {                              \
292
 
    int c = (l & 0xff) ^ *p++;                  \
293
 
    l = table0_[c] ^ (l >> 8);                  \
294
 
} while (0)
295
 
#define STEP4 do {                              \
296
 
    uint32_t c = l ^ LE_LOAD32(p);              \
297
 
    p += 4;                                     \
298
 
    l = table3_[c & 0xff] ^                     \
299
 
        table2_[(c >> 8) & 0xff] ^              \
300
 
        table1_[(c >> 16) & 0xff] ^             \
301
 
        table0_[c >> 24];                       \
302
 
} while (0)
303
 
 
304
 
  // Point x at first 4-byte aligned byte in string.  This might be
305
 
  // just past the end of the string.
306
 
  const uintptr_t pval = reinterpret_cast<uintptr_t>(p);
307
 
  const uint8_t* x = reinterpret_cast<const uint8_t*>(((pval + 3) >> 2) << 2);
308
 
  if (x <= e) {
309
 
    // Process bytes until finished or p is 4-byte aligned
310
 
    while (p != x) {
311
 
      STEP1;
312
 
    }
313
 
  }
314
 
  // Process bytes 16 at a time
315
 
  while ((e-p) >= 16) {
316
 
    STEP4; STEP4; STEP4; STEP4;
317
 
  }
318
 
  // Process bytes 4 at a time
319
 
  while ((e-p) >= 4) {
320
 
    STEP4;
321
 
  }
322
 
  // Process the last few bytes
323
 
  while (p != e) {
324
 
    STEP1;
325
 
  }
326
 
#undef STEP4
327
 
#undef STEP1
328
 
  return l ^ 0xffffffffu;
329
 
}
330
 
 
331
 
}  // namespace crc32c
332
 
}  // namespace leveldb