blob: 2d9848f3cdf1ac8e40a239544c9d300065f814b0 (
plain) (
blame)
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
|
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/util/bits.h>
namespace vespalib {
uint8_t Bits::_reverse[256];
Bits::ReverseTableInit Bits::_reverseTableInit;
void * Bits::reverse(void * srcDst, size_t sz)
{
uint8_t *v(static_cast<uint8_t *>(srcDst));
size_t i(0);
for(; i < sz/2; i++) {
v[i] = reverse(v[sz-1-i]);
}
return v;
}
void Bits::forceInitNow()
{
ReverseTableInit now;
}
Bits::ReverseTableInit::ReverseTableInit()
{
if (_reverse[128] == 0) {
for (size_t i(0); i < 256; i++) {
_reverse[i] = reverse(i);
}
}
}
uint8_t Bits::ReverseTableInit::reverse(uint8_t v)
{
return ((v >> 7) & 0x01) |
((v >> 5) & 0x02) |
((v >> 3) & 0x04) |
((v >> 1) & 0x08) |
((v << 1) & 0x10) |
((v << 3) & 0x20) |
((v << 5) & 0x40) |
((v << 7) & 0x80);
}
}
|