Go to the documentation of this file.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
00035
00036
00037
00038
00039 #ifndef __MMDB_IO_Stream__
00040 #define __MMDB_IO_Stream__
00041
00042 #include "mmdb_io_file.h"
00043
00044
00045
00046 #ifndef __ClassMacros
00047
00048 # define __ClassMacros
00049
00050
00051 # define DefineClass(ClassName) \
00052 class ClassName; \
00053 typedef ClassName * P##ClassName; \
00054 typedef ClassName & R##ClassName; \
00055 typedef P##ClassName * PP##ClassName; \
00056 typedef P##ClassName & RP##ClassName;
00057
00058
00059 # define DefineStructure(StructureName) \
00060 struct StructureName; \
00061 typedef StructureName * P##StructureName; \
00062 typedef StructureName & R##StructureName; \
00063 typedef P##StructureName * PP##StructureName; \
00064 typedef P##StructureName & RP##StructureName;
00065
00066 #endif
00067
00068
00069 #define DefineStreamFunctions(ClassName) \
00070 extern void StreamWrite ( mmdb::io::RFile f, RP##ClassName Object ); \
00071 extern void StreamRead ( mmdb::io::RFile f, RP##ClassName Object );
00072
00073
00074 #define MakeStreamFunctions(ClassName) \
00075 void StreamWrite ( mmdb::io::RFile f, RP##ClassName Object ) { \
00076 StreamWrite_ ( f,(mmdb::io::RPStream)Object ); \
00077 } \
00078 mmdb::io::PStream StreamInit##ClassName ( mmdb::io::RPStream Object ) { \
00079 return (mmdb::io::PStream)(new ClassName(Object)); \
00080 } \
00081 void StreamRead ( mmdb::io::RFile f, RP##ClassName Object ) { \
00082 StreamRead_ ( f,(mmdb::io::RPStream)Object,StreamInit##ClassName );\
00083 }
00084
00085 #define DefineFactoryFunctions(ClassName) \
00086 typedef P##ClassName Make##ClassName(); \
00087 typedef Make##ClassName * PMake##ClassName; \
00088 typedef P##ClassName StreamMake##ClassName ( mmdb::io::RPStream Object ); \
00089 P##ClassName new##ClassName (); \
00090 P##ClassName streamNew##ClassName ( mmdb::io::RPStream Object ); \
00091 typedef StreamMake##ClassName * PStreamMake##ClassName; \
00092 extern void SetMakers##ClassName ( void * defMk, void * streamMk ); \
00093 extern void StreamWrite ( mmdb::io::RFile f, RP##ClassName Object ); \
00094 extern void StreamRead ( mmdb::io::RFile f, RP##ClassName Object );
00095
00096
00097 #define MakeFactoryFunctions(ClassName) \
00098 static PMake##ClassName make##ClassName = NULL; \
00099 static PStreamMake##ClassName streamMake##ClassName = NULL; \
00100 P##ClassName new##ClassName() { \
00101 if (make##ClassName) return (*make##ClassName)(); \
00102 else return new ClassName(); \
00103 } \
00104 P##ClassName streamNew##ClassName ( mmdb::io::RPStream Object ) { \
00105 if (streamMake##ClassName) \
00106 return (*streamMake##ClassName)(Object); \
00107 else return new ClassName(Object); \
00108 } \
00109 void SetMakers##ClassName ( void * defMk, void * streamMk ) { \
00110 make##ClassName = PMake##ClassName(defMk); \
00111 streamMake##ClassName = PStreamMake##ClassName(streamMk); \
00112 } \
00113 void StreamWrite ( mmdb::io::RFile f, RP##ClassName Object ) { \
00114 StreamWrite_ ( f,(mmdb::io::RPStream)Object ); \
00115 } \
00116 mmdb::io::PStream StreamInit##ClassName ( mmdb::io::RPStream Object ) { \
00117 return (mmdb::io::PStream)(streamNew##ClassName(Object)); \
00118 } \
00119 void StreamRead ( mmdb::io::RFile f, RP##ClassName Object ) { \
00120 StreamRead_ ( f,(mmdb::io::RPStream)Object,StreamInit##ClassName ); \
00121 }
00122
00123 namespace mmdb {
00124
00125 namespace io {
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 DefineClass(Stream);
00169 DefineStreamFunctions(Stream);
00170
00171 class Stream {
00172 public :
00173 Stream () {}
00174 Stream ( RPStream ) {}
00175 virtual ~Stream () {}
00176 virtual void read ( RFile ) {}
00177 virtual void write ( RFile ) {}
00178 };
00179
00180
00181 typedef PStream InitStreamObject(RPStream Object);
00182
00183 extern void StreamRead_ ( RFile f, RPStream Object,
00184 InitStreamObject Init );
00185
00186 extern void StreamWrite_ ( RFile f, RPStream Object );
00187
00188
00189 }
00190
00191 }
00192
00193 #endif