libUPnP  1.8.1
TemplateInclude.h
Go to the documentation of this file.
1 /*
2  * C Template objects.
3  *
4  * Copyright (C) 2010 Marcelo Roberto Jimenez <mroberto@users.sourceforge.net>
5  */
6 
7 #ifndef TEMPLATEINCLUDE_H
8 #define TEMPLATEINCLUDE_H
9 
10 
30 /******************************************************************************/
31 #define TEMPLATE_PROTOTYPE_COMMON(CLASS) \
32  TEMPLATE_PROTOTYPE_COMMON_AUX(CLASS)
33 #define TEMPLATE_PROTOTYPE_COMMON_AUX(CLASS) \
34  \
37  typedef struct s_##CLASS CLASS; \
38  \
39  \
40  EXPORT_SPEC CLASS *CLASS##_new(); \
41  \
42  \
43  EXPORT_SPEC void CLASS##_delete(CLASS *p); \
44  \
45  \
46  EXPORT_SPEC CLASS *CLASS##_dup(const CLASS *p); \
47  \
48  \
49  EXPORT_SPEC int CLASS##_assign(CLASS *p, const CLASS *q); \
50 
51 
52 /******************************************************************************/
53 #define TEMPLATE_PROTOTYPE_INT(CLASS, MEMBER, TYPE) \
54  TEMPLATE_PROTOTYPE_INT_AUX(CLASS, MEMBER, TYPE)
55 #define TEMPLATE_PROTOTYPE_INT_AUX(CLASS, MEMBER, TYPE) \
56  \
57  EXPORT_SPEC TYPE CLASS##_get_##MEMBER(const CLASS *p); \
58  EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, TYPE n); \
59 
60 
61 /******************************************************************************/
62 #define TEMPLATE_PROTOTYPE_BUFFER(CLASS, MEMBER, TYPE) \
63  TEMPLATE_PROTOTYPE_BUFFER_AUX(CLASS, MEMBER, TYPE)
64 #define TEMPLATE_PROTOTYPE_BUFFER_AUX(CLASS, MEMBER, TYPE) \
65  \
66  EXPORT_SPEC const TYPE *CLASS##_get_##MEMBER(const CLASS *p); \
67  EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const TYPE *buf); \
68  EXPORT_SPEC void CLASS##_clear_##MEMBER(CLASS *p); \
69 
70 
71 /******************************************************************************/
72 #define TEMPLATE_PROTOTYPE_LIST(CLASS, MEMBER) \
73  TEMPLATE_PROTOTYPE_LIST_AUX(CLASS, MEMBER)
74 #define TEMPLATE_PROTOTYPE_LIST_AUX(CLASS, MEMBER) \
75  \
76  EXPORT_SPEC const struct list_head *CLASS##_get_##MEMBER(const CLASS *p); \
77  EXPORT_SPEC void CLASS##_add_to_list_##MEMBER(CLASS *p, struct list_head *head); \
78  EXPORT_SPEC void CLASS##_remove_from_list_##MEMBER(CLASS *p); \
79  EXPORT_SPEC void CLASS##_replace_in_list_##MEMBER(CLASS *p, struct list_head *new); \
80 
81 
82 /******************************************************************************/
83 #define TEMPLATE_PROTOTYPE_OBJECT(CLASS, MEMBER, TYPE) \
84  TEMPLATE_PROTOTYPE_OBJECT_AUX(CLASS, MEMBER, TYPE)
85 #define TEMPLATE_PROTOTYPE_OBJECT_AUX(CLASS, MEMBER, TYPE) \
86  \
87  EXPORT_SPEC const TYPE *CLASS##_get_##MEMBER(const CLASS *p); \
88  EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const TYPE *n); \
89 
90 
91 /******************************************************************************/
92 #define TEMPLATE_PROTOTYPE_STRING(CLASS, MEMBER) \
93  TEMPLATE_PROTOTYPE_STRING_AUX(CLASS, MEMBER)
94 #define TEMPLATE_PROTOTYPE_STRING_AUX(CLASS, MEMBER) \
95  \
96  EXPORT_SPEC const UpnpString *CLASS##_get_##MEMBER(const CLASS *p); \
97  EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const UpnpString *s); \
98  EXPORT_SPEC size_t CLASS##_get_##MEMBER##_Length(const CLASS *p); \
99  EXPORT_SPEC const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p); \
100  EXPORT_SPEC int CLASS##_strcpy_##MEMBER(CLASS *p, const char *s); \
101  EXPORT_SPEC int CLASS##_strncpy_##MEMBER(CLASS *p, const char *s, size_t n); \
102  EXPORT_SPEC void CLASS##_clear_##MEMBER(CLASS *p); \
103 
104 
105 /******************************************************************************/
106 #define TEMPLATE_PROTOTYPE_DOMSTRING(CLASS, MEMBER) \
107  TEMPLATE_PROTOTYPE_DOMSTRING_AUX(CLASS, MEMBER)
108 #define TEMPLATE_PROTOTYPE_DOMSTRING_AUX(CLASS, MEMBER) \
109  \
110  EXPORT_SPEC const DOMString CLASS##_get_##MEMBER(const CLASS *p); \
111  EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const DOMString s); \
112  EXPORT_SPEC const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p); \
113 
114 
115 #endif /* TEMPLATEINCLUDE_H */
116 
117 
118 /******************************************************************************
119  *
120  * Actual source starts here.
121  *
122  ******************************************************************************/
123 
124 
125 #include <stdlib.h> /* for size_t */
126 
127 
128 #include "ixml.h" /* for DOMString, IXML_Document */
129 #include "list.h" /* for struct list_head */
130 #include "UpnpGlobal.h" /* for EXPORT_SPEC */
131 #include "UpnpString.h"
132 
133 
134 #ifdef __cplusplus
135 extern "C" {
136 #endif /* __cplusplus */
137 
138 TEMPLATE_PROTOTYPE_COMMON(CLASS)
139 
140 #define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_INT(CLASS, MEMBER, TYPE)
141 #define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_BUFFER(CLASS, MEMBER, TYPE)
142 #define EXPAND_CLASS_MEMBER_LIST(CLASS, MEMBER) TEMPLATE_PROTOTYPE_LIST(CLASS, MEMBER)
143 #define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_OBJECT(CLASS, MEMBER, TYPE)
144 #define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_PROTOTYPE_STRING(CLASS, MEMBER)
145 #define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_PROTOTYPE_DOMSTRING(CLASS, MEMBER)
146 
147 EXPAND_CLASS_MEMBERS(CLASS)
148 
149 #include "TemplateUndef.h"
150 
151 
152 #ifdef __cplusplus
153 }
154 #endif /* __cplusplus */
155 
156 
157 #ifdef TEMPLATE_GENERATE_SOURCE
158  #include "TemplateSource.h"
159 #endif /* TEMPLATE_GENERATE_SOURCE */
160 
161 /* Cleanup the template mess. */
162 #undef PREFIX
163 #undef CLASS
164 #undef EXPAND_CLASS_MEMBERS
165 
struct s_CLASS CLASS
Definition: TemplateInclude.h:138
Templates for source files of objects.
UpnpString object declaration.
Defines constants that for some reason are not defined on some systems.