gee_io.h

Go to the documentation of this file.
00001 /* -*- C++ -*- */
00002 
00003 /* COPYRIGHT
00004  *
00005  * This file is part of the Visual Effects Engine - VEE
00006  *
00007  * Read the "VEE-LICENSE" file for the license.
00008  *
00009  * Authors & Copyright:   
00010  *
00011  * Tommi Ilmonen, Tuukka Heikura, Marko Myllymaa and 
00012  * Janne Kontkanen 2001-2004
00013  *
00014  * Additional copyrights: Tekes 2003-2004
00015  *
00016  * firstname.lastname@hut.fi
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   // Utility functions to simplify the usage:
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

Generated on Mon Mar 12 21:09:00 2007 for VEE - The Visual Effects Engine by  doxygen 1.4.6