xref: /haiku/headers/os/support/DataIO.h (revision 0d8b44e25bd0522eabde6baa1b49dff3db643976)
1 /*
2  * Copyright 2005-2014, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _DATA_IO_H
6 #define _DATA_IO_H
7 
8 
9 #include <SupportDefs.h>
10 
11 
12 class BDataIO {
13 public:
14 								BDataIO();
15 	virtual						~BDataIO();
16 
17 	virtual	ssize_t				Read(void* buffer, size_t size);
18 	virtual	ssize_t				Write(const void* buffer, size_t size);
19 
20 			status_t			ReadExactly(void* buffer, size_t size,
21 									size_t* _bytesRead = NULL);
22 			status_t			WriteExactly(const void* buffer, size_t size,
23 									size_t* _bytesWritten = NULL);
24 
25 private:
26 								BDataIO(const BDataIO&);
27 			BDataIO&			operator=(const BDataIO&);
28 
29 	virtual	void				_ReservedDataIO1();
30 	virtual	void				_ReservedDataIO2();
31 	virtual	void				_ReservedDataIO3();
32 	virtual	void				_ReservedDataIO4();
33 	virtual	void				_ReservedDataIO5();
34 	virtual	void				_ReservedDataIO6();
35 	virtual	void				_ReservedDataIO7();
36 	virtual	void				_ReservedDataIO8();
37 	virtual	void				_ReservedDataIO9();
38 	virtual	void				_ReservedDataIO10();
39 	virtual	void				_ReservedDataIO11();
40 	virtual	void				_ReservedDataIO12();
41 
42 private:
43 			uint32				_reserved[2];
44 };
45 
46 
47 class BPositionIO : public BDataIO {
48 public:
49 								BPositionIO();
50 	virtual						~BPositionIO();
51 
52 	// BDataIO interface (implemented via ReadAt/WriteAt)
53 	virtual	ssize_t				Read(void* buffer, size_t size);
54 	virtual	ssize_t				Write(const void* buffer, size_t size);
55 
56 	// BPositionIO interface
57 	virtual	ssize_t				ReadAt(off_t position, void* buffer,
58 									size_t size) = 0;
59 	virtual	ssize_t				WriteAt(off_t position, const void* buffer,
60 									size_t size) = 0;
61 
62 	virtual	off_t				Seek(off_t position, uint32 seekMode) = 0;
63 	virtual	off_t				Position() const = 0;
64 
65 	virtual	status_t			SetSize(off_t size);
66 	virtual	status_t			GetSize(off_t* size) const;
67 
68 private:
69 	virtual	void				_ReservedPositionIO2();
70 	virtual	void				_ReservedPositionIO3();
71 	virtual	void				_ReservedPositionIO4();
72 	virtual	void				_ReservedPositionIO5();
73 	virtual	void				_ReservedPositionIO6();
74 	virtual	void				_ReservedPositionIO7();
75 	virtual	void				_ReservedPositionIO8();
76 	virtual	void				_ReservedPositionIO9();
77 	virtual	void				_ReservedPositionIO10();
78 	virtual	void				_ReservedPositionIO11();
79 	virtual	void				_ReservedPositionIO12();
80 
81 private:
82 			uint32				_reserved[2];
83 };
84 
85 
86 class BMemoryIO : public BPositionIO {
87 public:
88 								BMemoryIO(void* data, size_t length);
89 								BMemoryIO(const void* data, size_t length);
90 	virtual						~BMemoryIO();
91 
92 	virtual	ssize_t				ReadAt(off_t position, void* buffer,
93 									size_t size);
94 	virtual	ssize_t				WriteAt(off_t position, const void* buffer,
95 									size_t size);
96 
97 	virtual	off_t				Seek(off_t position, uint32 seekMode);
98 	virtual off_t				Position() const;
99 
100 	virtual	status_t			SetSize(off_t size);
101 
102 private:
103 								BMemoryIO(const BMemoryIO&);
104 			BMemoryIO&			operator=(const BMemoryIO&);
105 
106 	virtual	void				_ReservedMemoryIO1();
107 	virtual	void				_ReservedMemoryIO2();
108 
109 private:
110 			bool				fReadOnly;
111 			char*				fBuffer;
112 			size_t				fLength;
113 			size_t				fBufferSize;
114 			size_t				fPosition;
115 
116 			uint32				_reserved[1];
117 };
118 
119 
120 class BMallocIO : public BPositionIO {
121 public:
122 								BMallocIO();
123 	virtual						~BMallocIO();
124 
125 	virtual	ssize_t				ReadAt(off_t position, void* buffer,
126 									size_t size);
127 	virtual	ssize_t				WriteAt(off_t position, const void* buffer,
128 									size_t size);
129 
130 	virtual	off_t				Seek(off_t position, uint32 seekMode);
131 	virtual	off_t				Position() const;
132 
133 	virtual	status_t			SetSize(off_t size);
134 
135 	// BMallocIO interface
136 			void				SetBlockSize(size_t blockSize);
137 
138 			const void*			Buffer() const;
139 			size_t				BufferLength() const;
140 
141 private:
142 								BMallocIO(const BMallocIO&);
143 			BMallocIO&			operator=(const BMallocIO&);
144 
145 	virtual	void				_ReservedMallocIO1();
146 	virtual void				_ReservedMallocIO2();
147 
148 private:
149 			size_t				fBlockSize;
150 			size_t				fMallocSize;
151 			size_t				fLength;
152 			char*				fData;
153 			off_t				fPosition;
154 
155 			uint32				_reserved[1];
156 };
157 
158 
159 #endif	// _DATA_IO_H
160