File Coverage

deps/libgit2/src/libgit2/cache.h
Criterion Covered Total %
statement 4 4 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 4 4 100.0


line stmt bran cond sub pod time code
1             /*
2             * Copyright (C) the libgit2 contributors. All rights reserved.
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             */
7             #ifndef INCLUDE_cache_h__
8             #define INCLUDE_cache_h__
9              
10             #include "common.h"
11              
12             #include "git2/common.h"
13             #include "git2/oid.h"
14             #include "git2/odb.h"
15              
16             #include "thread.h"
17             #include "oidmap.h"
18              
19             enum {
20             GIT_CACHE_STORE_ANY = 0,
21             GIT_CACHE_STORE_RAW = 1,
22             GIT_CACHE_STORE_PARSED = 2
23             };
24              
25             typedef struct {
26             git_oid oid;
27             int16_t type; /* git_object_t value */
28             uint16_t flags; /* GIT_CACHE_STORE value */
29             size_t size;
30             git_atomic32 refcount;
31             } git_cached_obj;
32              
33             typedef struct {
34             git_oidmap *map;
35             git_rwlock lock;
36             ssize_t used_memory;
37             } git_cache;
38              
39             extern bool git_cache__enabled;
40             extern ssize_t git_cache__max_storage;
41             extern git_atomic_ssize git_cache__current_storage;
42              
43             int git_cache_set_max_object_size(git_object_t type, size_t size);
44              
45             int git_cache_init(git_cache *cache);
46             void git_cache_dispose(git_cache *cache);
47             void git_cache_clear(git_cache *cache);
48              
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);
55              
56             GIT_INLINE(size_t) git_cache_size(git_cache *cache)
57             {
58             return (size_t)git_oidmap_size(cache->map);
59             }
60              
61 101           GIT_INLINE(void) git_cached_obj_incref(void *_obj)
62             {
63 101           git_cached_obj *obj = _obj;
64 101           git_atomic32_inc(&obj->refcount);
65 101           }
66              
67             void git_cached_obj_decref(void *_obj);
68              
69             #endif