00001
00008 #ifndef ctl_declarations
00009 #error The 'ctl_declarations' template parameter was not defined. It should be a string to pass to #include.
00010 #endif
00011
00012
00013
00014
00015 #define UNDEF_ALL
00016 #include "ctl/dg/blank.h"
00017
00018
00019 #ifndef NO_RECORD_XML
00020 #ifndef NO_RECORD_XML_WRITE
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #define protocol_begin( label )
00033
00034
00035
00036
00037 #define enum_begin( label ) void ppConcat(label,_xml_write)( const label* self, ctl_xmlwrite* xml, const char* szlabel ) \
00038 {\
00039 assertobjconst(self);\
00040 assertobjptr(xml);\
00041 ctl_xmlwrite_generaltag( xml, szconst(char,#label), szlabel );\
00042 ctl_xmlwrite_string_char( xml, enum_itemname(label,*self), NULL );\
00043 ctl_xmlwrite_endtag( xml, szconst(char,#label), szlabel );\
00044 }
00045 #define enum_item( label )
00046 #define enum_end( label )
00047
00048
00049
00050
00051 #define record_begin(label) void ppConcat(label,_xml_write)( const label* self, ctl_xmlwrite* xml, const char* szlabel ) \
00052 {\
00053 assertobjconst(self);\
00054 assertobjptr(xml);\
00055 ctl_xmlwrite_generaltag( xml, #label, szlabel?szlabel:#label);\
00056 ctl_xmlwrite_indent( xml );
00057 #define record_var(label,type,val) ppConcat(type,_xml_write)( &self->label, xml, #label );
00058 #define record_varok(label,type,val,min,max) ppConcat(type,_xml_write)( &self->label, xml, #label );
00059 #define record_array(label,type,alen,val) ppConcat(type,_xml_write_array)(self->label, alen, xml, #label );
00060 #define record_arrayok(label,type,alen,val,min,max) ppConcat(type,_xml_write_array)(self->label, alen, xml, #label );
00061 #define record_objarray(label,type,alen) { \
00062 ctl_xmlwrite_containertag( xml, #type, alen, #label ); \
00063 ctl_xmlwrite_indent( xml );\
00064 {\
00065 array_foreach_const(type,self->label, curr ) \
00066 ppConcat(type,_xml_write)(curr,xml,NULL);\
00067 } \
00068 ctl_xmlwrite_outdent( xml );\
00069 ctl_xmlwrite_endtag( xml, #type, #label ); \
00070 }
00071 #define record_achar(label,type,alen,val) ppConcat(type,_xml_write_string)( self->label, (alen), xml, #label );
00072 #define record_string(label,type) ppConcat(type,_xml_write_string)( self->label.begin, ctl_gstring_size(type, &self->label), xml, #label );
00073 #define record_obj(label,type) ppConcat(type,_xml_write)(&self->label,xml,#label);
00074 #define record_ref(label,type) if( self->label ) ppConcat(type,_xml_write)(self->label,xml,#label);
00075 #define record_preref(label,type) record_ref(label,type)
00076 #define record_enum(label,enum,val) ppConcat(enum,_xml_write)( &self->label, xml, #label );
00077 #define record_serial(label) raw_xml_writebytes( &self->label, xml, #label );
00078 #define record_serialref(label) record_serial(label)
00079 #define record_member(stuff)
00080 #define record_atinit(stuff)
00081 #define record_atdestroy(stuff)
00082 #define record_atcopy(stuff)
00083 #define record_atmove(stuff)
00084 #define record_atswap(stuff)
00085 #define record_end(label) ctl_xmlwrite_outdent( xml );\
00086 ctl_xmlwrite_endtag( xml, #label, szlabel?szlabel:#label );\
00087 }
00088 #define record_alias(label,type)
00089
00090
00091
00092
00093 #define union_begin(label,etype) void ppConcat(label,_xml_write)( const label* self, ctl_xmlwrite* xml, const char* szlabel ) \
00094 {\
00095 assertobjconst(self);\
00096 assertobjptr(xml);\
00097 ctl_xmlwrite_generaltag( xml, #label, szlabel?szlabel:#label);\
00098 ctl_xmlwrite_indent( xml );\
00099 ppConcat(etype,_xml_write)( &self->type, xml, "type" );\
00100 switch( self->type )\
00101 {
00102 #define union_alias(type,enum) case enum:
00103 #define union_member(label,type,enum) case enum:\
00104 ppConcat(type,_xml_write)(&self->obj.label,xml,#label);\
00105 break;
00106 #define union_end(label,etype) default:\
00107 throwassert(ppTokStr(ppConcat(label,_xml_write)) ":Unknown type");\
00108 return;\
00109 }\
00110 ctl_xmlwrite_outdent( xml );\
00111 ctl_xmlwrite_endtag( xml, #label, szlabel?szlabel:#label );\
00112 }
00113
00114 #define container_array(label,type,size)
00115 #define container_vector(label,type)
00116 #define container_list( label, type )
00117 #define container_map( label, keytype, type )
00118 #define container_multimap( label, keytype, type )
00119 #define container_set( label, type )
00120 #define container_multiset( label, type )
00121
00122 #define protocol_end( label )
00123
00124
00125 #include ctl_declarations
00126
00127
00128
00129
00130 #define UNDEF_ALL
00131 #include "ctl/dg/blank.h"
00132
00133 #endif
00134
00135 #ifndef NO_RECORD_XML_READ
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 #define protocol_begin( label )
00149
00150
00151
00152
00153 #define enum_begin( label ) bool ppConcat(label,_xml_read)( label* self, ctl_xmlread* xml, const char* szlabel ) \
00154 {\
00155 assertobjptr(self);\
00156 assertobjptr(xml);\
00157 if( ctl_xmlread_find( xml, szlabel ) )\
00158 {\
00159 ctl_sconst(char) body;\
00160 ctl_xmlread_rawcontent( xml, &body, true );\
00161 ctl_sconst_getenum(char, &body, (int*)self, enum_itemnames( label ) );\
00162 return true;\
00163 }\
00164 return false;\
00165 }
00166 #define enum_item( label )
00167 #define enum_end( label )
00168
00169
00170
00171
00172 #define record_begin(label) bool ppConcat(label,_xml_read)( label* self, struct ctl_xmlread* xml, const char* szlabel ) \
00173 {\
00174 assertobjptr(self);\
00175 assertobjptr(xml);\
00176 if( NULL != szlabel ? ctl_xmlread_find( xml, szlabel ) : ctl_xmlread_is( xml, #label ) )\
00177 {\
00178 ctl_xmlread in;\
00179 ctl_xmlread_recurse(&in, xml);
00180 #define record_var(label,type,val) ppConcat(type,_xml_read)( &self->label, &in, #label );
00181 #define record_varok(label,type,val,min,max) ppConcat(type,_xml_read)( &self->label, &in, #label );
00182 #define record_array(label,type,alen,val) ppConcat(type,_xml_read_array)( self->label, alen, &in, #label );
00183 #define record_arrayok(label,type,alen,val,min,max) ppConcat(type,_xml_read_array)( self->label, alen, &in, #label );
00184 #define record_objarray(label,type,alen) {\
00185 type* ptr = self->label;\
00186 int count = (int)alen;\
00187 if( ctl_xmlread_find( &in, #label ) )\
00188 {\
00189 ctl_xmlread arraydata;\
00190 ctl_xmlread_recurse(&arraydata,&in);\
00191 while( count-- && ppConcat(type,_xml_read)( ptr, &arraydata, NULL ) )\
00192 {\
00193 ctl_xmlread_next(&arraydata);\
00194 ptr++;\
00195 }\
00196 }\
00197 }
00198 #define record_achar(label,type,alen,val) ppConcat(type,_xml_read_string)( self->label, alen, &in, #label );
00199 #define record_string(label,type) ppConcat(type,_xml_read_gstring)( &self->label, &in, #label );
00200 #define record_obj(label,type) ppConcat(type,_xml_read)( &self->label, &in, #label );
00201 #define record_ref(label,type) if( ctl_xmlread_find( &in, #label ) ) \
00202 {\
00203 ctl_delete(self->label);\
00204 ctl_new(self->label,type);\
00205 ppConcat(type,_xml_read)( self->label, &in, #label );\
00206 }
00207 #define record_preref(label,type) record_ref(label,type)
00208 #define record_enum(label,enum,val) ppConcat(enum,_xml_read)( &self->label, &in, #label );
00209 #define record_serial(label) raw_xml_readbytes( &self->label, &in, #label ); ctl_serial_deref(&self->label);
00210 #define record_serialref(label) raw_xml_readbytes( &self->label, &in, #label );
00211 #define record_member(stuff)
00212 #define record_atinit(stuff)
00213 #define record_atdestroy(stuff)
00214 #define record_atcopy(stuff)
00215 #define record_atmove(stuff)
00216 #define record_atswap(stuff)
00217 #define record_end(label) return true;\
00218 }\
00219 return false;\
00220 }
00221 #define record_alias(label,type)
00222
00223
00224
00225
00226 #define union_begin(label,etype) bool ppConcat(label,_xml_read)( label* self, ctl_xmlread* xml, const char* szlabel ) \
00227 {\
00228 assertobjptr(self);\
00229 assertobjptr(xml);\
00230 if( NULL != szlabel ? ctl_xmlread_find( xml, szlabel ) : ctl_xmlread_is( xml, #label ) )\
00231 {\
00232 ctl_xmlread in;\
00233 ctl_xmlread_recurse(&in, xml);\
00234 ppConcat(etype,_xml_read)( &self->type, &in, "type" );\
00235 switch( self->type )\
00236 {
00237 #define union_alias(type,enum) case enum:
00238 #define union_member(label,type,enum) case enum:\
00239 ppConcat(type,_xml_read)( &self->obj.label, &in, #label );\
00240 break;
00241 #define union_end(label,etype) default:\
00242 \
00243 throwassert(ppTokStr(ppConcat(label,_xml_read)) ":Unknown type");\
00244 return false;\
00245 }\
00246 return true;\
00247 }\
00248 return false;\
00249 }
00250
00251 #define container_array(label,type,size)
00252 #define container_vector(label,type)
00253 #define container_list( label, type )
00254 #define container_map( label, keytype, type )
00255 #define container_multimap( label, keytype, type )
00256 #define container_set( label, type )
00257 #define container_multiset( label, type )
00258
00259 #define protocol_end( label )
00260
00261
00262 #include ctl_declarations
00263
00264
00265
00266
00267 #define UNDEF_ALL
00268 #include "ctl/dg/blank.h"
00269
00270 #endif
00271 #endif
00272