Stxxl 1.2.1
|
00001 /*************************************************************************** 00002 * include/stxxl/bits/io/ufs_file.h 00003 * 00004 * UNIX file system file base 00005 * 00006 * Part of the STXXL. See http://stxxl.sourceforge.net 00007 * 00008 * Copyright (C) 2002 Roman Dementiev <dementiev@mpi-sb.mpg.de> 00009 * 00010 * Distributed under the Boost Software License, Version 1.0. 00011 * (See accompanying file LICENSE_1_0.txt or copy at 00012 * http://www.boost.org/LICENSE_1_0.txt) 00013 **************************************************************************/ 00014 00015 #ifndef STXXL_UFSFILEBASE_HEADER 00016 #define STXXL_UFSFILEBASE_HEADER 00017 00018 #include <stxxl/bits/io/iobase.h> 00019 00020 00021 __STXXL_BEGIN_NAMESPACE 00022 00025 00026 class ufs_request_base; 00027 00029 class ufs_file_base : public file 00030 { 00031 protected: 00032 int file_des; // file descriptor 00033 int mode_; // open mode 00034 ufs_file_base(const std::string & filename, int mode, int disk); 00035 00036 public: 00037 int get_file_des() const; 00038 ~ufs_file_base(); 00039 stxxl::int64 size(); 00040 void set_size(stxxl::int64 newsize); 00041 void lock(); 00042 }; 00043 00045 class ufs_request_base : public request 00046 { 00047 friend class ufs_file_base; 00048 00049 protected: 00050 // states of request 00051 enum { OP = 0, DONE = 1, READY2DIE = 2 }; 00052 // OP - operating, DONE - request served, 00053 // READY2DIE - can be destroyed 00054 /* 00055 ufs_file_base *file; 00056 void *buffer; 00057 stxxl::int64 offset; 00058 size_t bytes; 00059 request_type type; 00060 */ 00061 00062 state _state; 00063 mutex waiters_mutex; 00064 std::set<onoff_switch *> waiters; 00065 00066 ufs_request_base( 00067 ufs_file_base * f, 00068 void * buf, 00069 stxxl::int64 off, 00070 size_t b, 00071 request_type t, 00072 completion_handler on_cmpl); 00073 bool add_waiter(onoff_switch * sw); 00074 void delete_waiter(onoff_switch * sw); 00075 int nwaiters(); // returns number of waiters 00076 void check_aligning(); 00077 00078 public: 00079 virtual ~ufs_request_base(); 00080 void wait(); 00081 bool poll(); 00082 const char * io_type(); 00083 }; 00084 00086 00087 __STXXL_END_NAMESPACE 00088 00089 #endif // !STXXL_UFSFILEBASE_HEADER