diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2012-10-26 22:53:50 +0700 |
---|---|---|
committer | Jeff King <peff@peff.net> | 2012-10-29 03:08:30 -0400 |
commit | c43cb38612192fa45bf7ed981a98bc4ddb86ce75 (patch) | |
tree | 14cbc3466675241765085081a5370b56e8ec9ca0 /bisect.c | |
parent | db699a8a1f2c8063620efae41e66786c11a31d8f (diff) | |
download | git-c43cb38612192fa45bf7ed981a98bc4ddb86ce75.tar.gz |
Move estimate_bisect_steps to libgit.a
This function is used by bisect.c, part of libgit.a while
estimate_bisect_steps stays in builtin/rev-list.c. Move it to bisect.a
so we won't have undefine reference if a standalone program that uses
libgit.a happens to pull it in.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Diffstat (limited to 'bisect.c')
-rw-r--r-- | bisect.c | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -956,3 +956,41 @@ int bisect_next_all(const char *prefix, int no_checkout) return bisect_checkout(bisect_rev_hex, no_checkout); } +static inline int log2i(int n) +{ + int log2 = 0; + + for (; n > 1; n >>= 1) + log2++; + + return log2; +} + +static inline int exp2i(int n) +{ + return 1 << n; +} + +/* + * Estimate the number of bisect steps left (after the current step) + * + * For any x between 0 included and 2^n excluded, the probability for + * n - 1 steps left looks like: + * + * P(2^n + x) == (2^n - x) / (2^n + x) + * + * and P(2^n + x) < 0.5 means 2^n < 3x + */ +int estimate_bisect_steps(int all) +{ + int n, x, e; + + if (all < 3) + return 0; + + n = log2i(all); + e = exp2i(n); + x = all - e; + + return (e < 3 * x) ? n : n - 1; +} |