libUPnP
1.8.4
upnp
inc
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
TemplateSource.h
Templates for source files of objects.
ixml.h
UpnpGlobal.h
Defines constants that for some reason are not defined on some systems.
UpnpString.h
UpnpString object declaration.
Generated by
1.8.20