[go: up one dir, main page]

Menu

[8bf46b]: / io / wfs_file.h  Maximize  Restore  History

Download this file

90 lines (74 with data), 2.0 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#ifndef WFSFILEBASE_HEADER
#define WFSFILEBASE_HEADER
/***************************************************************************
* wfs_file.h
* Windows file system file base
* Fri Jul 22 15:39:59 2005
* Copyright 2005 Roman Dementiev
* dementiev@ira.uka.de
****************************************************************************/
#include "iobase.h"
#ifdef BOOST_MSVC
__STXXL_BEGIN_NAMESPACE
//! \addtogroup fileimpl
//! \{
class wfs_request_base;
//! \brief Base for Windows file system implementations
class wfs_file_base:public file
{
protected:
HANDLE file_des; // file descriptor
int mode_; // open mode
wfs_file_base (const std::string & filename, int mode, int disk);
private:
wfs_file_base ();
public:
HANDLE get_file_des() const;
~wfs_file_base();
stxxl::int64 size ();
void set_size(stxxl::int64 newsize);
void lock();
};
//! \brief Base for UNIX file system implementations
class wfs_request_base:public request
{
friend class wfs_file_base;
protected:
// states of request
enum { OP = 0, DONE = 1, READY2DIE = 2 }; // OP - operating, DONE - request served,
// READY2DIE - can be destroyed
/*
wfs_file_base *file;
void *buffer;
stxxl::int64 offset;
size_t bytes;
request_type type;
*/
state _state;
#ifdef STXXL_BOOST_THREADS
boost::mutex waiters_mutex;
#else
mutex waiters_mutex;
#endif
std::set < onoff_switch * > waiters;
wfs_request_base (
wfs_file_base * f,
void *buf,
stxxl::int64 off,
size_t b,
request_type t,
completion_handler on_cmpl);
bool add_waiter (onoff_switch * sw);
void delete_waiter (onoff_switch * sw);
int nwaiters (); // returns number of waiters
void check_aligning ();
public:
virtual ~wfs_request_base ();
void wait ();
bool poll();
const char *io_type ();
};
//! \}
__STXXL_END_NAMESPACE
#endif // BOOST_MSVC
#endif // WFSFILEBASE_HEADER