source: trunk/include/lru_cache.h @ 216

Last change on this file since 216 was 201, checked in by tim, 14 years ago

changed symbol visibility to hidden by default and explicitly exported API functions

  • Property svn:keywords set to Id
File size: 2.7 KB
RevLine 
[169]1/*
2 * Copyright (C) 2008-2010 Timothy D. Morgan
[168]3 *
[108]4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3 of the License.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
16 *
[122]17 * $Id: lru_cache.h 201 2010-06-05 04:45:05Z tim $
[108]18 */
19
[169]20/**
21 * @file
22 *
23 * A data structure which approximates a least recently used (LRU) cache.
24 * Implemented as a basic randomized hash table.
25 */
26
27
[108]28#ifndef LRU_CACHE_H
29#define LRU_CACHE_H
30
31#include <stdbool.h>
32#include <stdint.h>
33#include <stdlib.h>
34#include <stdio.h>
35#include <string.h>
36#include <unistd.h>
[201]37#include <talloc.h>
[108]38
[201]39/* GCC-specific macro for library exports */
40#ifdef _EXPORT
41#undef _EXPORT
42#endif
43#define _EXPORT __attribute__((visibility("default")))
44
[108]45struct lru_cache_element;
46typedef struct lru_cache_element lru_cache_element; 
47
48struct lru_cache_element
49{
50  void* index;
51  uint32_t index_len;
52  void* data;
53  lru_cache_element* next;
54  lru_cache_element* older;
55  lru_cache_element* newer;
56};
57
[169]58
59/** XXX: document this. */
[108]60typedef struct _lru_cache
61{
62  uint32_t secret;
63  uint32_t num_keys;
64  uint32_t num_buckets;
65  uint32_t max_keys;
66  lru_cache_element* oldest;
67  lru_cache_element* newest;
68  lru_cache_element** table;
[147]69  bool talloc_data;
[108]70} lru_cache;
71
72
[169]73/**
74 * XXX: finish documenting.
75 */
[201]76_EXPORT
[147]77lru_cache* lru_cache_create(uint32_t max_keys, uint32_t secret);
[169]78
79
80/**
81 * XXX: finish documenting.
82 */
[201]83_EXPORT
[147]84lru_cache* lru_cache_create_ctx(void* talloc_ctx, uint32_t max_keys, 
85                                uint32_t secret, bool talloc_data);
[169]86
87
88/**
89 * XXX: finish documenting.
90 */
[201]91_EXPORT
[108]92void lru_cache_destroy(lru_cache* ht);
93
[169]94
95/**
96 * XXX: finish documenting.
[108]97 */
[201]98_EXPORT
[108]99bool lru_cache_update(lru_cache* ht, const void* index, 
100                      uint32_t index_len, void* data);
101
[169]102/**
103 * XXX: finish documenting.
104 *
105 * @return A pointer to data previously stored at index.
106 *         If no data was found at index, NULL is returned.
[108]107 */
[201]108_EXPORT
[108]109void* lru_cache_find(lru_cache* ht, const void* index, 
110                     uint32_t index_len);
111
[169]112/**
113 * XXX: finish documenting.
114 *
115 * Removes entry from table at index.
116 *
117 * @return A pointer to data that was there previously or NULL if no entry is
118 *         at index.
[108]119 */
[201]120_EXPORT
[108]121bool lru_cache_remove(lru_cache* ht, const void* index, 
122                      uint32_t index_len);
123
124#endif
Note: See TracBrowser for help on using the repository browser.