xref: /haiku/headers/os/support/DataIO.h (revision 7120e97489acbf17d86d3f33e3b2e68974fd4b23)
1 //------------------------------------------------------------------------------
2 //	Copyright (c) 2001-2002, OpenBeOS
3 //
4 //	Permission is hereby granted, free of charge, to any person obtaining a
5 //	copy of this software and associated documentation files (the "Software"),
6 //	to deal in the Software without restriction, including without limitation
7 //	the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 //	and/or sell copies of the Software, and to permit persons to whom the
9 //	Software is furnished to do so, subject to the following conditions:
10 //
11 //	The above copyright notice and this permission notice shall be included in
12 //	all copies or substantial portions of the Software.
13 //
14 //	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 //	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 //	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 //	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 //	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 //	FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 //	DEALINGS IN THE SOFTWARE.
21 //
22 //	File Name:		DataIO.h
23 //	Author(s):		Jack Burton (burton666@libero.it)
24 //	Description:	Pure virtual BDataIO and BPositioIO classes provide
25 //					the protocol for Read()/Write()/Seek().
26 //
27 //					BMallocIO and BMemoryIO classes implement the protocol,
28 //					as does BFile in the Storage Kit.
29 //------------------------------------------------------------------------------
30 
31 #ifndef	_DATA_IO_H
32 #define	_DATA_IO_H
33 
34 // Standard Includes -----------------------------------------------------------
35 
36 // System Includes -------------------------------------------------------------
37 #include <BeBuild.h>
38 #include <SupportDefs.h>
39 
40 // Project Includes ------------------------------------------------------------
41 
42 // Local Includes --------------------------------------------------------------
43 
44 // Local Defines ---------------------------------------------------------------
45 
46 // Globals ---------------------------------------------------------------------
47 
48 
49 // BDataIO Class ---------------------------------------------------------------
50 class BDataIO {
51 public:
52 					BDataIO();
53 virtual				~BDataIO();
54 
55 virtual	ssize_t		Read(void *buffer, size_t size) = 0;
56 virtual	ssize_t		Write(const void *buffer, size_t size) =0;
57 
58 // Private or reserved ----------------------
59 private:
60 
61 virtual	void		_ReservedDataIO1();
62 virtual	void		_ReservedDataIO2();
63 virtual	void		_ReservedDataIO3();
64 virtual	void		_ReservedDataIO4();
65 
66 #if !_PR3_COMPATIBLE_
67 virtual	void		_ReservedDataIO5();
68 virtual	void		_ReservedDataIO6();
69 virtual	void		_ReservedDataIO7();
70 virtual	void		_ReservedDataIO8();
71 virtual	void		_ReservedDataIO9();
72 virtual	void		_ReservedDataIO10();
73 virtual	void		_ReservedDataIO11();
74 virtual	void		_ReservedDataIO12();
75 #endif
76 
77 					BDataIO(const BDataIO &);
78 		BDataIO		&operator=(const BDataIO &);
79 
80 		int32		_reserved[2];
81 };
82 
83 // BPositionIO Class -----------------------------------------------------------
84 
85 class BPositionIO : public BDataIO {
86 public:
87 					BPositionIO();
88 virtual				~BPositionIO();
89 
90 virtual	ssize_t		Read(void *buffer, size_t size);
91 virtual	ssize_t		Write(const void *buffer, size_t size);
92 
93 virtual	ssize_t		ReadAt(off_t pos, void *buffer, size_t size) = 0;
94 virtual	ssize_t		WriteAt(off_t pos, const void *buffer, size_t size) = 0;
95 
96 virtual off_t		Seek(off_t position, uint32 seek_mode) = 0;
97 virtual	off_t		Position() const = 0;
98 
99 virtual status_t	SetSize(off_t size);
100 
101 // Private or reserved ----------------------
102 private:
103 virtual	void		_ReservedPositionIO1();
104 virtual	void		_ReservedPositionIO2();
105 virtual void		_ReservedPositionIO3();
106 virtual void		_ReservedPositionIO4();
107 
108 #if !_PR3_COMPATIBLE_
109 virtual	void		_ReservedPositionIO5();
110 virtual	void		_ReservedPositionIO6();
111 virtual	void		_ReservedPositionIO7();
112 virtual	void		_ReservedPositionIO8();
113 virtual	void		_ReservedPositionIO9();
114 virtual	void		_ReservedPositionIO10();
115 virtual	void		_ReservedPositionIO11();
116 virtual	void		_ReservedPositionIO12();
117 #endif
118 
119 		int32		_reserved[2];
120 };
121 
122 // BMallocIO Class -------------------------------------------------------------
123 
124 class BMallocIO : public BPositionIO {
125 public:
126 					BMallocIO();
127 virtual				~BMallocIO();
128 
129 virtual	ssize_t		ReadAt(off_t pos, void *buffer, size_t size);
130 virtual	ssize_t		WriteAt(off_t pos, const void *buffer, size_t size);
131 
132 virtual	off_t		Seek(off_t pos, uint32 seek_mode);
133 virtual off_t		Position() const;
134 virtual status_t	SetSize(off_t size);
135 
136 		void		SetBlockSize(size_t blocksize);
137 
138 const	void		*Buffer() const;
139 		size_t		BufferLength() const;
140 
141 // Private or reserved ----------------------
142 private:
143 
144 virtual	void		_ReservedMallocIO1();
145 virtual	void		_ReservedMallocIO2();
146 
147 					BMallocIO(const BMallocIO &);
148 		BMallocIO	&operator=(const BMallocIO &);
149 
150 		size_t		fBlockSize;
151 		size_t		fMallocSize;
152 		size_t		fLength;
153 		char		*fData;
154 		off_t		fPosition;
155 		int32		_reserved[1];
156 };
157 
158 // BMemoryIO Class -------------------------------------------------------------
159 
160 class BMemoryIO : public BPositionIO {
161 public:
162 					BMemoryIO(void *p, size_t len);
163 					BMemoryIO(const void *p, size_t len);
164 virtual				~BMemoryIO();
165 
166 virtual	ssize_t		ReadAt(off_t pos, void *buffer, size_t size);
167 virtual	ssize_t		WriteAt(off_t pos, const void *buffer, size_t size);
168 
169 virtual	off_t		Seek(off_t pos, uint32 seek_mode);
170 virtual off_t		Position() const;
171 
172 virtual	status_t	SetSize(off_t size);
173 
174 // Private or reserved ----------------------
175 private:
176 virtual	void		_ReservedMemoryIO1();
177 virtual	void		_ReservedMemoryIO2();
178 
179 					BMemoryIO(const BMemoryIO &);
180 		BMemoryIO	&operator=(const BMemoryIO &);
181 
182 		bool		fReadOnly;
183 		char		*fBuf;
184 		size_t		fLen;
185 		size_t		fPhys;
186 		size_t		fPos;
187 
188 		int32		_reserved[1];
189 };
190 
191 //------------------------------------------------------------------------------
192 
193 #endif // _DATA_IO_H
194 
195 /*
196  * $Log $
197  *
198  * $Id  $
199  *
200  */
201 
202