DataIO.h

Go to the documentation of this file.
00001 /******************************************************************************
00002 /
00003 /   File:           DataIO.h
00004 /
00005 /   Description:    Pure virtual BDataIO and BPositioIO classes provide
00006 /                   the protocol for Read()/Write()/Seek().
00007 /
00008 /                   BMallocIO and BMemoryIO classes implement the protocol,
00009 /                   as does BFile in the Storage Kit.
00010 /
00011 /   Copyright 1993-98, Be Incorporated
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 /*------- BDataIO Class -------------------------------------------*/
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 /*----- Public meta data API ---------------*/
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 /*----- Implementor's meta data API ---------------*/
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 /*----- Private or reserved ---------------*/
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 /*------- BPositionIO Class -------------------------------------------*/
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 /*----- Private or reserved ---------------*/
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 /*------- BMallocIO Class -------------------------------------------*/
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         // Return Buffer(), ensuring it is \0-terminated.
00174         // (Termination not included in the string/buffer length.)
00175 const   char        *AsString() const;
00176 
00177         int         Compare(const BMallocIO &) const;
00178 
00179 /*----- Private or reserved ---------------*/
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 /*------- BMemoryIO Class -------------------------------------------*/
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 /*----- Private or reserved ---------------*/
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 /*---- No user serviceable parts after this -------------------*/
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 /* _DATA_IO_H */

Copyright 2005 by yellowTAB GmbH, Be Inc., Palm Source Inc. and their respective legal successors
All rights reserved.