]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/DiskThreads/DiskThreadsDiskFile.h
Cleanup: update several CBDATA classes part 2
[thirdparty/squid.git] / src / DiskIO / DiskThreads / DiskThreadsDiskFile.h
1 /*
2 * DEBUG: section 79 Disk IO Routines
3 * AUTHOR: Robert Collins
4 *
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
7 *
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
30 *
31 * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
32 */
33
34 #ifndef SQUID_DISKTHREADSDISKFILE_H
35 #define SQUID_DISKTHREADSDISKFILE_H
36 #include "cbdata.h"
37 #include "DiskIO/DiskFile.h"
38 #include "DiskThreads.h"
39
40 class DiskThreadsDiskFile : public DiskFile
41 {
42
43 public:
44 DiskThreadsDiskFile(char const *path, DiskThreadsIOStrategy *);
45 ~DiskThreadsDiskFile();
46 virtual void open(int flags, mode_t mode, RefCount<IORequestor> callback);
47 virtual void create(int flags, mode_t mode, RefCount<IORequestor> callback);
48 virtual void read(ReadRequest *);
49 virtual void write(WriteRequest *);
50 virtual void close();
51 virtual bool error() const;
52 virtual int getFD() const { return fd;}
53
54 virtual bool canRead() const;
55 virtual bool canWrite() const;
56 virtual bool ioInProgress() const;
57
58 private:
59 #if ASYNC_READ
60
61 static AIOCB ReadDone;
62 #else
63
64 static DRCB ReadDone;
65 #endif
66 #if ASYNC_WRITE
67
68 static AIOCB WriteDone;
69 #else
70
71 static DWCB WriteDone;
72 #endif
73
74 int fd;
75 bool errorOccured;
76 char const *path_;
77 DiskThreadsIOStrategy *IO;
78 size_t inProgressIOs;
79 static AIOCB OpenDone;
80 void openDone(int fd, const char *buf, int aio_return, int aio_errno);
81 RefCount<IORequestor> ioRequestor;
82 void doClose();
83
84 void readDone(int fd, const char *buf, int len, int errflag, RefCount<ReadRequest> request);
85 void writeDone(int fd, int errflag, size_t len, RefCount<WriteRequest> request);
86
87 CBDATA_CLASS2(DiskThreadsDiskFile);
88 };
89
90 #include "DiskIO/ReadRequest.h"
91
92 template <class RT>
93 class IoResult
94 {
95
96 public:
97 void * operator new (size_t);
98 void operator delete (void *);
99 IoResult(RefCount<DiskThreadsDiskFile> aFile, RefCount<RT> aRequest) : file(aFile), request(aRequest) {}
100
101 RefCount<DiskThreadsDiskFile> file;
102 RefCount<RT> request;
103
104 private:
105 CBDATA_CLASS(IoResult);
106 };
107
108 template <class RT>
109 IoResult<RT>
110 IOResult(RefCount<RT> aRequest, RefCount<DiskThreadsDiskFile> aFile) { return IoResult<RT>(aFile, aRequest);}
111
112 #endif /* SQUID_DISKTHREADSDISKFILE_H */