16 int nSize = nCompact >> 24;
17 uint32_t nWord = nCompact & 0x007fffff;
19 nWord >>= 8 * (3 - nSize);
23 *
this <<= 8 * (nSize - 3);
26 *pfNegative = nWord != 0 && (nCompact & 0x00800000) != 0;
28 *pfOverflow = nWord != 0 && ((nSize > 34) ||
29 (nWord > 0xff && nSize > 33) ||
30 (nWord > 0xffff && nSize > 32));
36 int nSize = (
bits() + 7) / 8;
37 uint32_t nCompact = 0;
39 nCompact =
GetLow64() << 8 * (3 - nSize);
41 uint256 bn = *
this >> 8 * (nSize - 3);
46 if (nCompact & 0x00800000) {
50 assert((nCompact & ~0x007fffff) == 0);
52 nCompact |= nSize << 24;
53 nCompact |= (fNegative && (nCompact & 0x007fffff) ? 0x00800000 : 0);
57 static void inline HashMix(uint32_t& a, uint32_t&
b, uint32_t& c)
61 a ^= ((c << 4) | (c >> 28));
64 b ^= ((a << 6) | (a >> 26));
67 c ^= ((
b << 8) | (
b >> 24));
70 a ^= ((c << 16) | (c >> 16));
73 b ^= ((a << 19) | (a >> 13));
76 c ^= ((
b << 4) | (
b >> 28));
80 static void inline HashFinal(uint32_t& a, uint32_t&
b, uint32_t& c)
84 c -= ((
b << 14) | (
b >> 18));
86 a -= ((c << 11) | (c >> 21));
88 b -= ((a << 25) | (a >> 7));
90 c -= ((
b << 16) | (
b >> 16));
92 a -= ((c << 4) | (c >> 28));
94 b -= ((a << 14) | (a >> 18));
96 c -= ((
b << 24) | (
b >> 8));
102 a =
b = c = 0xdeadbeef + (
WIDTH << 2);
104 a +=
pn[0] ^ salt.
pn[0];
105 b +=
pn[1] ^ salt.
pn[1];
106 c +=
pn[2] ^ salt.
pn[2];
108 a +=
pn[3] ^ salt.
pn[3];
109 b +=
pn[4] ^ salt.
pn[4];
110 c +=
pn[5] ^ salt.
pn[5];
112 a +=
pn[6] ^ salt.
pn[6];
113 b +=
pn[7] ^ salt.
pn[7];
116 return ((((uint64_t)
b) << 32) | c);
122 for(
int x=0; x<a.
WIDTH; ++x)
123 WriteLE32(
b.begin() + x*4, a.
pn[x]);
129 for(
int x=0; x<
b.WIDTH; ++x)
130 b.pn[x] = ReadLE32(a.
begin() + x*4);
137 for(
int x=0; x<a.
WIDTH; ++x)
138 WriteLE32(
b.begin() + x*4, a.
pn[x]);
145 for(
int x=0; x<
b.WIDTH; ++x)
146 b.pn[x] = ReadLE32(a.
begin() + x*4);