diff options
| author | Vicent Marti <tanoku@gmail.com> | 2011-03-16 21:35:51 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-03-20 21:45:06 +0200 |
| commit | bb3de0c472b2d5d6b8091c190bee3db79c4b5e27 (patch) | |
| tree | 6be2facd0014fff4a4769b6a6a082c722c03ad87 /src/cache.h | |
| parent | b5c5f0f8086ee4e9bccf0703386fd5219ac380c2 (diff) | |
| download | libgit2-bb3de0c472b2d5d6b8091c190bee3db79c4b5e27.tar.gz | |
Thread safe cache
Diffstat (limited to 'src/cache.h')
| -rw-r--r-- | src/cache.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/cache.h b/src/cache.h new file mode 100644 index 000000000..9f525e68c --- /dev/null +++ b/src/cache.h @@ -0,0 +1,38 @@ +#ifndef INCLUDE_cache_h__ +#define INCLUDE_cache_h__ + +#include "git2/common.h" +#include "git2/oid.h" +#include "git2/odb.h" + +#include "thread-utils.h" + +typedef void (*git_cached_obj_freeptr)(void *); + +typedef struct { + git_oid oid; + git_atomic refcount; +} git_cached_obj; + +typedef struct { + git_cached_obj *ptr; + git_mutex lock; + unsigned int lru; +} cache_node; + +typedef struct { + cache_node *nodes; + + unsigned int lru_count; + size_t size_mask; + git_cached_obj_freeptr free_obj; +} git_cache; + + +void git_cache_init(git_cache *cache, size_t size, git_cached_obj_freeptr free_ptr); +void git_cache_free(git_cache *cache); + +void *git_cache_try_store(git_cache *cache, void *entry); +void *git_cache_get(git_cache *cache, const git_oid *oid); + +#endif |
