home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / online / source / c / compilers / Tickle-4.0.sit.hqx / Tickle-4.0 / cbtree / src / lrucache.h < prev    next >
Text File  |  1993-11-19  |  2KB  |  77 lines

  1.  
  2. #ifndef cbMALLOC
  3. #    define cbMALLOC(SZ)            ( malloc ( (SZ) ) )
  4. #    define cbFREE(ptr)            ( free ( (ptr) ) )
  5. #endif
  6.  
  7. /*
  8.  *  LRU list entries.  The head of the list is the most-recently requested
  9.  *  block; the tail is the least-recently requested one.
  10.  */
  11.  
  12. typedef struct LRU_ENT {
  13.     char    *l_buffer;        /* buffer we return to user */
  14.     int    l_pgno;            /* logical page number */
  15.     int    l_flags;        /* FREE and DIRTY bits */
  16.     struct LRU_ENT    *l_prev;    /* predecessor in LRU list */
  17.     struct LRU_ENT    *l_next;    /* successor in LRU list */
  18. } LRU_ENT;
  19.  
  20. /*
  21.  *  Cache entries.  We use a hash table to avoid a linear walk of the LRU
  22.  *  list when we need to look up blocks by number.  The hash table is
  23.  *  chained.
  24.  */
  25.  
  26. typedef struct CACHE_ENT {
  27.     int            c_pgno;
  28.     LRU_ENT            *c_lruent;
  29.     struct CACHE_ENT    *c_chain;
  30. } CACHE_ENT;
  31.  
  32. /*
  33.  *  The LRU cache structure.  The cache size (lru_csize) is the largest size
  34.  *  the user wants us to grow to; current size (lru_cursz) is always less than
  35.  *  or equal to lru_csize.  Note that we will grow the cache (lru_csize) if
  36.  *  it's the only way that we can satisfy a user's block request.
  37.  */
  38.  
  39. typedef struct LRUCACHE {
  40.     int        lru_fd;
  41.     int        lru_csize;
  42.     int        lru_psize;
  43.     int        lru_cursz;
  44.     char        *lru_opaque;        /* passed to inproc, outproc */
  45.     int        (*lru_inproc)();
  46.     int        (*lru_outproc)();
  47.     LRU_ENT        *lru_head;
  48.     LRU_ENT        *lru_tail;
  49.     CACHE_ENT    **lru_cache;
  50. } LRUCACHE;
  51.  
  52. #ifndef NULL
  53. #define NULL    0
  54. #endif /* ndef NULL */
  55.  
  56. /* this is the opaque type we return for LRU caches */
  57. typedef    char    *LRU;
  58.  
  59. /* bits for l_flags in LRU_ENT structure */
  60. #define    F_DIRTY        (1 << 0)
  61. #define F_FREE        (1 << 1)
  62.  
  63. /* lru module routines */
  64. extern CACHE_ENT    *lruhashget();
  65. extern CACHE_ENT    *lruhashput();
  66. extern int         lruhashdel();
  67. extern void        lruhead();
  68. extern int         lrugrow();
  69. extern LRU        lruinit();
  70. extern int        lruwrite();
  71. extern int        lrusync();
  72. extern char        *lruget();
  73. extern char        *lrugetnew();
  74. extern char        *lrugetpg();
  75. extern int        lrurelease();
  76. extern void        lrufree();
  77.