7 #ifndef TEMPLATESOURCE_H 8 #define TEMPLATESOURCE_H 30 #define TEMPLATE_DEFINITION_INT(MEMBER, TYPE) TYPE m_##MEMBER; 31 #define TEMPLATE_DEFINITION_BUFFER(MEMBER, TYPE) TYPE m_##MEMBER; 32 #define TEMPLATE_DEFINITION_LIST(MEMBER) struct list_head m_##MEMBER; 33 #define TEMPLATE_DEFINITION_OBJECT(MEMBER, TYPE) TYPE *m_##MEMBER; 34 #define TEMPLATE_DEFINITION_STRING(MEMBER) UpnpString *m_##MEMBER; 35 #define TEMPLATE_DEFINITION_DOMSTRING(MEMBER) DOMString m_##MEMBER; 38 #define TEMPLATE_CONSTRUCTOR_INT(MEMBER, TYPE) 39 #define TEMPLATE_CONSTRUCTOR_BUFFER(MEMBER, TYPE) \ 41 #define TEMPLATE_CONSTRUCTOR_LIST(MEMBER, TYPE) INIT_LIST_HEAD(&p->m_##MEMBER); 42 #define TEMPLATE_CONSTRUCTOR_OBJECT(MEMBER, TYPE) p->m_##MEMBER = TYPE##_new(); 43 #define TEMPLATE_CONSTRUCTOR_STRING(MEMBER) p->m_##MEMBER = UpnpString_new(); 44 #define TEMPLATE_CONSTRUCTOR_DOMSTRING(MEMBER) p->m_##MEMBER = NULL; 47 #define TEMPLATE_DESTRUCTOR_INT(MEMBER, TYPE) p->m_##MEMBER = 0; 48 #define TEMPLATE_DESTRUCTOR_BUFFER(MEMBER, TYPE) memset(&p->m_##MEMBER, 0, sizeof (TYPE)); 49 #define TEMPLATE_DESTRUCTOR_LIST(MEMBER) list_del(&p->m_##MEMBER); 50 #define TEMPLATE_DESTRUCTOR_OBJECT(MEMBER, TYPE) TYPE##_delete(p->m_##MEMBER); p->m_##MEMBER = NULL; 51 #define TEMPLATE_DESTRUCTOR_STRING(MEMBER) UpnpString_delete(p->m_##MEMBER); p->m_##MEMBER = NULL; 52 #define TEMPLATE_DESTRUCTOR_DOMSTRING(MEMBER) ixmlFreeDOMString(p->m_##MEMBER); p->m_##MEMBER = NULL; 55 #define TEMPLATE_ASSIGNMENT(CLASS, MEMBER) ok = ok && CLASS##_set_##MEMBER(p, CLASS##_get_##MEMBER(q)); 59 #define TEMPLATE_METHODS_INT(CLASS, MEMBER, TYPE) \ 60 TEMPLATE_METHODS_INT_AUX(CLASS, MEMBER, TYPE) 61 #define TEMPLATE_METHODS_INT_AUX(CLASS, MEMBER, TYPE) \ 62 TYPE CLASS##_get_##MEMBER(const CLASS *p) \ 64 return ((struct S##CLASS *)p)->m_##MEMBER; \ 67 int CLASS##_set_##MEMBER(CLASS *p, TYPE n) \ 69 ((struct S##CLASS *)p)->m_##MEMBER = n; \ 75 #define TEMPLATE_METHODS_BUFFER(CLASS, MEMBER, TYPE) \ 76 TEMPLATE_METHODS_BUFFER_AUX(CLASS, MEMBER, TYPE) 77 #define TEMPLATE_METHODS_BUFFER_AUX(CLASS, MEMBER, TYPE) \ 78 const TYPE *CLASS##_get_##MEMBER(const CLASS *p) \ 80 return (TYPE *)&((struct S##CLASS *)p)->m_##MEMBER; \ 83 int CLASS##_set_##MEMBER(CLASS *p, const TYPE *buf) \ 85 ((struct S##CLASS *)p)->m_##MEMBER = *(TYPE *)buf; \ 89 void CLASS##_clear_##MEMBER(CLASS *p) \ 91 memset(&((struct S##CLASS *)p)->m_##MEMBER, 0, sizeof(TYPE)); \ 96 #define TEMPLATE_METHODS_LIST(CLASS, MEMBER) \ 97 TEMPLATE_METHODS_LIST_AUX(CLASS, MEMBER) 98 #define TEMPLATE_METHODS_LIST_AUX(CLASS, MEMBER) \ 99 const struct list_head *CLASS##_get_##MEMBER(const CLASS *p) \ 101 return (struct list_head *)&((struct S##CLASS *)p)->m_##MEMBER; \ 104 void CLASS##_add_to_list_##MEMBER(CLASS *p, struct list_head *head) \ 106 list_add(&((struct S##CLASS *)p)->m_##MEMBER, head); \ 109 void CLASS##_remove_from_list_##MEMBER(CLASS *p) \ 111 list_del_init(&((struct S##CLASS *)p)->m_##MEMBER); \ 114 void CLASS##_replace_in_list_##MEMBER(CLASS *p, struct list_head *new) \ 116 list_replace_init(&((struct S##CLASS *)p)->m_##MEMBER, new); \ 121 #define TEMPLATE_METHODS_OBJECT(CLASS, MEMBER, TYPE) \ 122 TEMPLATE_METHODS_OBJECT_AUX(CLASS, MEMBER, TYPE) 123 #define TEMPLATE_METHODS_OBJECT_AUX(CLASS, MEMBER, TYPE) \ 124 const TYPE *CLASS##_get_##MEMBER(const CLASS *p) \ 126 return ((struct S##CLASS *)p)->m_##MEMBER; \ 129 int CLASS##_set_##MEMBER(CLASS *p, const TYPE *s) \ 131 TYPE *q = TYPE##_dup(s); \ 133 TYPE##_delete(((struct S##CLASS *)p)->m_##MEMBER); \ 134 ((struct S##CLASS *)p)->m_##MEMBER = q; \ 140 #define TEMPLATE_METHODS_STRING(CLASS, MEMBER) \ 141 TEMPLATE_METHODS_STRING_AUX(CLASS, MEMBER) 142 #define TEMPLATE_METHODS_STRING_AUX(CLASS, MEMBER) \ 143 const UpnpString *CLASS##_get_##MEMBER(const CLASS *p) \ 145 return ((struct S##CLASS *)p)->m_##MEMBER; \ 148 int CLASS##_set_##MEMBER(CLASS *p, const UpnpString *s) \ 150 const char *q = UpnpString_get_String(s); \ 151 return UpnpString_set_String(((struct S##CLASS *)p)->m_##MEMBER, q); \ 154 size_t CLASS##_get_##MEMBER##_Length(const CLASS *p) \ 156 return UpnpString_get_Length(CLASS##_get_##MEMBER(p)); \ 158 const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p) \ 160 return UpnpString_get_String(CLASS##_get_##MEMBER(p)); \ 163 int CLASS##_strcpy_##MEMBER(CLASS *p, const char *s) \ 165 return UpnpString_set_String(((struct S##CLASS *)p)->m_##MEMBER, s); \ 168 int CLASS##_strncpy_##MEMBER(CLASS *p, const char *s, size_t n) \ 170 return UpnpString_set_StringN(((struct S##CLASS *)p)->m_##MEMBER, s, n); \ 173 void CLASS##_clear_##MEMBER(CLASS *p) \ 175 UpnpString_clear(((struct S##CLASS *)p)->m_##MEMBER); \ 180 #define TEMPLATE_METHODS_DOMSTRING(CLASS, MEMBER) \ 181 TEMPLATE_METHODS_DOMSTRING_AUX(CLASS, MEMBER) 182 #define TEMPLATE_METHODS_DOMSTRING_AUX(CLASS, MEMBER) \ 183 const DOMString CLASS##_get_##MEMBER(const CLASS *p) \ 185 return ((struct S##CLASS *)p)->m_##MEMBER; \ 188 int CLASS##_set_##MEMBER(CLASS *p, const DOMString s) \ 190 DOMString q = ixmlCloneDOMString(s); \ 192 ixmlFreeDOMString(((struct S##CLASS *)p)->m_##MEMBER); \ 193 ((struct S##CLASS *)p)->m_##MEMBER = q; \ 197 const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p) \ 199 return (const char *)CLASS##_get_##MEMBER(p); \ 215 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_INT(MEMBER, TYPE) 216 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_BUFFER(MEMBER, TYPE) 217 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) TEMPLATE_DEFINITION_LIST(MEMBER) 218 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_OBJECT(MEMBER, TYPE) 219 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_DEFINITION_STRING(MEMBER) 220 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_DEFINITION_DOMSTRING(MEMBER) 222 #define TEMPLATE_DECLARATION_STRUCT(CLASS) \ 223 TEMPLATE_DECLARATION_STRUCT_AUX(CLASS) 224 #define TEMPLATE_DECLARATION_STRUCT_AUX(CLASS) \ 226 EXPAND_CLASS_MEMBERS(CLASS) \ 231 #include "TemplateUndef.h" 234 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_INT(MEMBER, TYPE) 235 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_BUFFER(MEMBER, TYPE) 236 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) TEMPLATE_CONSTRUCTOR_LIST(MEMBER, MEMBER) 237 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_OBJECT(MEMBER, TYPE) 238 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_CONSTRUCTOR_STRING(MEMBER) 239 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_CONSTRUCTOR_DOMSTRING(MEMBER) 241 #define TEMPLATE_DEFINITION_CONSTRUCTOR(CLASS) \ 242 TEMPLATE_DEFINITION_CONSTRUCTOR_AUX(CLASS) 243 #define TEMPLATE_DEFINITION_CONSTRUCTOR_AUX(CLASS) \ 244 CLASS *CLASS##_new() \ 246 struct S##CLASS *p = calloc(1, sizeof (struct S##CLASS)); \ 248 if (!p) return NULL; \ 250 EXPAND_CLASS_MEMBERS(CLASS) \ 255 TEMPLATE_DEFINITION_CONSTRUCTOR(
CLASS)
257 #include "TemplateUndef.h" 260 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_INT(MEMBER, TYPE) 261 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_BUFFER(MEMBER, TYPE) 262 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) TEMPLATE_DESTRUCTOR_LIST(MEMBER) 263 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_OBJECT(MEMBER, TYPE) 264 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_DESTRUCTOR_STRING(MEMBER) 265 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_DESTRUCTOR_DOMSTRING(MEMBER) 267 #define TEMPLATE_DEFINITION_DESTRUCTOR(CLASS) \ 268 TEMPLATE_DEFINITION_DESTRUCTOR_AUX(CLASS) 269 #define TEMPLATE_DEFINITION_DESTRUCTOR_AUX(CLASS) \ 270 void CLASS##_delete(CLASS *q) \ 272 struct S##CLASS *p = (struct S##CLASS *)q; \ 276 EXPAND_CLASS_MEMBERS(CLASS) \ 281 TEMPLATE_DEFINITION_DESTRUCTOR(
CLASS)
283 #include "TemplateUndef.h" 286 #define TEMPLATE_DEFINITION_COPY_CONSTRUCTOR(CLASS) \ 287 TEMPLATE_DEFINITION_COPY_CONSTRUCTOR_AUX(CLASS) 288 #define TEMPLATE_DEFINITION_COPY_CONSTRUCTOR_AUX(CLASS) \ 289 CLASS *CLASS##_dup(const CLASS *q) \ 291 CLASS *p = CLASS##_new(); \ 293 if (!p) return NULL; \ 295 CLASS##_assign(p, q); \ 300 TEMPLATE_DEFINITION_COPY_CONSTRUCTOR(
CLASS)
303 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER) 304 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER) 305 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) 306 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER) 307 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_ASSIGNMENT(CLASS, MEMBER) 308 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_ASSIGNMENT(CLASS, MEMBER) 310 #define TEMPLATE_DEFINITION_ASSIGNMENT(CLASS) \ 311 TEMPLATE_DEFINITION_ASSIGNMENT_AUX(CLASS) 312 #define TEMPLATE_DEFINITION_ASSIGNMENT_AUX(CLASS) \ 313 int CLASS##_assign(CLASS *p, const CLASS *q) \ 317 EXPAND_CLASS_MEMBERS(CLASS) \ 322 TEMPLATE_DEFINITION_ASSIGNMENT(
CLASS)
324 #include "TemplateUndef.h" 327 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_INT(CLASS, MEMBER, TYPE) 328 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_BUFFER(CLASS, MEMBER, TYPE) 329 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) TEMPLATE_METHODS_LIST(CLASS, MEMBER) 330 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_OBJECT(CLASS, MEMBER, TYPE) 331 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_METHODS_STRING(CLASS, MEMBER) 332 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_METHODS_DOMSTRING(CLASS, MEMBER) 334 EXPAND_CLASS_MEMBERS(
CLASS)
336 #include "TemplateUndef.h" struct s_CLASS CLASS
Definition: TemplateInclude.h:138