xml.temp.h

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  * Clean up the namespace
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  * \ingroup Patterns
00023  * XML Writer
00024  *
00025  * Generate code to write/append XML data to a file
00026  *
00027  ****************************************************************************/
00028 
00029 /*
00030  * Make protocol wrapper
00031  */
00032 #define protocol_begin( label )
00033 
00034 /*
00035  * Make enumeration
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  * Make record
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  * Make union xml_write
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 /* Run definitions through translation */
00125 #include ctl_declarations
00126 
00127 /*
00128  * Clean up the namespace 
00129  */
00130 #define UNDEF_ALL
00131 #include "ctl/dg/blank.h"
00132 
00133 #endif /* NO_RECORD_XML_WRITE */
00134 
00135 #ifndef NO_RECORD_XML_READ
00136 /****************************************************************************
00137  * \ingroup Patterns
00138  * XML Reader
00139  *
00140  * Generate code to read XML data from a buffer, such as an XML file mapped
00141  * into memory.
00142  *
00143  ****************************************************************************/
00144 
00145 /*
00146  * Make protocol wrapper
00147  */
00148 #define protocol_begin( label )
00149 
00150 /*
00151  * Make enumeration
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  * Make record
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  * Make union xml_read
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                                                                 /* Unknown type */\
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 /* Run definitions through translation */
00262 #include ctl_declarations
00263 
00264 /*
00265  * Clean up the namespace 
00266  */
00267 #define UNDEF_ALL
00268 #include "ctl/dg/blank.h"
00269 
00270 #endif /* NO_RECORD_XML_READ */
00271 #endif /* NO_RECORD_XML */
00272 

Generated on Fri Jan 2 15:28:35 2009 for Squat by  doxygen 1.5.6