Stxxl
1.2.1
|
00001 /*************************************************************************** 00002 * include/stxxl/bits/io/mem_file.h 00003 * 00004 * Part of the STXXL. See http://stxxl.sourceforge.net 00005 * 00006 * Copyright (C) 2008 Andreas Beckmann <beckmann@cs.uni-frankfurt.de> 00007 * 00008 * Distributed under the Boost Software License, Version 1.0. 00009 * (See accompanying file LICENSE_1_0.txt or copy at 00010 * http://www.boost.org/LICENSE_1_0.txt) 00011 **************************************************************************/ 00012 00013 #ifndef STXXL_MEM_FILE_HEADER 00014 #define STXXL_MEM_FILE_HEADER 00015 00016 #include <stxxl/bits/io/iobase.h> 00017 00018 00019 __STXXL_BEGIN_NAMESPACE 00020 00023 00025 class mem_file : public file 00026 { 00027 char * ptr; 00028 unsigned_type sz; 00029 00030 public: 00033 mem_file( 00034 int disk = -1); 00035 request_ptr aread( 00036 void * buffer, 00037 stxxl::int64 pos, 00038 size_t bytes, 00039 completion_handler on_cmpl); 00040 request_ptr awrite( 00041 void * buffer, 00042 stxxl::int64 pos, 00043 size_t bytes, 00044 completion_handler on_cmpl); 00045 char * get_ptr() const; 00046 ~mem_file(); 00047 stxxl::int64 size(); 00048 void set_size(stxxl::int64 newsize); 00049 void lock(); 00050 void delete_region(int64 offset, unsigned_type size); 00051 }; 00052 00054 class mem_request : public request 00055 { 00056 friend class mem_file; 00057 00058 protected: 00059 // states of request 00060 enum { OP = 0, DONE = 1, READY2DIE = 2 }; 00061 // OP - operating, DONE - request served, 00062 // READY2DIE - can be destroyed 00063 00064 state _state; 00065 mutex waiters_mutex; 00066 std::set<onoff_switch *> waiters; 00067 00068 mem_request( 00069 mem_file * f, 00070 void * buf, 00071 stxxl::int64 off, 00072 size_t b, 00073 request_type t, 00074 completion_handler on_cmpl); 00075 bool add_waiter(onoff_switch * sw); 00076 void delete_waiter(onoff_switch * sw); 00077 int nwaiters(); // returns number of waiters 00078 void check_aligning(); 00079 void serve(); 00080 00081 public: 00082 virtual ~mem_request(); 00083 void wait(); 00084 bool poll(); 00085 const char * io_type(); 00086 }; 00087 00089 00090 __STXXL_END_NAMESPACE 00091 00092 #endif // !STXXL_MEM_FILE_HEADER