home *** CD-ROM | disk | FTP | other *** search
- #ifndef __RWCACHEMAN_H__
- #define __RWCACHEMAN_H__
- pragma push_align_members(64);
-
- /*
- * RWCacheManager --- caches fixed length blocks to and from disk
- *
- * $Header: E:/vcs/rw/cacheman.h_v 1.2 18 Feb 1992 09:54:10 KEFFER $
- *
- ****************************************************************************
- *
- * Rogue Wave
- * P.O. Box 2328
- * Corvallis, OR 97339
- * Voice: (503) 754-3010 FAX: (503) 757-6650
- *
- * Copyright (C) 1989, 1990, 1991. This software is subject to copyright
- * protection under the laws of the United States and other countries.
- *
- ***************************************************************************
- *
- * $Log: E:/vcs/rw/cacheman.h_v $
- *
- * Rev 1.2 18 Feb 1992 09:54:10 KEFFER
- *
- * Rev 1.1 28 Oct 1991 09:08:08 keffer
- * Changed inclusions to <rw/xxx.h>
- *
- * Rev 1.0 28 Jul 1991 08:12:58 keffer
- * Tools.h++ V4.0.5 PVCS baseline version
- *
- */
-
- #include "rw/tooldefs.h"
-
- class RWExport RWCacheManager {
- RWFile* theFile;
- unsigned maxblocks; // Max # blocks in buffer
- unsigned nused; // Number being used.
- unsigned blocksize; // Size of a block
- RWoffset* diskAddrs; // Its disk address
- unsigned* useCounts; // Use count for the block
- char* buff; // The set of blocks.
- private:
- RWCacheManager(const RWCacheManager&); // Private to insure no copies
- void operator=(const RWCacheManager&); // Ditto
- int ageAndFindSlot(RWoffset);
- RWBoolean flush(int);
- int getFreeSlot();
- int LRU() const; // Find least recently used block
- public:
- RWCacheManager(RWFile* file, unsigned blocksz, unsigned mxblks = 10);
- ~RWCacheManager();
-
- RWBoolean flush(); // Perform any pending writes.
- void invalidate(); // Invalidate the entire cache
- RWBoolean read(RWoffset locn, void* dat);
- RWBoolean write(RWoffset locn, void* dat);
- };
-
- pragma pop_align_members();
- #endif
-