]>
Commit | Line | Data |
---|---|---|
bb742ede | 1 | /* |
359fc2d2 | 2 | * Copyright (C) the libgit2 contributors. All rights reserved. |
bb742ede VM |
3 | * |
4 | * This file is part of libgit2, distributed under the GNU GPL v2 with | |
5 | * a Linking Exception. For full terms see the included COPYING file. | |
6 | */ | |
bb3de0c4 VM |
7 | #ifndef INCLUDE_cache_h__ |
8 | #define INCLUDE_cache_h__ | |
9 | ||
eae0bfdc PP |
10 | #include "common.h" |
11 | ||
bb3de0c4 VM |
12 | #include "git2/common.h" |
13 | #include "git2/oid.h" | |
14 | #include "git2/odb.h" | |
15 | ||
16 | #include "thread-utils.h" | |
5df18424 | 17 | #include "oidmap.h" |
bb3de0c4 | 18 | |
5df18424 VM |
19 | enum { |
20 | GIT_CACHE_STORE_ANY = 0, | |
21 | GIT_CACHE_STORE_RAW = 1, | |
22 | GIT_CACHE_STORE_PARSED = 2 | |
23 | }; | |
bb3de0c4 VM |
24 | |
25 | typedef struct { | |
78606263 | 26 | git_oid oid; |
ac3d33df | 27 | int16_t type; /* git_object_t value */ |
78606263 RB |
28 | uint16_t flags; /* GIT_CACHE_STORE value */ |
29 | size_t size; | |
8842c75f | 30 | git_atomic refcount; |
bb3de0c4 VM |
31 | } git_cached_obj; |
32 | ||
33 | typedef struct { | |
5df18424 | 34 | git_oidmap *map; |
6a211d7c | 35 | git_rwlock lock; |
eb63fda2 | 36 | ssize_t used_memory; |
bb3de0c4 VM |
37 | } git_cache; |
38 | ||
b12b72ea | 39 | extern bool git_cache__enabled; |
eb63fda2 ET |
40 | extern ssize_t git_cache__max_storage; |
41 | extern git_atomic_ssize git_cache__current_storage; | |
b12b72ea | 42 | |
ac3d33df | 43 | int git_cache_set_max_object_size(git_object_t type, size_t size); |
b12b72ea | 44 | |
5df18424 | 45 | int git_cache_init(git_cache *cache); |
bb3de0c4 | 46 | void git_cache_free(git_cache *cache); |
879458e7 | 47 | void git_cache_clear(git_cache *cache); |
bb3de0c4 | 48 | |
5df18424 VM |
49 | void *git_cache_store_raw(git_cache *cache, git_odb_object *entry); |
50 | void *git_cache_store_parsed(git_cache *cache, git_object *entry); | |
51 | ||
52 | git_odb_object *git_cache_get_raw(git_cache *cache, const git_oid *oid); | |
53 | git_object *git_cache_get_parsed(git_cache *cache, const git_oid *oid); | |
54 | void *git_cache_get_any(git_cache *cache, const git_oid *oid); | |
bb3de0c4 | 55 | |
b12b72ea RB |
56 | GIT_INLINE(size_t) git_cache_size(git_cache *cache) |
57 | { | |
63e914cb | 58 | return (size_t)git_oidmap_size(cache->map); |
b12b72ea RB |
59 | } |
60 | ||
e4b4da14 | 61 | GIT_INLINE(void) git_cached_obj_incref(void *_obj) |
72a3fe42 | 62 | { |
e4b4da14 | 63 | git_cached_obj *obj = _obj; |
72a3fe42 VM |
64 | git_atomic_inc(&obj->refcount); |
65 | } | |
66 | ||
5df18424 | 67 | void git_cached_obj_decref(void *_obj); |
72a3fe42 | 68 | |
bb3de0c4 | 69 | #endif |