00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #ifndef STXXL_WFSFILEBASE_HEADER
00016 #define STXXL_WFSFILEBASE_HEADER
00017 
00018 #ifdef STXXL_BOOST_CONFIG
00019  #include <boost/config.hpp>
00020 #endif
00021 
00022 #ifdef BOOST_MSVC
00023 
00024 #include <stxxl/bits/io/iobase.h>
00025 
00026 
00027 __STXXL_BEGIN_NAMESPACE
00028 
00031 
00032 class wfs_request_base;
00033 
00035 class wfs_file_base : public file
00036 {
00037 protected:
00038     HANDLE file_des;       
00039     int mode_;             
00040     wfs_file_base(const std::string & filename, int mode, int disk);
00041 
00042 public:
00043     HANDLE get_file_des() const;
00044     ~wfs_file_base();
00045     stxxl::int64 size();
00046     void set_size(stxxl::int64 newsize);
00047     void lock();
00048 };
00049 
00051 class wfs_request_base : public request
00052 {
00053     friend class wfs_file_base;
00054 
00055 protected:
00056     
00057     enum { OP = 0, DONE = 1, READY2DIE = 2 };
00058     
00059     
00060     
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068     state _state;
00069     mutex waiters_mutex;
00070     std::set<onoff_switch *> waiters;
00071 
00072     wfs_request_base(
00073         wfs_file_base * f,
00074         void * buf,
00075         stxxl::int64 off,
00076         size_t b,
00077         request_type t,
00078         completion_handler on_cmpl);
00079 
00080     bool add_waiter(onoff_switch * sw);
00081     void delete_waiter(onoff_switch * sw);
00082     int nwaiters();             
00083     void check_aligning();
00084 
00085 public:
00086     virtual ~wfs_request_base();
00087     void wait();
00088     bool poll();
00089     const char * io_type();
00090 };
00091 
00093 
00094 __STXXL_END_NAMESPACE
00095 
00096 #endif // #ifdef BOOST_MSVC
00097 
00098 #endif // !STXXL_WFSFILEBASE_HEADER