Introducing template object methods.
This commit is contained in:
parent
81b28fbb90
commit
cf79479b2b
147
upnp/inc/TemplateInclude.h
Normal file
147
upnp/inc/TemplateInclude.h
Normal file
@ -0,0 +1,147 @@
|
||||
|
||||
#ifndef TEMPLATEINCLUDE_H
|
||||
#define TEMPLATEINCLUDE_H
|
||||
|
||||
|
||||
/*!
|
||||
* \file
|
||||
*
|
||||
* \brief Templates for include files of objects.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* - In the include file Token.h:
|
||||
* #include "Token_def.h"
|
||||
* #include "TemplateInclude.h"
|
||||
*
|
||||
* - In the source file Token.c:
|
||||
* #include "Token.h"
|
||||
* #include "TemplateSource.h"
|
||||
*
|
||||
* \author Marcelo Roberto Jimenez
|
||||
*/
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_COMMON(CLASS) \
|
||||
TEMPLATE_PROTOTYPE_COMMON_AUX(CLASS)
|
||||
#define TEMPLATE_PROTOTYPE_COMMON_AUX(CLASS) \
|
||||
/*!
|
||||
* DOC_##CLASS
|
||||
*/ \
|
||||
typedef struct s_##CLASS CLASS; \
|
||||
\
|
||||
/*! Constructor */ \
|
||||
EXPORT_SPEC CLASS *CLASS##_new(); \
|
||||
\
|
||||
/*! Destructor */ \
|
||||
EXPORT_SPEC void CLASS##_delete(CLASS *p); \
|
||||
\
|
||||
/*! Copy Constructor */ \
|
||||
EXPORT_SPEC CLASS *CLASS##_dup(const CLASS *p); \
|
||||
\
|
||||
/*! Assignment operator */ \
|
||||
EXPORT_SPEC int CLASS##_assign(CLASS *p, const CLASS *q); \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_INT(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_PROTOTYPE_INT_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_PROTOTYPE_INT_AUX(CLASS, MEMBER, TYPE) \
|
||||
/*! DOC_##CLASS##_##MEMBER */ \
|
||||
EXPORT_SPEC TYPE CLASS##_get_##MEMBER(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, TYPE n); \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_BUFFER(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_PROTOTYPE_BUFFER_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_PROTOTYPE_BUFFER_AUX(CLASS, MEMBER, TYPE) \
|
||||
/*! DOC_##CLASS_##MEMBER */ \
|
||||
EXPORT_SPEC const TYPE *CLASS##_get_##MEMBER(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const TYPE *buf); \
|
||||
EXPORT_SPEC void CLASS##_clear_##MEMBER(CLASS *p); \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_OBJECT(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_PROTOTYPE_OBJECT_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_PROTOTYPE_OBJECT_AUX(CLASS, MEMBER, TYPE) \
|
||||
/*! DOC_##CLASS##_##MEMBER */ \
|
||||
EXPORT_SPEC const TYPE *CLASS##_get_##MEMBER(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const TYPE *n); \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_STRING(CLASS, MEMBER) \
|
||||
TEMPLATE_PROTOTYPE_STRING_AUX(CLASS, MEMBER)
|
||||
#define TEMPLATE_PROTOTYPE_STRING_AUX(CLASS, MEMBER) \
|
||||
/*! DOC_##CLASS##_##MEMBER */ \
|
||||
EXPORT_SPEC const UpnpString *CLASS##_get_##MEMBER(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const UpnpString *s); \
|
||||
EXPORT_SPEC int CLASS##_get_##MEMBER##_Length(const CLASS *p); \
|
||||
EXPORT_SPEC const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_strcpy_##MEMBER(CLASS *p, const char *s); \
|
||||
EXPORT_SPEC int CLASS##_strncpy_##MEMBER(CLASS *p, const char *s, int n); \
|
||||
EXPORT_SPEC void CLASS##_clear_##MEMBER(CLASS *p); \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_PROTOTYPE_DOMSTRING(CLASS, MEMBER) \
|
||||
TEMPLATE_PROTOTYPE_DOMSTRING_AUX(CLASS, MEMBER)
|
||||
#define TEMPLATE_PROTOTYPE_DOMSTRING_AUX(CLASS, MEMBER) \
|
||||
/*! DOC_##CLASS_##MEMBER */ \
|
||||
EXPORT_SPEC const DOMString CLASS##_get_##MEMBER(const CLASS *p); \
|
||||
EXPORT_SPEC int CLASS##_set_##MEMBER(CLASS *p, const DOMString s); \
|
||||
EXPORT_SPEC const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p); \
|
||||
|
||||
|
||||
#endif /* TEMPLATEINCLUDE_H */
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Actual source starts here.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
#include <stdlib.h> /* for size_t */
|
||||
|
||||
|
||||
#include "ixml.h" /* for DOMString, IXML_Document */
|
||||
#include "UpnpGlobal.h" /* for EXPORT_SPEC */
|
||||
#include "UpnpString.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
TEMPLATE_PROTOTYPE_COMMON(CLASS)
|
||||
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_INT(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_BUFFER(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_PROTOTYPE_OBJECT(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_PROTOTYPE_STRING(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_PROTOTYPE_DOMSTRING(CLASS, MEMBER)
|
||||
|
||||
EXPAND_CLASS_MEMBERS(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#ifdef TEMPLATE_GENERATE_SOURCE
|
||||
#include "TemplateSource.h"
|
||||
#endif /* TEMPLATE_GENERATE_SOURCE */
|
||||
|
||||
/* Cleanup the template mess. */
|
||||
#undef PREFIX
|
||||
#undef CLASS
|
||||
#undef EXPAND_CLASS_MEMBERS
|
||||
|
299
upnp/inc/TemplateSource.h
Normal file
299
upnp/inc/TemplateSource.h
Normal file
@ -0,0 +1,299 @@
|
||||
|
||||
#ifndef TEMPLATESOURCE_H
|
||||
#define TEMPLATESOURCE_H
|
||||
|
||||
|
||||
/*!
|
||||
* \file
|
||||
*
|
||||
* \brief Templates for source files of objects.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* - In the include file Token.h:
|
||||
* #include "Token_def.h"
|
||||
* #include "TemplateInclude.h"
|
||||
*
|
||||
* - In the source file Token.c:
|
||||
* #include "Token.h"
|
||||
* #include "TemplateSource.h"
|
||||
*
|
||||
* \author Marcelo Roberto Jimenez
|
||||
*/
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_DEFINITION_INT(MEMBER, TYPE) TYPE m_##MEMBER;
|
||||
#define TEMPLATE_DEFINITION_BUFFER(MEMBER, TYPE) TYPE m_##MEMBER;
|
||||
#define TEMPLATE_DEFINITION_OBJECT(MEMBER, TYPE) TYPE *m_##MEMBER;
|
||||
#define TEMPLATE_DEFINITION_STRING(MEMBER) UpnpString *m_##MEMBER;
|
||||
#define TEMPLATE_DEFINITION_DOMSTRING(MEMBER) DOMString m_##MEMBER;
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_CONSTRUCTOR_INT(MEMBER, TYPE) /* p->m_##MEMBER = 0; */
|
||||
#define TEMPLATE_CONSTRUCTOR_BUFFER(MEMBER, TYPE) \
|
||||
/* memset(&p->m_##MEMBER, 0, sizeof (TYPE)); */
|
||||
#define TEMPLATE_CONSTRUCTOR_OBJECT(MEMBER, TYPE) p->m_##MEMBER = TYPE##_new();
|
||||
#define TEMPLATE_CONSTRUCTOR_STRING(MEMBER) p->m_##MEMBER = UpnpString_new();
|
||||
#define TEMPLATE_CONSTRUCTOR_DOMSTRING(MEMBER) /* p->m_##MEMBER = NULL; */
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_DESTRUCTOR_INT(MEMBER, TYPE) p->m_##MEMBER = 0;
|
||||
#define TEMPLATE_DESTRUCTOR_BUFFER(MEMBER, TYPE) memset(&p->m_##MEMBER, 0, sizeof (TYPE));
|
||||
#define TEMPLATE_DESTRUCTOR_OBJECT(MEMBER, TYPE) TYPE##_delete(p->m_##MEMBER); p->m_##MEMBER = NULL;
|
||||
#define TEMPLATE_DESTRUCTOR_STRING(MEMBER) UpnpString_delete(p->m_##MEMBER); p->m_##MEMBER = NULL;
|
||||
#define TEMPLATE_DESTRUCTOR_DOMSTRING(MEMBER) p->m_##MEMBER = NULL;
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_ASSIGNMENT(CLASS, MEMBER) ok = ok && CLASS##_set_##MEMBER(p, CLASS##_get_##MEMBER(q));
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_METHODS_INT(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_METHODS_INT_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_METHODS_INT_AUX(CLASS, MEMBER, TYPE) \
|
||||
TYPE CLASS##_get_##MEMBER(const CLASS *p) \
|
||||
{ \
|
||||
return ((struct S##CLASS *)p)->m_##MEMBER; \
|
||||
} \
|
||||
\
|
||||
int CLASS##_set_##MEMBER(CLASS *p, TYPE n) \
|
||||
{ \
|
||||
((struct S##CLASS *)p)->m_##MEMBER = n; \
|
||||
return 1; \
|
||||
} \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_METHODS_BUFFER(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_METHODS_BUFFER_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_METHODS_BUFFER_AUX(CLASS, MEMBER, TYPE) \
|
||||
const TYPE *CLASS##_get_##MEMBER(const CLASS *p) \
|
||||
{ \
|
||||
return (TYPE *)&((struct S##CLASS *)p)->m_##MEMBER; \
|
||||
} \
|
||||
\
|
||||
int CLASS##_set_##MEMBER(CLASS *p, const TYPE *buf) \
|
||||
{ \
|
||||
((struct S##CLASS *)p)->m_##MEMBER = *(TYPE *)buf; \
|
||||
return 1; \
|
||||
} \
|
||||
\
|
||||
void CLASS##_clear_##MEMBER(CLASS *p) \
|
||||
{ \
|
||||
memset(&((struct S##CLASS *)p)->m_##MEMBER, 0, sizeof(TYPE)); \
|
||||
} \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_METHODS_OBJECT(CLASS, MEMBER, TYPE) \
|
||||
TEMPLATE_METHODS_OBJECT_AUX(CLASS, MEMBER, TYPE)
|
||||
#define TEMPLATE_METHODS_OBJECT_AUX(CLASS, MEMBER, TYPE) \
|
||||
const TYPE *CLASS##_get_##MEMBER(const CLASS *p) \
|
||||
{ \
|
||||
return ((struct S##CLASS *)p)->m_##MEMBER; \
|
||||
} \
|
||||
\
|
||||
int CLASS##_set_##MEMBER(CLASS *p, const TYPE *s) \
|
||||
{ \
|
||||
TYPE *q = TYPE##_dup(s); \
|
||||
if (!q) return 0; \
|
||||
TYPE##_delete(((struct S##CLASS *)p)->m_##MEMBER); \
|
||||
((struct S##CLASS *)p)->m_##MEMBER = q; \
|
||||
return 1; \
|
||||
} \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_METHODS_STRING(CLASS, MEMBER) \
|
||||
TEMPLATE_METHODS_STRING_AUX(CLASS, MEMBER)
|
||||
#define TEMPLATE_METHODS_STRING_AUX(CLASS, MEMBER) \
|
||||
const UpnpString *CLASS##_get_##MEMBER(const CLASS *p) \
|
||||
{ \
|
||||
return ((struct S##CLASS *)p)->m_##MEMBER; \
|
||||
} \
|
||||
\
|
||||
int CLASS##_set_##MEMBER(CLASS *p, const UpnpString *s) \
|
||||
{ \
|
||||
const char *q = UpnpString_get_String(s); \
|
||||
return UpnpString_set_String(((struct S##CLASS *)p)->m_##MEMBER, q); \
|
||||
} \
|
||||
\
|
||||
int CLASS##_get_##MEMBER##_Length(const CLASS *p) \
|
||||
{ \
|
||||
return UpnpString_get_Length(CLASS##_get_##MEMBER(p)); \
|
||||
} \
|
||||
const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p) \
|
||||
{ \
|
||||
return UpnpString_get_String(CLASS##_get_##MEMBER(p)); \
|
||||
} \
|
||||
\
|
||||
int CLASS##_strcpy_##MEMBER(CLASS *p, const char *s) \
|
||||
{ \
|
||||
return UpnpString_set_String(((struct S##CLASS *)p)->m_##MEMBER, s); \
|
||||
} \
|
||||
\
|
||||
int CLASS##_strncpy_##MEMBER(CLASS *p, const char *s, int n) \
|
||||
{ \
|
||||
return UpnpString_set_StringN(((struct S##CLASS *)p)->m_##MEMBER, s, n); \
|
||||
} \
|
||||
\
|
||||
void CLASS##_clear_##MEMBER(CLASS *p) \
|
||||
{ \
|
||||
UpnpString_clear(((struct S##CLASS *)p)->m_##MEMBER); \
|
||||
} \
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_METHODS_DOMSTRING(CLASS, MEMBER) \
|
||||
TEMPLATE_METHODS_DOMSTRING_AUX(CLASS, MEMBER)
|
||||
#define TEMPLATE_METHODS_DOMSTRING_AUX(CLASS, MEMBER) \
|
||||
const DOMString CLASS##_get_##MEMBER(const CLASS *p) \
|
||||
{ \
|
||||
return ((struct S##CLASS *)p)->m_##MEMBER; \
|
||||
} \
|
||||
\
|
||||
int CLASS##_set_##MEMBER(CLASS *p, const DOMString s) \
|
||||
{ \
|
||||
DOMString q = ixmlCloneDOMString(s); \
|
||||
if (!q) return 0; \
|
||||
ixmlFreeDOMString(((struct S##CLASS *)p)->m_##MEMBER); \
|
||||
((struct S##CLASS *)p)->m_##MEMBER = q; \
|
||||
return 1; \
|
||||
} \
|
||||
\
|
||||
const char *CLASS##_get_##MEMBER##_cstr(const CLASS *p) \
|
||||
{ \
|
||||
return (const char *)CLASS##_get_##MEMBER(p); \
|
||||
} \
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Actual source starts here.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h> /* for calloc(), free() */
|
||||
#include <string.h> /* for strlen(), strdup() */
|
||||
|
||||
/******************************************************************************/
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_INT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_BUFFER(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_DEFINITION_OBJECT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_DEFINITION_STRING(MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_DEFINITION_DOMSTRING(MEMBER)
|
||||
|
||||
#define TEMPLATE_DECLARATION_STRUCT(CLASS) \
|
||||
TEMPLATE_DECLARATION_STRUCT_AUX(CLASS)
|
||||
#define TEMPLATE_DECLARATION_STRUCT_AUX(CLASS) \
|
||||
struct S##CLASS { \
|
||||
EXPAND_CLASS_MEMBERS(CLASS) \
|
||||
};
|
||||
|
||||
TEMPLATE_DECLARATION_STRUCT(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_INT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_BUFFER(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_CONSTRUCTOR_OBJECT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_CONSTRUCTOR_STRING(MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_CONSTRUCTOR_DOMSTRING(MEMBER)
|
||||
|
||||
#define TEMPLATE_DEFINITION_CONSTRUCTOR(CLASS) \
|
||||
TEMPLATE_DEFINITION_CONSTRUCTOR_AUX(CLASS)
|
||||
#define TEMPLATE_DEFINITION_CONSTRUCTOR_AUX(CLASS) \
|
||||
CLASS *CLASS##_new() \
|
||||
{ \
|
||||
struct S##CLASS *p = calloc(1, sizeof (struct S##CLASS)); \
|
||||
\
|
||||
EXPAND_CLASS_MEMBERS(CLASS) \
|
||||
\
|
||||
return (CLASS *)p; \
|
||||
}
|
||||
|
||||
TEMPLATE_DEFINITION_CONSTRUCTOR(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_INT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_BUFFER(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_DESTRUCTOR_OBJECT(MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_DESTRUCTOR_STRING(MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_DESTRUCTOR_DOMSTRING(MEMBER)
|
||||
|
||||
#define TEMPLATE_DEFINITION_DESTRUCTOR(CLASS) \
|
||||
TEMPLATE_DEFINITION_DESTRUCTOR_AUX(CLASS)
|
||||
#define TEMPLATE_DEFINITION_DESTRUCTOR_AUX(CLASS) \
|
||||
void CLASS##_delete(CLASS *q) \
|
||||
{ \
|
||||
struct S##CLASS *p = (struct S##CLASS *)q; \
|
||||
\
|
||||
if (!p) return; \
|
||||
\
|
||||
EXPAND_CLASS_MEMBERS(CLASS) \
|
||||
\
|
||||
free(p); \
|
||||
}
|
||||
|
||||
TEMPLATE_DEFINITION_DESTRUCTOR(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define TEMPLATE_DEFINITION_COPY_CONSTRUCTOR(CLASS) \
|
||||
TEMPLATE_DEFINITION_COPY_CONSTRUCTOR_AUX(CLASS)
|
||||
#define TEMPLATE_DEFINITION_COPY_CONSTRUCTOR_AUX(CLASS) \
|
||||
CLASS *CLASS##_dup(const CLASS *q) \
|
||||
{ \
|
||||
CLASS *p = CLASS##_new(); \
|
||||
\
|
||||
CLASS##_assign(p, q); \
|
||||
\
|
||||
return p; \
|
||||
}
|
||||
|
||||
TEMPLATE_DEFINITION_COPY_CONSTRUCTOR(CLASS)
|
||||
|
||||
/******************************************************************************/
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_ASSIGNMENT(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_ASSIGNMENT(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_ASSIGNMENT(CLASS, MEMBER)
|
||||
|
||||
#define TEMPLATE_DEFINITION_ASSIGNMENT(CLASS) \
|
||||
TEMPLATE_DEFINITION_ASSIGNMENT_AUX(CLASS)
|
||||
#define TEMPLATE_DEFINITION_ASSIGNMENT_AUX(CLASS) \
|
||||
int CLASS##_assign(CLASS *p, const CLASS *q) \
|
||||
{ \
|
||||
int ok = 1; \
|
||||
if (p != q) { \
|
||||
EXPAND_CLASS_MEMBERS(CLASS) \
|
||||
} \
|
||||
return ok; \
|
||||
}
|
||||
|
||||
TEMPLATE_DEFINITION_ASSIGNMENT(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define EXPAND_CLASS_MEMBER_INT(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_INT(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_BUFFER(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_BUFFER(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_OBJECT(CLASS, MEMBER, TYPE) TEMPLATE_METHODS_OBJECT(CLASS, MEMBER, TYPE)
|
||||
#define EXPAND_CLASS_MEMBER_STRING(CLASS, MEMBER) TEMPLATE_METHODS_STRING(CLASS, MEMBER)
|
||||
#define EXPAND_CLASS_MEMBER_DOMSTRING(CLASS, MEMBER) TEMPLATE_METHODS_DOMSTRING(CLASS, MEMBER)
|
||||
|
||||
EXPAND_CLASS_MEMBERS(CLASS)
|
||||
|
||||
#include "TemplateUndef.h"
|
||||
|
||||
|
||||
#endif /* TEMPLATESOURCE_H */
|
||||
|
11
upnp/inc/TemplateUndef.h
Normal file
11
upnp/inc/TemplateUndef.h
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
/*!
|
||||
* \file
|
||||
*/
|
||||
|
||||
#undef EXPAND_CLASS_MEMBER_INT
|
||||
#undef EXPAND_CLASS_MEMBER_OBJECT
|
||||
#undef EXPAND_CLASS_MEMBER_STRING
|
||||
#undef EXPAND_CLASS_MEMBER_DOMSTRING
|
||||
#undef EXPAND_CLASS_MEMBER_BUFFER
|
||||
|
Loading…
x
Reference in New Issue
Block a user