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 #ifndef FILE_FILE_HPP
00026 #define FILE_FILE_HPP
00027
00028 #ifndef __STDIO_H
00029 # include <stdio.h>
00030 #endif
00031
00032
00033 class ICFile
00034 {
00035 public:
00036 enum StringFlag
00037 {
00038 strUcs2=32,
00039 strLen8 = 1, strLen16 = 2, strLen32 = 3, strLenMask =3
00040 };
00041 virtual ~ICFile() {};
00042 virtual void Seek(long offset,int whence=SEEK_SET) const=0;
00043
00044
00045 virtual char *ReadString() const=0;
00046 virtual char *ReadStringFlag(unsigned flag) const=0;
00047 virtual long Tell() const =0;
00048 virtual void RawRead(void *ptr,size_t size) const=0;
00049 virtual void RawWrite(const void *ptr,size_t size)=0;
00050 };
00051
00052
00053 class CFile:public ICFile
00054 {
00055 public:
00056 CFile(const char* filename,const char* mode);
00057 ~CFile();
00058 void Seek(long offset,int whence=SEEK_SET) const;
00059 char *ReadString() const;
00060 char *ReadStringFlag(unsigned flag) const;
00061 long Tell() const;
00062 void RawRead(void *ptr,size_t size) const;
00063 void RawWrite(const void *ptr,size_t size);
00064 FILE *GetFile() { return file; };
00065 private:
00066 void Close();
00067 FILE* file;
00068 };
00069
00070 template <class T>
00071 inline void RawRead(ICFile& file,T& x)
00072 {
00073 file.RawRead(&x,sizeof(T));
00074 }
00075
00076 template <class T>
00077 inline void RawWrite(ICFile& file,const T& x)
00078 {
00079 file.RawWrite(&x,sizeof(T));
00080 }
00081
00082 #endif // FILE_FILE_HPP