15 #ifndef STXXL_IO_FILE_HEADER
16 #define STXXL_IO_FILE_HEADER
18 #ifdef STXXL_BOOST_CONFIG
19 #include <boost/config.hpp>
22 #if defined (__linux__)
23 #define STXXL_CHECK_BLOCK_ALIGNING
27 #include <sys/types.h>
35 #include <sys/resource.h>
54 #if defined (__linux__)
55 #if ! defined(O_DIRECT)
56 #error O_DIRECT is not defined while __linux__ is - PLEASE REPORT THIS BUG
60 #if !defined (O_DIRECT) && (defined (__alpha__) || defined (__i386__))
61 #define O_DIRECT 040000
66 #define O_DIRECT O_SYNC
72 #include <stxxl/bits/libstxxl.h>
73 #include <stxxl/bits/namespace.h>
74 #include <stxxl/bits/noncopyable.h>
75 #include <stxxl/bits/common/exceptions.h>
76 #include <stxxl/bits/common/mutex.h>
77 #include <stxxl/bits/io/request.h>
78 #include <stxxl/bits/io/request_ptr.h>
81 __STXXL_BEGIN_NAMESPACE
90 class file :
private noncopyable
92 mutex request_ref_cnt_mutex;
99 file() : request_ref_cnt(0) { }
103 typedef request::offset_type offset_type;
105 typedef request::size_type size_type;
123 static const int DEFAULT_QUEUE = -1;
124 static const int NO_QUEUE = -2;
125 static const int NO_ALLOCATOR = -1;
145 virtual void serve(
const request * req)
throw (io_error) = 0;
147 void add_request_ref()
153 void delete_request_ref()
156 assert(request_ref_cnt > 0);
160 int get_request_nref()
163 return request_ref_cnt;
168 virtual void set_size(offset_type newsize) = 0;
171 virtual offset_type
size() = 0;
180 virtual int get_physical_device_id()
const
186 virtual void lock() = 0;
192 STXXL_UNUSED(offset);
196 virtual void export_files(offset_type offset, offset_type length, std::string prefix)
198 STXXL_UNUSED(offset);
199 STXXL_UNUSED(length);
200 STXXL_UNUSED(prefix);
203 virtual void remove() { }
207 int nr = get_request_nref();
209 STXXL_ERRMSG(
"stxxl::file is being deleted while there are still " << nr <<
" (unfinished) requests referencing it");
222 __STXXL_END_NAMESPACE
224 #endif // !STXXL_IO_FILE_HEADER