forked from lix-project/lix
Simplify printHash32
This commit is contained in:
parent
3688db3d43
commit
db2ec59903
|
@ -103,24 +103,6 @@ Hash parseHash(HashType ht, const string & s)
|
|||
}
|
||||
|
||||
|
||||
static unsigned char divMod(unsigned char * bytes, unsigned char y)
|
||||
{
|
||||
unsigned int borrow = 0;
|
||||
|
||||
int pos = Hash::maxHashSize - 1;
|
||||
while (pos >= 0 && !bytes[pos]) --pos;
|
||||
|
||||
for ( ; pos >= 0; --pos) {
|
||||
unsigned int s = bytes[pos] + (borrow << 8);
|
||||
unsigned int d = s / y;
|
||||
borrow = s % y;
|
||||
bytes[pos] = d;
|
||||
}
|
||||
|
||||
return borrow;
|
||||
}
|
||||
|
||||
|
||||
unsigned int hashLength32(const Hash & hash)
|
||||
{
|
||||
return (hash.hashSize * 8 - 1) / 5 + 1;
|
||||
|
@ -136,19 +118,19 @@ string printHash32(const Hash & hash)
|
|||
Hash hash2(hash);
|
||||
unsigned int len = hashLength32(hash);
|
||||
|
||||
const char * chars = base32Chars.data();
|
||||
string s;
|
||||
s.reserve(len);
|
||||
|
||||
string s(len, '0');
|
||||
|
||||
int pos = len - 1;
|
||||
while (pos >= 0) {
|
||||
unsigned char digit = divMod(hash2.hash, 32);
|
||||
s[pos--] = chars[digit];
|
||||
for (int n = len - 1; n >= 0; n--) {
|
||||
unsigned int b = n * 5;
|
||||
unsigned int i = b / 8;
|
||||
unsigned int j = b % 8;
|
||||
unsigned char c =
|
||||
(hash.hash[i] >> j)
|
||||
| (i >= hash.hashSize - 1 ? 0 : hash.hash[i + 1] << (8 - j));
|
||||
s.push_back(base32Chars[c & 0x1f]);
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < hash2.maxHashSize; ++i)
|
||||
assert(hash2.hash[i] == 0);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue