From 0ae11c74bab65477ebb9bd59da3fe48575a407d7 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 9 Jul 2016 11:57:50 +0900 Subject: [PATCH] src: Avoid n, p calculation if possible --- src/cache_digest.cc | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/cache_digest.cc b/src/cache_digest.cc index f5be2bdf..750d17eb 100644 --- a/src/cache_digest.cc +++ b/src/cache_digest.cc @@ -162,15 +162,10 @@ ssize_t cache_digest_encode(uint8_t *data, size_t datalen, return -1; } - uint32_t p = 1; - for (uint32_t i = 0; i < logp; ++i, p *= 2) - ; - for (; n < uris.size(); n *= 2, ++logn) ; if (n - uris.size() > uris.size() - n / 2) { - n /= 2; --logn; } @@ -203,8 +198,8 @@ ssize_t cache_digest_encode(uint8_t *data, size_t datalen, continue; } auto d = v - c - 1; - auto q = d / p; - auto r = d % p; + auto q = d >> logp; + auto r = d & ((1u << logp) - 1); std::tie(last, b) = append_0bit(last, b, q); std::tie(last, b) = append_single_1bit(last, b); @@ -363,14 +358,6 @@ int cache_digest_decode(std::vector &keys, uint32_t &logn, std::tie(last, b) = read_uint32(logn, 5, last, b); std::tie(last, b) = read_uint32(logp, 5, last, b); - uint32_t n = 1, p = 1; - - for (uint32_t i = 0; i < logn; n *= 2, ++i) - ; - - for (uint32_t i = 0; i < logp; p *= 2, ++i) - ; - uint64_t c = std::numeric_limits::max(); for (;;) { @@ -393,7 +380,7 @@ int cache_digest_decode(std::vector &keys, uint32_t &logn, std::tie(last, b) = read_uint32(r, logp, last, b); - auto d = static_cast(q) * p + r; + auto d = (static_cast(q) << logp) + r; c += d + 1;