From b374d40854a23f2177b6e36afdd2eea18cb5e535 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Tue, 24 Mar 2009 12:39:26 +0000 Subject: Convert Text to use vtable structure. Now the whole libdom is compiled successfully again. svn path=/trunk/dom/; revision=6833 --- include/dom/core/text.h | 64 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 10 deletions(-) (limited to 'include/dom/core') diff --git a/include/dom/core/text.h b/include/dom/core/text.h index 6f1f4d1..5e38d13 100644 --- a/include/dom/core/text.h +++ b/include/dom/core/text.h @@ -11,18 +11,62 @@ #include #include +#include struct dom_characterdata; struct dom_string; -struct dom_text; - -dom_exception dom_text_split_text(struct dom_text *text, - unsigned long offset, struct dom_text **result); -dom_exception dom_text_get_is_element_content_whitespace( - struct dom_text *text, bool *result); -dom_exception dom_text_get_whole_text(struct dom_text *text, - struct dom_string **result); -dom_exception dom_text_replace_whole_text(struct dom_text *text, - struct dom_string *content, struct dom_text **result); + +typedef struct dom_text dom_text; + +typedef struct dom_text_vtable { + struct dom_characterdata_vtable base; + + dom_exception (*dom_text_split_text)(struct dom_text *text, + unsigned long offset, struct dom_text **result); + dom_exception (*dom_text_get_is_element_content_whitespace)( + struct dom_text *text, bool *result); + dom_exception (*dom_text_get_whole_text)(struct dom_text *text, + struct dom_string **result); + dom_exception (*dom_text_replace_whole_text)(struct dom_text *text, + struct dom_string *content, struct dom_text **result); +} dom_text_vtable; + +static inline dom_exception dom_text_split_text(struct dom_text *text, + unsigned long offset, struct dom_text **result) +{ + return ((dom_text_vtable *) ((dom_node *) text)->vtable)-> + dom_text_split_text(text, offset, result); +} +#define dom_text_split_text(t, o, r) dom_text_split_text((dom_text *) (t), \ + (unsigned long) (o), (dom_text **) (r)) + +static inline dom_exception dom_text_get_is_element_content_whitespace( + struct dom_text *text, bool *result) +{ + return ((dom_text_vtable *) ((dom_node *) text)->vtable)-> + dom_text_get_is_element_content_whitespace(text, + result); +} +#define dom_text_get_is_element_content_whitespace(t, r) \ + dom_text_get_is_element_content_whitespace((dom_text *) (t), \ + (bool *) (r)) + +static inline dom_exception dom_text_get_whole_text(struct dom_text *text, + struct dom_string **result) +{ + return ((dom_text_vtable *) ((dom_node *) text)->vtable)-> + dom_text_get_whole_text(text, result); +} +#define dom_text_get_whole_text(t, r) dom_text_get_whole_text((dom_text *) (t),\ + (struct dom_string **) (r)) + +static inline dom_exception dom_text_replace_whole_text(struct dom_text *text, + struct dom_string *content, struct dom_text **result) +{ + return ((dom_text_vtable *) ((dom_node *) text)->vtable)-> + dom_text_replace_whole_text(text, content, result); +} +#define dom_text_replace_whole_text(t, c, r) dom_text_replace_whole_text( \ + (dom_text *) (t), (struct dom_string *) (c), (dom_text **) (r)) #endif -- cgit v1.2.3