Commit 25f258e7 by Russell Belfer

Moving power-of-two bit utilities into util.h

parent da3b391c
...@@ -9,21 +9,14 @@ ...@@ -9,21 +9,14 @@
#include "repository.h" #include "repository.h"
#include "commit.h" #include "commit.h"
#include "thread-utils.h" #include "thread-utils.h"
#include "util.h"
#include "cache.h" #include "cache.h"
int git_cache_init(git_cache *cache, size_t size, git_cached_obj_freeptr free_ptr) int git_cache_init(git_cache *cache, size_t size, git_cached_obj_freeptr free_ptr)
{ {
if (size < 8) if (size < 8)
size = 8; size = 8;
size = git__size_t_powerof2(size);
/* 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++;
cache->size_mask = size - 1; cache->size_mask = size - 1;
cache->lru_count = 0; cache->lru_count = 0;
......
...@@ -179,4 +179,21 @@ GIT_INLINE(int) git__ishex(const char *str) ...@@ -179,4 +179,21 @@ GIT_INLINE(int) git__ishex(const char *str)
return 1; 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__ */ #endif /* INCLUDE_util_h__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment