00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _PSTRUCTUREDFILE
00035 #define _PSTRUCTUREDFILE
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041
00049 class PStructuredFile : public PFile
00050 {
00051 PCLASSINFO(PStructuredFile, PFile);
00052
00053 private:
00054 PBoolean Read(void * buf, PINDEX len) { return PFile::Read(buf, len); }
00055 PBoolean Write(const void * buf, PINDEX len) { return PFile::Write(buf, len); }
00056
00057 public:
00067 PStructuredFile();
00068
00077 PStructuredFile(
00078 OpenMode mode,
00079 int opts = ModeDefault
00080 );
00081
00088 PStructuredFile(
00089 const PFilePath & name,
00090 OpenMode mode = ReadWrite,
00091 int opts = ModeDefault
00092 );
00094
00104 PBoolean Read(
00105 void * buffer
00106 );
00107
00115 PBoolean Write(
00116 const void * buffer
00117 );
00119
00127 PINDEX GetStructureSize() { return structureSize; }
00128
00130 enum ElementType {
00132 Character,
00134 Integer16,
00136 Integer32,
00138 Integer64,
00140 Float32,
00142 Float64,
00144 Float80,
00145 NumElementTypes
00146 };
00147
00149 struct Element {
00151 ElementType type;
00153 PINDEX count;
00154 };
00155
00157 void SetStructure(
00158 Element * structure,
00159 PINDEX numElements
00160 );
00162
00163 protected:
00164
00166 PINDEX structureSize;
00167
00169 Element * structure;
00170
00172 PINDEX numElements;
00173
00174
00175
00176 #ifdef _WIN32
00177 #include "msos/ptlib/sfile.h"
00178 #else
00179 #include "unix/ptlib/sfile.h"
00180 #endif
00181 };
00182
00183 #endif
00184
00185