source: trunk/include/lru_cache.h @ 180

Last change on this file since 180 was 169, checked in by tim, 15 years ago

filled in additional, minimal documentation

  • Property svn:keywords set to Id
File size: 2.5 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 169 2010-03-03 19:24:58Z 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>
[147]37#include "talloc.h"
[108]38
39struct lru_cache_element;
40typedef struct lru_cache_element lru_cache_element; 
41
42struct lru_cache_element
43{
44  void* index;
45  uint32_t index_len;
46  void* data;
47  lru_cache_element* next;
48  lru_cache_element* older;
49  lru_cache_element* newer;
50};
51
[169]52
53/** XXX: document this. */
[108]54typedef struct _lru_cache
55{
56  uint32_t secret;
57  uint32_t num_keys;
58  uint32_t num_buckets;
59  uint32_t max_keys;
60  lru_cache_element* oldest;
61  lru_cache_element* newest;
62  lru_cache_element** table;
[147]63  bool talloc_data;
[108]64} lru_cache;
65
66
[169]67/**
68 * XXX: finish documenting.
69 */
[147]70lru_cache* lru_cache_create(uint32_t max_keys, uint32_t secret);
[169]71
72
73/**
74 * XXX: finish documenting.
75 */
[147]76lru_cache* lru_cache_create_ctx(void* talloc_ctx, uint32_t max_keys, 
77                                uint32_t secret, bool talloc_data);
[169]78
79
80/**
81 * XXX: finish documenting.
82 */
[108]83void lru_cache_destroy(lru_cache* ht);
84
[169]85
86/**
87 * XXX: finish documenting.
[108]88 */
89bool lru_cache_update(lru_cache* ht, const void* index, 
90                      uint32_t index_len, void* data);
91
[169]92/**
93 * XXX: finish documenting.
94 *
95 * @return A pointer to data previously stored at index.
96 *         If no data was found at index, NULL is returned.
[108]97 */
98void* lru_cache_find(lru_cache* ht, const void* index, 
99                     uint32_t index_len);
100
[169]101/**
102 * XXX: finish documenting.
103 *
104 * Removes entry from table at index.
105 *
106 * @return A pointer to data that was there previously or NULL if no entry is
107 *         at index.
[108]108 */
109bool lru_cache_remove(lru_cache* ht, const void* index, 
110                      uint32_t index_len);
111
112#endif
Note: See TracBrowser for help on using the repository browser.