summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2012-04-23 09:21:15 -0700
committerRussell Belfer <rb@github.com>2012-04-25 11:14:34 -0700
commit25f258e735f707075dc1b5cdd804540fe1e43f37 (patch)
tree7c319941fb202ee1fba63c781193300e514febb7
parentda3b391c32b973d5c073951b6848eedd40434e5e (diff)
downloadlibgit2-25f258e735f707075dc1b5cdd804540fe1e43f37.tar.gz
Moving power-of-two bit utilities into util.h
-rw-r--r--src/cache.c11
-rw-r--r--src/util.h17
2 files changed, 19 insertions, 9 deletions
diff --git a/src/cache.c b/src/cache.c
index f445e906d..31da3c36e 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -9,21 +9,14 @@
#include "repository.h"
#include "commit.h"
#include "thread-utils.h"
+#include "util.h"
#include "cache.h"
int git_cache_init(git_cache *cache, size_t size, git_cached_obj_freeptr free_ptr)
{
if (size < 8)
size = 8;
-
- /* round up size to closest power of 2 */
- size--;
- size |= size >> 1;
- size |= size >> 2;
- size |= size >> 4;
- size |= size >> 8;
- size |= size >> 16;
- size++;
+ size = git__size_t_powerof2(size);
cache->size_mask = size - 1;
cache->lru_count = 0;
diff --git a/src/util.h b/src/util.h
index afa3f7205..1fee9a70c 100644
--- a/src/util.h
+++ b/src/util.h
@@ -179,4 +179,21 @@ GIT_INLINE(int) git__ishex(const char *str)
return 1;
}
+GIT_INLINE(size_t) git__size_t_bitmask(size_t v)
+{
+ v--;
+ v |= v >> 1;
+ v |= v >> 2;
+ v |= v >> 4;
+ v |= v >> 8;
+ v |= v >> 16;
+
+ return v;
+}
+
+GIT_INLINE(size_t) git__size_t_powerof2(size_t v)
+{
+ return git__size_t_bitmask(v) + 1;
+}
+
#endif /* INCLUDE_util_h__ */