diff options
| author | Allusive_ <[email protected]> | 2023-08-01 09:00:18 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-01 09:00:18 +1000 |
| commit | 0147e7dd165f837662a480938e2083a5ac707586 (patch) | |
| tree | 3e38624c86c7119703cddb524ac01278491c8a3f /src/cache.h | |
| parent | Add files via upload (diff) | |
| download | compfy-0147e7dd165f837662a480938e2083a5ac707586.tar.xz compfy-0147e7dd165f837662a480938e2083a5ac707586.zip | |
Add files via upload
Diffstat (limited to 'src/cache.h')
| -rw-r--r-- | src/cache.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cache.h b/src/cache.h new file mode 100644 index 0000000..3ca054f --- /dev/null +++ b/src/cache.h @@ -0,0 +1,32 @@ +#pragma once + +struct cache; + +typedef void *(*cache_getter_t)(void *user_data, const char *key, int *err); +typedef void (*cache_free_t)(void *user_data, void *data); + +/// Create a cache with `getter`, and a free function `f` which is used to free the cache +/// value when they are invalidated. +/// +/// `user_data` will be passed to `getter` and `f` when they are called. +struct cache *new_cache(void *user_data, cache_getter_t getter, cache_free_t f); + +/// Fetch a value from the cache. If the value doesn't present in the cache yet, the +/// getter will be called, and the returned value will be stored into the cache. +void *cache_get(struct cache *, const char *key, int *err); + +/// Invalidate a value in the cache. +void cache_invalidate(struct cache *, const char *key); + +/// Invalidate all values in the cache. +void cache_invalidate_all(struct cache *); + +/// Invalidate all values in the cache and free it. Returns the user data passed to +/// `new_cache` +void *cache_free(struct cache *); + +/// Insert a key-value pair into the cache. Only used for internal testing. Takes +/// ownership of `data` +/// +/// If `key` already exists in the cache, this function will abort the program. +void cache_set(struct cache *c, const char *key, void *data); |