1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
// $Id: Filecache.cpp 80826 2008-03-04 14:51:23Z wotte $
#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 ());
}
|