libUPnP 1.8.4
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
135extern "C" {
136#endif /* __cplusplus */
137
138TEMPLATE_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
147EXPAND_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
Templates for source files of objects.
Defines constants that for some reason are not defined on some systems.
UpnpString object declaration.