1b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/************************************************************************** 2b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 3b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Copyright 2008 VMware, Inc. 4b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * All Rights Reserved. 5b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 6b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * copy of this software and associated documentation files (the 8b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * "Software"), to deal in the Software without restriction, including 9b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * the following conditions: 13b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 14b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * The above copyright notice and this permission notice (including the 15b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * next paragraph) shall be included in all copies or substantial portions 16b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * of the Software. 17b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 18b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 26b901e1f212c11afda05f2628a522d86802f87c52José Fonseca **************************************************************************/ 27b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 28b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/** 29b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @file 30b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Simple cache. 31b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 32b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 33b901e1f212c11afda05f2628a522d86802f87c52José Fonseca */ 34b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 35b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#ifndef U_CACHE_H_ 36b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#define U_CACHE_H_ 37b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 38b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 39b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#include "pipe/p_compiler.h" 40b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 41b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 42b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#ifdef __cplusplus 43b901e1f212c11afda05f2628a522d86802f87c52José Fonsecaextern "C" { 44b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#endif 45b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 46b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 47b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/** 48b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Least Recently Used (LRU) cache. 49b901e1f212c11afda05f2628a522d86802f87c52José Fonseca */ 50b901e1f212c11afda05f2628a522d86802f87c52José Fonsecastruct util_cache; 51b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 52b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 53b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/** 54b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Create a cache. 55b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 56b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @param hash hash function 57b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @param compare should return 0 for two equal keys 58b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @param destroy destruction callback (optional) 59b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @param size maximum number of entries 60b901e1f212c11afda05f2628a522d86802f87c52José Fonseca */ 61b901e1f212c11afda05f2628a522d86802f87c52José Fonsecastruct util_cache * 62ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonsecautil_cache_create(uint32_t (*hash)(const void *key), 63ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca int (*compare)(const void *key1, const void *key2), 64ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca void (*destroy)(void *key, void *value), 65ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca uint32_t size); 66b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 67b901e1f212c11afda05f2628a522d86802f87c52José Fonsecavoid 68b901e1f212c11afda05f2628a522d86802f87c52José Fonsecautil_cache_set(struct util_cache *cache, 69ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca void *key, 70ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca void *value); 71b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 72b901e1f212c11afda05f2628a522d86802f87c52José Fonsecavoid * 73b901e1f212c11afda05f2628a522d86802f87c52José Fonsecautil_cache_get(struct util_cache *cache, 74ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonseca const void *key); 75b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 76b901e1f212c11afda05f2628a522d86802f87c52José Fonsecavoid 77b901e1f212c11afda05f2628a522d86802f87c52José Fonsecautil_cache_clear(struct util_cache *cache); 78b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 79b901e1f212c11afda05f2628a522d86802f87c52José Fonsecavoid 80b901e1f212c11afda05f2628a522d86802f87c52José Fonsecautil_cache_destroy(struct util_cache *cache); 81b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 82d00cbf46cde0edee6d8f2c08e14458ef92ff0fbeAlex Corscaddenvoid 83d00cbf46cde0edee6d8f2c08e14458ef92ff0fbeAlex Corscaddenutil_cache_remove(struct util_cache *cache, 84d00cbf46cde0edee6d8f2c08e14458ef92ff0fbeAlex Corscadden const void *key); 85d00cbf46cde0edee6d8f2c08e14458ef92ff0fbeAlex Corscadden 86b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 87b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#ifdef __cplusplus 88b901e1f212c11afda05f2628a522d86802f87c52José Fonseca} 89b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#endif 90b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 91b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#endif /* U_CACHE_H_ */ 92