Stxxl  1.2.1
mem_file.h
1 /***************************************************************************
2  * include/stxxl/bits/io/mem_file.h
3  *
4  * Part of the STXXL. See http://stxxl.sourceforge.net
5  *
6  * Copyright (C) 2008 Andreas Beckmann <beckmann@cs.uni-frankfurt.de>
7  *
8  * Distributed under the Boost Software License, Version 1.0.
9  * (See accompanying file LICENSE_1_0.txt or copy at
10  * http://www.boost.org/LICENSE_1_0.txt)
11  **************************************************************************/
12 
13 #ifndef STXXL_MEM_FILE_HEADER
14 #define STXXL_MEM_FILE_HEADER
15 
16 #include <stxxl/bits/io/iobase.h>
17 
18 
19 __STXXL_BEGIN_NAMESPACE
20 
23 
25 class mem_file : public file
26 {
27  char * ptr;
28  unsigned_type sz;
29 
30 public:
33  mem_file(
34  int disk = -1);
36  void * buffer,
37  stxxl::int64 pos,
38  size_t bytes,
39  completion_handler on_cmpl);
41  void * buffer,
42  stxxl::int64 pos,
43  size_t bytes,
44  completion_handler on_cmpl);
45  char * get_ptr() const;
46  ~mem_file();
47  stxxl::int64 size();
48  void set_size(stxxl::int64 newsize);
49  void lock();
50  void delete_region(int64 offset, unsigned_type size);
51 };
52 
54 class mem_request : public request
55 {
56  friend class mem_file;
57 
58 protected:
59  // states of request
60  enum { OP = 0, DONE = 1, READY2DIE = 2 };
61  // OP - operating, DONE - request served,
62  // READY2DIE - can be destroyed
63 
64  state _state;
65  mutex waiters_mutex;
66  std::set<onoff_switch *> waiters;
67 
69  mem_file * f,
70  void * buf,
71  stxxl::int64 off,
72  size_t b,
73  request_type t,
74  completion_handler on_cmpl);
75  bool add_waiter(onoff_switch * sw);
76  void delete_waiter(onoff_switch * sw);
77  int nwaiters(); // returns number of waiters
78  void check_aligning();
79  void serve();
80 
81 public:
82  virtual ~mem_request();
83  void wait();
84  bool poll();
85  const char * io_type();
86 };
87 
89 
90 __STXXL_END_NAMESPACE
91 
92 #endif // !STXXL_MEM_FILE_HEADER