cache.h
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** cache.h
  3. **
  4. ** Copyright (c) 1995 Peter Eriksson <pen@signum.se>
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ** GNU General Public License for more details.
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software
  17. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #ifndef CACHETABLE_H
  20. #define CACHETABLE_H
  21. typedef struct cacheentry_s
  22. {
  23.     int magic;
  24.     
  25.     mutex_t lock;
  26.     int use;
  27.     time_t itime;
  28.     
  29.     void (*release_fcn)(void *data);
  30.     
  31.     void *key;
  32.     unsigned int keylen;
  33.     void *data;
  34.     
  35.     struct cacheentry_s *next;
  36. } cacheentry_t;
  37. typedef struct cachestat_s
  38. {
  39.     mutex_t lock;
  40.     unsigned long lookups; /* Total lookups */
  41.     unsigned long updates; /* Data was found in cache, but too old */
  42.     unsigned long reloads; /* Data was loaded into cache */
  43.     unsigned long hits;    /* Data was found in cache */
  44. } cachestat_t;
  45. typedef struct cache_s
  46. {
  47.     unsigned int size;
  48.     unsigned int (*hash_fcn)(void *key,
  49.      unsigned int keylen,
  50.      unsigned int size);
  51.     void (*release_fcn)(void *data);
  52.     cachestat_t stats;
  53.     int (*update_fcn)(void *key,
  54.       unsigned int keylen,
  55.       void *data,
  56.       void **new_data,
  57.       void *misc);
  58.     int refresh;
  59.     int ttl;
  60.     int gc_interval;
  61.     cacheentry_t *table;
  62. } cache_t;
  63. extern void cache_init(cache_t *ctp,
  64.        int refresh,
  65.        int ttl,
  66.        int gc_interval,
  67.        unsigned hashsize,
  68.        unsigned (*hash_fcn)(void *key,
  69.     unsigned int keylen,
  70.     unsigned int hashsize),
  71.        void (*release_fcn)(void *data),
  72.        int (*update_fcn)(void *key,
  73.  unsigned int keylen,
  74.  void *data,
  75.  void **new_data,
  76.  void *misc));
  77. #define CF_RELOAD 0x0001
  78. extern cacheentry_t *cache_lookup(cache_t *ctp,
  79.   void *key,
  80.   unsigned int keylen,
  81.   void *misc,
  82.   unsigned int flags);
  83. extern void cache_release(cacheentry_t *hep);
  84. extern int cache_getstats(cache_t *ctp,
  85.   cachestat_t *csp);
  86. #endif