Stxxl  1.2.1
ufs_file.h
1 /***************************************************************************
2  * include/stxxl/bits/io/ufs_file.h
3  *
4  * UNIX file system file base
5  *
6  * Part of the STXXL. See http://stxxl.sourceforge.net
7  *
8  * Copyright (C) 2002 Roman Dementiev <dementiev@mpi-sb.mpg.de>
9  *
10  * Distributed under the Boost Software License, Version 1.0.
11  * (See accompanying file LICENSE_1_0.txt or copy at
12  * http://www.boost.org/LICENSE_1_0.txt)
13  **************************************************************************/
14 
15 #ifndef STXXL_UFSFILEBASE_HEADER
16 #define STXXL_UFSFILEBASE_HEADER
17 
18 #include <stxxl/bits/io/iobase.h>
19 
20 
21 __STXXL_BEGIN_NAMESPACE
22 
25 
26 class ufs_request_base;
27 
29 class ufs_file_base : public file
30 {
31 protected:
32  int file_des; // file descriptor
33  int mode_; // open mode
34  ufs_file_base(const std::string & filename, int mode, int disk);
35 
36 public:
37  int get_file_des() const;
38  ~ufs_file_base();
39  stxxl::int64 size();
40  void set_size(stxxl::int64 newsize);
41  void lock();
42 };
43 
45 class ufs_request_base : public request
46 {
47  friend class ufs_file_base;
48 
49 protected:
50  // states of request
51  enum { OP = 0, DONE = 1, READY2DIE = 2 };
52  // OP - operating, DONE - request served,
53  // READY2DIE - can be destroyed
54  /*
55  ufs_file_base *file;
56  void *buffer;
57  stxxl::int64 offset;
58  size_t bytes;
59  request_type type;
60  */
61 
62  state _state;
63  mutex waiters_mutex;
64  std::set<onoff_switch *> waiters;
65 
67  ufs_file_base * f,
68  void * buf,
69  stxxl::int64 off,
70  size_t b,
71  request_type t,
72  completion_handler on_cmpl);
73  bool add_waiter(onoff_switch * sw);
74  void delete_waiter(onoff_switch * sw);
75  int nwaiters(); // returns number of waiters
76  void check_aligning();
77 
78 public:
79  virtual ~ufs_request_base();
80  void wait();
81  bool poll();
82  const char * io_type();
83 };
84 
86 
87 __STXXL_END_NAMESPACE
88 
89 #endif // !STXXL_UFSFILEBASE_HEADER