summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS2/JAWS/Filecache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Filecache.cpp')
-rw-r--r--ACE/apps/JAWS2/JAWS/Filecache.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/JAWS/Filecache.cpp b/ACE/apps/JAWS2/JAWS/Filecache.cpp
new file mode 100644
index 00000000000..b5de6c4d3ae
--- /dev/null
+++ b/ACE/apps/JAWS2/JAWS/Filecache.cpp
@@ -0,0 +1,94 @@
+// $Id$
+
+#include "ace/FILE_Connector.h"
+#include "ace/OS_NS_unistd.h"
+
+#include "JAWS/Filecache.h"
+#include "JAWS/Cache_List_T.h"
+
+void
+JAWS_Referenced_Filecache_Factory::destroy (JAWS_Cache_Object *object)
+{
+ JAWS_FILE *file = (JAWS_FILE *) object->data ();
+ file->close ();
+ if (file->map ())
+ file->map ()->close ();
+ delete file;
+ this->JAWS_Referenced_Cache_Object_Factory::destroy (object);
+}
+
+void
+JAWS_Counted_Filecache_Factory::destroy (JAWS_Cache_Object *object)
+{
+ JAWS_FILE *file = (JAWS_FILE *) object->data ();
+ file->close ();
+ if (file->map ())
+ file->map ()->close ();
+ delete file;
+ this->JAWS_Counted_Cache_Object_Factory::destroy (object);
+}
+
+JAWS_Cached_FILE::JAWS_Cached_FILE (const char *const &filename,
+ JAWS_Filecache_Proxy::Cache_Manager *cm)
+ : JAWS_Filecache_Proxy (filename, cm)
+{
+ ACE_HANDLE handle = ACE_INVALID_HANDLE;
+
+ if (this->data () != 0)
+ {
+ handle = ACE_OS::dup (this->data ()->get_handle ());
+ }
+ else
+ {
+ JAWS_FILE *file = new JAWS_FILE;
+ ACE_FILE_Connector file_connector;
+
+ int result = file_connector.connect (*file, ACE_FILE_Addr (filename));
+ if (result == -1 || file->get_handle () == ACE_INVALID_HANDLE)
+ {
+ // TODO: do something here!
+ }
+
+ ACE_FILE_Info info;
+ file->get_info (info);
+
+ handle = ACE_OS::dup (file->get_handle ());
+
+ {
+ JAWS_Cached_FILE cf (filename, file, info.size_, cm);
+ if (cf.data () != 0)
+ {
+ new (this) JAWS_Cached_FILE (filename, cm);
+ return;
+ }
+ }
+ }
+
+ this->file_.set_handle (handle);
+}
+
+JAWS_Cached_FILE::JAWS_Cached_FILE (const char *const &filename,
+ JAWS_FILE *&file,
+ size_t size,
+ JAWS_Filecache_Proxy::Cache_Manager *cm)
+ : JAWS_Filecache_Proxy (filename, file, size, cm)
+{
+}
+
+JAWS_Cached_FILE::~JAWS_Cached_FILE (void)
+{
+ this->file_.close ();
+}
+
+ACE_FILE_IO *
+JAWS_Cached_FILE::file (void)
+{
+ return &(this->file_);
+}
+
+ACE_Mem_Map *
+JAWS_Cached_FILE::mmap (void)
+{
+ return (this->data () == 0 ? 0 : this->data ()->mem_map ());
+}
+