00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef STORE_H
00022 #define STORE_H
00023
00024 #include "common.h"
00025 #include "global.h"
00026 #include "htdata.h"
00027
00028 typedef Object *(*object_builder)();
00029
00030 class ht_stream;
00031
00032 #include "stream.h"
00033
00034 class ht_object_stream_inter: public ht_object_stream {
00035 public:
00036 virtual Object *getObject(char *name);
00037 virtual void getObject(Object *&o, char *name);
00038 virtual void putObject(Object *obj, char *name);
00039 };
00040
00041 class ht_object_stream_bin: public ht_object_stream_inter {
00042 public:
00043 void init(ht_stream *s);
00044
00045 virtual void *getBinary(int size, char *desc);
00046 virtual void getBinary(void *p, int size, char *desc);
00047 virtual bool getBool(char *desc);
00048 virtual int getIntDec(int size, char *desc);
00049 virtual int getIntHex(int size, char *desc);
00050 virtual qword getQWordDec(int size, char *desc);
00051 virtual qword getQWordHex(int size, char *desc);
00052 virtual void getSeparator();
00053 virtual char *getString(char *desc);
00054 virtual void putBinary(void *mem, int size, char *desc);
00055 virtual void putBool(bool b, char *desc);
00056 virtual void putInfo(char *info);
00057 virtual void putIntDec(int a, int size, char *desc);
00058 virtual void putIntHex(int a, int size, char *desc);
00059 virtual void putQWordDec(qword a, int size, char *desc);
00060 virtual void putQWordHex(qword a, int size, char *desc);
00061 virtual void putSeparator();
00062 virtual void putString(char *string, char *desc);
00063 };
00064
00065 class ht_object_stream_txt: public ht_object_stream_inter {
00066 protected:
00067 char cur;
00068 int line;
00069 int errorline;
00070 int indent;
00071 public:
00072
00073 void init(ht_stream *s);
00074
00075 virtual void *getBinary(int size, char *desc);
00076 virtual void getBinary(void *p, int size, char *desc);
00077 virtual bool getBool(char *desc);
00078 virtual int getIntDec(int size, char *desc);
00079 virtual int getIntHex(int size, char *desc);
00080 virtual qword getQWordDec(int size, char *desc);
00081 virtual qword getQWordHex(int size, char *desc);
00082 virtual void getObject(Object *&o, char *name);
00083 virtual void getSeparator();
00084 virtual char *getString(char *desc);
00085 virtual void putBinary(void *mem, int size, char *desc);
00086 virtual void putBool(bool b, char *desc);
00087 virtual void putInfo(char *info);
00088 virtual void putIntDec(int a, int size, char *desc);
00089 virtual void putIntHex(int a, int size, char *desc);
00090 virtual void putQWordDec(qword a, int size, char *desc);
00091 virtual void putQWordHex(qword a, int size, char *desc);
00092 virtual void putObject(Object *obj, char *name);
00093 virtual void putSeparator();
00094 virtual void putString(char *string, char *desc);
00095
00096 void setSyntaxError();
00097 int getErrorLine();
00098 private:
00099
00100 void expect(char c);
00101 void skipWhite();
00102 char readChar();
00103 void readDesc(char *desc);
00104
00105
00106 void putDesc(char *desc);
00107 void putIndent();
00108 void putChar(char c);
00109 void putS(char *s);
00110 };
00111
00112
00113
00114
00115
00116
00117 class ht_object_stream_memmap: public ht_object_stream_bin {
00118 protected:
00119 bool duplicate;
00120 ht_clist *allocd;
00121
00122 void *duppa(void *p, int size);
00123 public:
00124 void init(ht_stream *s, bool duplicate);
00125 virtual void done();
00126 virtual void *getBinary(int size, char *desc);
00127 virtual void getBinary(void *p, int size, char *desc);
00128 virtual int getIntDec(int size, char *desc);
00129 virtual int getIntHex(int size, char *desc);
00130 virtual qword getQWordDec(int size, char *desc);
00131 virtual qword getQWordHex(int size, char *desc);
00132 virtual char *getString(char *desc);
00133 virtual UINT recordStart(UINT size);
00134 virtual void recordEnd(UINT);
00135 virtual void putBinary(void *mem, int size, char *desc);
00136 virtual void putIntDec(int a, int size, char *desc);
00137 virtual void putIntHex(int a, int size, char *desc);
00138 virtual void putQWordDec(qword a, int size, char *desc);
00139 virtual void putQWordHex(qword a, int size, char *desc);
00140 virtual void putString(char *string, char *desc);
00141 };
00142
00143 #endif