00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GEE_IO_H
00021 #define GEE_IO_H
00022
00023 #include <di_io_defs.h>
00024 #include <di_types.h>
00025
00026 #include <vee_vector2.h>
00027 #include <vee_vector3.h>
00028 #include <vee_vector4.h>
00029
00030 #include <vee_matrix2.h>
00031 #include <vee_matrix3.h>
00032 #include <vee_matrix4.h>
00033
00034 #include <vee_color.h>
00035
00036 #include <stdio.h>
00037
00038 #include <string>
00039
00045 class GEE_Io
00046 {
00047 public:
00048 GEE_Io() {}
00049 virtual ~GEE_Io() {}
00050
00051 virtual long position() = 0;
00052 virtual bool seekPosition(long) = 0;
00053
00054 virtual bool writev(const void *, int) = 0;
00055 virtual bool write1(char) = 0;
00056 virtual bool write2(short) = 0;
00057 virtual bool write4(int) = 0;
00058 virtual bool write4v(const int *, int) = 0;
00059 virtual bool write8(llong) = 0;
00060 virtual bool write8v(const llong *, int) = 0;
00061 virtual bool writeString(const char *) = 0;
00062 virtual bool writeNullTerminatedString(const char *) = 0;
00063
00064 virtual void readv(void *, int) = 0;
00065 virtual char read1() = 0;
00066 virtual short read2() = 0;
00067 virtual int read4() = 0;
00068 virtual void read4v(int *, int) = 0;
00069 virtual llong read8() = 0;
00070 virtual void read8v(llong *, int) = 0;
00072 virtual char *readString() = 0;
00073 virtual char *readNullTerminatedString() = 0;
00074
00075
00076
00077
00078 bool writeByte(char x) { return write1(x); }
00079 bool writeInt16(short x) { return write2(x); }
00080 bool writeInt32(int x) { return write4(x); }
00081 bool writeInt64(llong x) { return write8(x); }
00082 bool writeFloat32(float x) { return write4(* (int *) (&x)); }
00083 bool writeFloat32v(const float *x, int n) { return write4v((int *) x, n); }
00084 bool writeFloat64(double x) { return write8(* (llong *) (&x)); }
00085 bool writeFloat64v(const double *x, int n) { return write8v((llong *) x, n); }
00086
00087 bool writeVector2(const VEE_Vector2 &v) { return write4v((const int *) & v, 2); }
00088 bool writeVector3(const VEE_Vector3 &v) { return write4v((const int *) & v, 3); }
00089 bool writeVector4(const VEE_Vector4 &v) { return write4v((const int *) & v, 4); }
00090
00091 bool writeMatrix2(const VEE_Matrix2 &v) { return write4v((const int *) & v, 4); }
00092 bool writeMatrix3(const VEE_Matrix3 &v) { return write4v((const int *) & v, 9); }
00093 bool writeMatrix4(const VEE_Matrix4 &v) { return write4v((const int *) & v, 16); }
00094 bool writeMatrix4d(const VEE_Matrix4d &v) { return write8v((const llong *) & v[0][0], 16); }
00095
00096 bool writeRgba(const VEE_Rgba &color) { return write4v((const int *) & color, 5); }
00097 bool writeHsva(const VEE_Hsva &color) { return write4v((const int *) & color, 5); }
00098
00099 bool writeStdString(std::string &str) { return writeString(str.c_str()); }
00100
00101 char readByte() { return read1(); }
00102 short readInt16() { return read2(); }
00103 int readInt32() { return read4(); }
00104 llong readInt64() { return read8(); }
00105 float readFloat32() { int x = read4(); return * ((float *) & x); }
00106 void readFloat32v(float *x, int n) { read4v((int *) x, n); }
00107 double readFloat64() { llong x = read8(); return * ((double *) & x); }
00108 void readFloat64v(double *x, int n) { read8v((llong *) x, n); }
00109
00110 VEE_Vector2 readVector2() { VEE_Vector2 v; read4v((int*)&v, 2); return v; }
00111 VEE_Vector3 readVector3() { VEE_Vector3 v; read4v((int*)&v, 3); return v; }
00112 VEE_Vector4 readVector4() { VEE_Vector4 v; read4v((int*)&v, 4); return v; }
00113
00114 VEE_Matrix2 readMatrix2() { VEE_Matrix2 v; read4v((int*)&v, 4); return v; }
00115 VEE_Matrix3 readMatrix3() { VEE_Matrix3 v; read4v((int*)&v, 9); return v; }
00116 VEE_Matrix4 readMatrix4() { VEE_Matrix4 v; read4v((int*)&v, 16); return v; }
00117 VEE_Matrix4d readMatrix4d() { VEE_Matrix4d v; read8v((llong*) &v[0][0], 16); return v; }
00118
00119 VEE_Rgba readRgba() { VEE_Rgba v; read4v((int*)&v, 5); return v; }
00120 VEE_Hsva readHsva() { VEE_Hsva v; read4v((int*)&v, 5); return v; }
00121
00122 void readStdString(std::string &str);
00123 void readNullTerminatedStdString(std::string &str);
00124 };
00125
00128
00129 class GEE_File : public GEE_Io
00130 {
00131 public:
00132 GEE_File();
00133 virtual ~GEE_File();
00134
00135 void setLittleEndian(bool littleEndian) { m_littleEndian = littleEndian; }
00136
00137 bool open(const char *, DI_IoMode mode);
00138 bool close();
00139
00140 virtual long position();
00141 virtual bool seekPosition(long);
00142
00143 virtual bool writev(const void *, int);
00144 virtual bool write1(char);
00145 virtual bool write2(short);
00146 virtual bool write4(int);
00147 virtual bool write4v(const int *, int);
00148 virtual bool write8(llong);
00149 virtual bool write8v(const llong *, int);
00150 virtual bool writeString(const char *);
00151 virtual bool writeNullTerminatedString(const char *);
00152
00153 virtual void readv(void *, int);
00154 virtual char read1();
00155 virtual short read2();
00156 virtual int read4();
00157 virtual void read4v(int *, int);
00158 virtual llong read8();
00159 virtual void read8v(llong *, int);
00160 virtual char *readString();
00161 virtual char *readNullTerminatedString();
00162
00163 static void test(bool littleEndian = true);
00164
00165 protected:
00166
00167 FILE * m_file;
00168 bool m_littleEndian;
00169 };
00170
00173
00174 class GEE_IoPackage
00175 {
00176 public:
00177 std::string m_directory;
00178 GEE_Io * m_io;
00179 int m_version;
00180 };
00181
00182 #endif