00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef _DATA_IO_H
00016 #define _DATA_IO_H
00017
00018 #include <BeBuild.h>
00019 #include <SupportDefs.h>
00020
00021 class BMessage;
00022 class BString;
00023
00024 struct meta_info
00025 {
00026 uint32 type;
00027 size_t count;
00028 off_t size;
00029 };
00030
00031
00032
00033
00034 class BDataIO {
00035 public:
00036 BDataIO();
00037 virtual ~BDataIO();
00038
00039 virtual ssize_t Read(void *buffer, size_t size) = 0;
00040 virtual ssize_t Write(const void *buffer, size_t size) =0;
00041
00042
00043
00044 ssize_t WriteMetaData( const char *in_name, type_code in_type,
00045 const void *in_buf, size_t in_size);
00046 ssize_t WriteMetaData( const char *in_name, type_code in_type, int32 in_index,
00047 const void *in_buf, size_t in_size);
00048 ssize_t WriteMetaData( const char *in_name, type_code in_type, int32 in_index,
00049 off_t in_offset, const void *in_buf, size_t in_size);
00050
00051 ssize_t ReadMetaData( const char *in_name, type_code in_type,
00052 void *out_buf, size_t in_size) const;
00053 ssize_t ReadMetaData( const char *in_name, type_code in_type, int32 in_index,
00054 void *out_buf, size_t in_size) const;
00055 ssize_t ReadMetaData( const char *in_name, type_code in_type, int32 in_index,
00056 off_t in_offset, void *out_buf, size_t in_size) const;
00057
00058 status_t RemoveMetaData( const char *in_name);
00059 status_t RemoveMetaData( const char *in_name, int32 in_index);
00060 status_t RemoveAllMetaData();
00061
00062 status_t GetMetaDataInfo( const char *in_name,
00063 meta_info *out_info, BString *out_name = NULL) const;
00064 status_t GetMetaDataInfo( const char *in_name, int32 in_index,
00065 meta_info *out_info, BString *out_name = NULL) const;
00066 status_t GetNextMetaData( void** cookie,
00067 meta_info *out_info, BString *out_name = NULL) const;
00068
00069
00070
00071 virtual ssize_t MetaWrite( const char *in_name, type_code in_type,
00072 int32 in_index, off_t in_offset,
00073 const void *in_buf, size_t in_size);
00074 virtual ssize_t MetaRead( const char *in_name, type_code in_type,
00075 int32 in_index, off_t in_offset,
00076 void *out_buf, size_t in_size) const;
00077 virtual status_t MetaRemove( const char *in_name, int32 in_index);
00078 virtual status_t MetaGetInfo(const char *in_name, int32 in_index,
00079 meta_info *out_info, BString *out_name,
00080 void **inout_cookie) const;
00081
00082
00083 private:
00084
00085 #if !_PR3_COMPATIBLE_
00086 virtual void _ReservedDataIO5();
00087 virtual void _ReservedDataIO6();
00088 virtual void _ReservedDataIO7();
00089 virtual void _ReservedDataIO8();
00090 virtual void _ReservedDataIO9();
00091 virtual void _ReservedDataIO10();
00092 virtual void _ReservedDataIO11();
00093 virtual void _ReservedDataIO12();
00094 #endif
00095
00096 BDataIO(const BDataIO &);
00097 BDataIO &operator=(const BDataIO &);
00098
00099 int32 _reserved[2];
00100 };
00101
00102
00103
00104
00105 class BPositionIO : public BDataIO {
00106 public:
00107 BPositionIO();
00108 virtual ~BPositionIO();
00109
00110 virtual ssize_t Read(void *buffer, size_t size);
00111 virtual ssize_t Write(const void *buffer, size_t size);
00112
00113 virtual ssize_t ReadAt(off_t pos, void *buffer, size_t size) = 0;
00114 virtual ssize_t WriteAt(off_t pos, const void *buffer, size_t size) = 0;
00115
00116 virtual off_t Seek(off_t position, uint32 seek_mode) = 0;
00117 virtual off_t Position() const = 0;
00118
00119 virtual status_t SetSize(off_t size);
00120
00121
00122 private:
00123 virtual void _ReservedPositionIO1();
00124 virtual void _ReservedPositionIO2();
00125 virtual void _ReservedPositionIO3();
00126 virtual void _ReservedPositionIO4();
00127
00128 #if !_PR3_COMPATIBLE_
00129 virtual void _ReservedPositionIO5();
00130 virtual void _ReservedPositionIO6();
00131 virtual void _ReservedPositionIO7();
00132 virtual void _ReservedPositionIO8();
00133 virtual void _ReservedPositionIO9();
00134 virtual void _ReservedPositionIO10();
00135 virtual void _ReservedPositionIO11();
00136 virtual void _ReservedPositionIO12();
00137 #endif
00138
00139 int32 _reserved[2];
00140 };
00141
00142
00143
00144
00145 class BMallocIO : public BPositionIO {
00146 public:
00147 BMallocIO();
00148 BMallocIO(const BMallocIO &);
00149
00150 virtual ~BMallocIO();
00151
00152 BMallocIO &operator=(const BMallocIO &);
00153
00154 bool operator<(const BMallocIO &) const;
00155 bool operator<=(const BMallocIO &) const;
00156 bool operator==(const BMallocIO &) const;
00157 bool operator!=(const BMallocIO &) const;
00158 bool operator>=(const BMallocIO &) const;
00159 bool operator>(const BMallocIO &) const;
00160
00161 virtual ssize_t ReadAt(off_t pos, void *buffer, size_t size);
00162 virtual ssize_t WriteAt(off_t pos, const void *buffer, size_t size);
00163
00164 virtual off_t Seek(off_t pos, uint32 seek_mode);
00165 virtual off_t Position() const;
00166 virtual status_t SetSize(off_t size);
00167
00168 void SetBlockSize(size_t blocksize);
00169
00170 const void *Buffer() const;
00171 size_t BufferLength() const;
00172
00173
00174
00175 const char *AsString() const;
00176
00177 int Compare(const BMallocIO &) const;
00178
00179
00180 private:
00181
00182 virtual void _ReservedMallocIO1();
00183 virtual void _ReservedMallocIO2();
00184
00185 void Copy(const BMallocIO &);
00186
00187 size_t fBlockSize;
00188 size_t fMallocSize;
00189 size_t fLength;
00190 char *fData;
00191 off_t fPosition;
00192 uint32 _reserved[1];
00193 };
00194
00195
00196
00197
00198 class BMemoryIO : public BPositionIO {
00199 public:
00200 BMemoryIO(void *p, size_t len);
00201 BMemoryIO(const void *p, size_t len);
00202 virtual ~BMemoryIO();
00203
00204 virtual ssize_t ReadAt(off_t pos, void *buffer, size_t size);
00205 virtual ssize_t WriteAt(off_t pos, const void *buffer, size_t size);
00206
00207 virtual off_t Seek(off_t pos, uint32 seek_mode);
00208 virtual off_t Position() const;
00209
00210 virtual status_t SetSize(off_t size);
00211
00212
00213 private:
00214 virtual void _ReservedMemoryIO1();
00215 virtual void _ReservedMemoryIO2();
00216
00217 BMemoryIO(const BMemoryIO &);
00218 BMemoryIO &operator=(const BMemoryIO &);
00219
00220 bool fReadOnly;
00221 char *fBuf;
00222 size_t fLen;
00223 size_t fPhys;
00224 size_t fPos;
00225
00226 int32 _reserved[1];
00227 };
00228
00229
00230
00231
00232 inline ssize_t BDataIO::WriteMetaData( const char *in_name, type_code in_type,
00233 const void *in_buf, size_t in_size)
00234 {
00235 return MetaWrite(in_name, in_type, 0, 0, in_buf, in_size);
00236 }
00237
00238 inline ssize_t BDataIO::WriteMetaData( const char *in_name, type_code in_type, int32 in_index,
00239 const void *in_buf, size_t in_size)
00240 {
00241 return MetaWrite(in_name, in_type, in_index, 0, in_buf, in_size);
00242 }
00243
00244 inline ssize_t BDataIO::WriteMetaData( const char *in_name, type_code in_type, int32 in_index,
00245 off_t in_offset, const void *in_buf, size_t in_size)
00246 {
00247 return MetaWrite(in_name, in_type, in_index, in_offset, in_buf, in_size);
00248 }
00249
00250 inline ssize_t BDataIO::ReadMetaData( const char *in_name, type_code in_type,
00251 void *out_buf, size_t in_size) const
00252 {
00253 return MetaRead(in_name, in_type, 0, 0, out_buf, in_size);
00254 }
00255
00256 inline ssize_t BDataIO::ReadMetaData( const char *in_name, type_code in_type, int32 in_index,
00257 void *out_buf, size_t in_size) const
00258 {
00259 return MetaRead(in_name, in_type, in_index, 0, out_buf, in_size);
00260 }
00261
00262 inline ssize_t BDataIO::ReadMetaData( const char *in_name, type_code in_type, int32 in_index,
00263 off_t in_offset, void *out_buf, size_t in_size) const
00264 {
00265 return MetaRead(in_name, in_type, in_index, in_offset, out_buf, in_size);
00266 }
00267
00268 inline status_t BDataIO::RemoveMetaData(const char *in_name)
00269 {
00270 return MetaRemove(in_name, -1);
00271 }
00272
00273 inline status_t BDataIO::RemoveMetaData(const char *in_name, int32 in_index)
00274 {
00275 return MetaRemove(in_name, in_index);
00276 }
00277
00278 inline status_t BDataIO::RemoveAllMetaData()
00279 {
00280 return MetaRemove(NULL, -1);
00281 }
00282
00283 inline status_t BDataIO::GetMetaDataInfo( const char *in_name,
00284 meta_info *out_info, BString *out_name) const
00285 {
00286 return MetaGetInfo(in_name, 0, out_info, out_name, NULL);
00287 }
00288
00289 inline status_t BDataIO::GetMetaDataInfo( const char *in_name, int32 in_index,
00290 meta_info *out_info, BString *out_name) const
00291 {
00292 return MetaGetInfo(in_name, in_index, out_info, out_name, NULL);
00293 }
00294
00295 inline status_t BDataIO::GetNextMetaData( void** cookie,
00296 meta_info *out_info, BString *out_name) const
00297 {
00298 return MetaGetInfo(NULL, -1, out_info, out_name, cookie);
00299 }
00300
00301 inline bool BMallocIO::operator<(const BMallocIO &o) const
00302 {
00303 return Compare(o) < 0;
00304 }
00305
00306 inline bool BMallocIO::operator<=(const BMallocIO &o) const
00307 {
00308 return Compare(o) <= 0;
00309 }
00310
00311 inline bool BMallocIO::operator==(const BMallocIO &o) const
00312 {
00313 return Compare(o) == 0;
00314 }
00315
00316 inline bool BMallocIO::operator!=(const BMallocIO &o) const
00317 {
00318 return Compare(o) != 0;
00319 }
00320
00321 inline bool BMallocIO::operator>=(const BMallocIO &o) const
00322 {
00323 return Compare(o) >= 0;
00324 }
00325
00326 inline bool BMallocIO::operator>(const BMallocIO &o) const
00327 {
00328 return Compare(o) > 0;
00329 }
00330
00331
00332
00333
00334 #endif