diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-07-09 01:17:57 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-07-09 01:17:57 +0000 |
commit | 93d87ca5a6167b994a3576b6b5b78a1536f14bbc (patch) | |
tree | c8e4aa2ab6092c284709c11bc9e887a512df710f /ace/Filecache.h | |
parent | b5b402f759eaa6ca2bcc91b10b76810df90a4fa0 (diff) | |
download | ATCD-93d87ca5a6167b994a3576b6b5b78a1536f14bbc.tar.gz |
*** empty log message ***
Diffstat (limited to 'ace/Filecache.h')
-rw-r--r-- | ace/Filecache.h | 119 |
1 files changed, 61 insertions, 58 deletions
diff --git a/ace/Filecache.h b/ace/Filecache.h index 2ea1ad4a5f2..499a121174b 100644 --- a/ace/Filecache.h +++ b/ace/Filecache.h @@ -2,7 +2,6 @@ // Hey, Emacs! This is a C++ file! // $Id$ - // ============================================================================ // // = LIBRARY @@ -16,34 +15,9 @@ // // ============================================================================ -#ifndef ACE_FILECACHE_H +#if !defined (ACE_FILECACHE_H) #define ACE_FILECACHE_H -// This is a cached filesystem implementation based loosely on the -// implementation of JAWS_File. The interfaces will be nearly the -// same. The under-the-hood implementation should hopefully be a -// much faster thing. - -// These will be given their own implementations later. For now, we -// borrow the implementation provided by JAWS. - -// TODO: - -// (1) Get rid of the useless copying of files when reading. Although -// it does make sure the file you send isn't being changed, it doesn't -// make sure the file is in a sensible state before sending it. - -// Alternative: if the file get's trashed while it is being shipped, let -// the client request the file again. The cache should have an updated -// copy by that point. - -// (2) Use hashing for locating files. This means I need a hastable -// implementation with buckets. - -// (3) Only lock when absolutely necessary. JAWS_Virtual_Filesystem was -// rather conservative, but for some reason it still ran into problems. -// Since this design should be simpler, problems should be easier to spot. - #include "ace/Mem_Map.h" #include "ace/Synch.h" @@ -51,13 +25,23 @@ class ACE_Filecache_Object; class ACE_Filecache; -class ACE_Filecache_Handle +class ACE_Export ACE_Filecache_Handle // = TITLE // Abstraction over a real file. This is meant to be the entry - // point into the Cached Virtual Filesystem. On creation, the - // cache is checked, and reference count is incremented. On - // destruction, reference count is decremented. If the - // reference count is 0, the file is removed from the cache. + // point into the Cached Virtual Filesystem. + // + // = DESCRIPTION + // This is a cached filesystem implementation based loosely on the + // implementation of JAWS_File. The interfaces will be nearly the + // same. The under-the-hood implementation should hopefully be a + // much faster thing. + // + // These will be given their own implementations later. For now, we + // borrow the implementation provided by JAWS. + // + // On creation, the cache is checked, and reference count is + // incremented. On destruction, reference count is decremented. If + // the reference count is 0, the file is removed from the cache. // // E.g. 1, // { @@ -76,6 +60,24 @@ class ACE_Filecache_Handle // ACE_Filecache_Handle foo("foo.html", content_length); // this->peer ().recv (foo.address (), content_length); // } + // + // TODO: + + // (1) Get rid of the useless copying of files when reading. Although + // it does make sure the file you send isn't being changed, it doesn't + // make sure the file is in a sensible state before sending it. + + // Alternative: if the file get's trashed while it is being shipped, let + // the client request the file again. The cache should have an updated + // copy by that point. + + // (2) Use hashing for locating files. This means I need a hastable + // implementation with buckets. + + // (3) Only lock when absolutely necessary. JAWS_Virtual_Filesystem was + // rather conservative, but for some reason it still ran into problems. + // Since this design should be simpler, problems should be easier to spot. + // { public: @@ -119,45 +121,32 @@ private: // A dup()'d version of the one from this->file_. }; -class ACE_Filecache +class ACE_Export ACE_Filecache // = TITLE - // A hash table holding the information about entry point into the - // Cached Virtual Filesystem. On insertion, the reference count is - // incremented. On destruction, reference count is decremented. + // A hash table holding the information about entry point into + // the Cached Virtual Filesystem. On insertion, the reference + // count is incremented. On destruction, reference count is + // decremented. { public: - static ACE_Filecache * instance (void); + static ACE_Filecache *instance (void); // Singleton pattern. ~ACE_Filecache (void); - ACE_Filecache_Object *fetch (const char * filename); + ACE_Filecache_Object *fetch (const char *filename); // Return the file associated with ``filename'' if it is in the cache, // or create if not. - ACE_Filecache_Object *remove (const char * filename); + ACE_Filecache_Object *remove (const char *filename); // Remove the file associated with ``filename'' from the cache. - ACE_Filecache_Object *insert (ACE_Filecache_Object * new_file); + ACE_Filecache_Object *insert (ACE_Filecache_Object *new_file); // Add a new file to the cache. - ACE_Filecache_Object *replace (ACE_Filecache_Object * new_file); + ACE_Filecache_Object *replace (ACE_Filecache_Object *new_file); // Replace an existing file in the cache (or insert if not already in). -protected: - ACE_Filecache (void); - // Prevent it from being called. - -private: - int fetch_i (const char * filename); - // Internal fetch method does not require locking. - - ACE_Filecache_Object * remove_i (int index); - // Internal remove method, no locking. - - ACE_Filecache_Object * insert_i (ACE_Filecache_Object *new_file); - // Internal insertion method, no locking. - public: enum @@ -171,7 +160,19 @@ public: // This will be ignored for now. }; +protected: + ACE_Filecache (void); + // Prevent it from being called. + private: + int fetch_i (const char *filename); + // Internal fetch method does not require locking. + + ACE_Filecache_Object *remove_i (int index); + // Internal remove method, no locking. + + ACE_Filecache_Object *insert_i (ACE_Filecache_Object *new_file); + // Internal insertion method, no locking. ACE_Filecache_Object *table_[DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE]; int size_; @@ -180,7 +181,7 @@ private: static ACE_SYNCH_RW_MUTEX lock_; }; -class ACE_Filecache_Object +class ACE_Export ACE_Filecache_Object // = TITLE // Abstraction over a real file. This is what the Virtual // Filesystem contains. This class is not intended for general @@ -236,7 +237,8 @@ protected: // Common initialization code, private: - int error_i (int error_value, const char * s = "ACE_Filecache_Object"); + int error_i (int error_value, + const char *s = "ACE_Filecache_Object"); // Internal error logging method, no locking. public: @@ -280,7 +282,8 @@ private: int reference_count_; ACE_SYNCH_RW_MUTEX lock_; // reference_count_ counts how many users of the file there are. - // lock_ provides a synchronization mechanism for critical sections of code. + // lock_ provides a synchronization mechanism for critical sections + // of code. }; #endif /* ACE_FILECACHE_H */ |