| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Copyright (C) 2024 Google LLC |
| */ |
| |
| #include "gendwarfksyms.h" |
| |
| struct cache_item { |
| unsigned long key; |
| int value; |
| struct hlist_node hash; |
| }; |
| |
| void cache_set(struct cache *cache, unsigned long key, int value) |
| { |
| struct cache_item *ci; |
| |
| ci = xmalloc(sizeof(struct cache_item)); |
| ci->key = key; |
| ci->value = value; |
| hash_add(cache->cache, &ci->hash, hash_32(key)); |
| } |
| |
| int cache_get(struct cache *cache, unsigned long key) |
| { |
| struct cache_item *ci; |
| |
| hash_for_each_possible(cache->cache, ci, hash, hash_32(key)) { |
| if (ci->key == key) |
| return ci->value; |
| } |
| |
| return -1; |
| } |
| |
| void cache_init(struct cache *cache) |
| { |
| hash_init(cache->cache); |
| } |
| |
| void cache_free(struct cache *cache) |
| { |
| struct hlist_node *tmp; |
| struct cache_item *ci; |
| |
| hash_for_each_safe(cache->cache, ci, tmp, hash) { |
| free(ci); |
| } |
| |
| hash_init(cache->cache); |
| } |