From be976276437110b32b965fe22ef1afbb45704545 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Fri, 20 Mar 2009 13:22:37 +0000 Subject: Convert DOMElement interface to use vtable structure. svn path=/trunk/dom/; revision=6808 --- include/dom/core/element.h | 352 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 300 insertions(+), 52 deletions(-) (limited to 'include/dom') diff --git a/include/dom/core/element.h b/include/dom/core/element.h index 6ae8b4d..c56e32c 100644 --- a/include/dom/core/element.h +++ b/include/dom/core/element.h @@ -11,68 +11,316 @@ #include #include +#include struct dom_attr; -struct dom_element; struct dom_nodelist; struct dom_string; struct dom_type_info; -dom_exception dom_element_get_tag_name(struct dom_element *element, - struct dom_string **name); +typedef struct dom_element dom_element; -dom_exception dom_element_get_attribute(struct dom_element *element, - struct dom_string *name, struct dom_string **value); -dom_exception dom_element_set_attribute(struct dom_element *element, - struct dom_string *name, struct dom_string *value); -dom_exception dom_element_remove_attribute(struct dom_element *element, - struct dom_string *name); +/* The DOMElement vtable */ +typedef struct dom_element_vtable { + struct dom_node_vtable base; -dom_exception dom_element_get_attribute_node(struct dom_element *element, - struct dom_string *name, struct dom_attr **result); -dom_exception dom_element_set_attribute_node(struct dom_element *element, - struct dom_attr *attr, struct dom_attr **result); -dom_exception dom_element_remove_attribute_node(struct dom_element *element, - struct dom_attr *attr, struct dom_attr **result); + dom_exception (*dom_element_get_tag_name)(struct dom_element *element, + struct dom_string **name); + dom_exception (*dom_element_get_attribute)(struct dom_element *element, + struct dom_string *name, struct dom_string **value); + dom_exception (*dom_element_set_attribute)(struct dom_element *element, + struct dom_string *name, struct dom_string *value); + dom_exception (*dom_element_remove_attribute)( + struct dom_element *element, struct dom_string *name); + dom_exception (*dom_element_get_attribute_node)( + struct dom_element *element, struct dom_string *name, + struct dom_attr **result); + dom_exception (*dom_element_set_attribute_node)( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result); + dom_exception (*dom_element_remove_attribute_node)( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result); + dom_exception (*dom_element_get_elements_by_tag_name)( + struct dom_element *element, struct dom_string *name, + struct dom_nodelist **result); + dom_exception (*dom_element_get_attribute_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname, struct dom_string **value); + dom_exception (*dom_element_set_attribute_ns)( + struct dom_element *element, + struct dom_string *namespace, struct dom_string *qname, + struct dom_string *value); + dom_exception (*dom_element_remove_attribute_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname); + dom_exception (*dom_element_get_attribute_node_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname, struct dom_attr **result); + dom_exception (*dom_element_set_attribute_node_ns)( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result); + dom_exception (*dom_element_get_elements_by_tag_name_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname, + struct dom_nodelist **result); + dom_exception (*dom_element_has_attribute)(struct dom_element *element, + struct dom_string *name, bool *result); + dom_exception (*dom_element_has_attribute_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname, bool *result); + dom_exception (*dom_element_get_schema_type_info)( + struct dom_element *element, + struct dom_type_info **result); + dom_exception (*dom_element_set_id_attribute)( + struct dom_element *element, struct dom_string *name, + bool is_id); + dom_exception (*dom_element_set_id_attribute_ns)( + struct dom_element *element, + struct dom_string *namespace, + struct dom_string *localname, bool is_id); + dom_exception (*dom_element_set_id_attribute_node)( + struct dom_element *element, + struct dom_attr *id_attr, bool is_id); +} dom_element_vtable; -dom_exception dom_element_get_elements_by_tag_name( +static inline dom_exception dom_element_get_tag_name( + struct dom_element *element, struct dom_string **name) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_tag_name(element, name); +} +#define dom_element_get_tag_name(e, n) dom_element_get_tag_name( \ + (dom_element *) (e), (struct dom_string **) (n)) + +static inline dom_exception dom_element_get_attribute( + struct dom_element *element, struct dom_string *name, + struct dom_string **value) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_attribute(element, name, value); +} +#define dom_element_get_attribute(e, n, v) dom_element_get_attribute( \ + (dom_element *) (e), (struct dom_string *) (n), \ + (struct dom_string **) (v)) + +static inline dom_exception dom_element_set_attribute( + struct dom_element *element, struct dom_string *name, + struct dom_string *value) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_attribute(element, name, value); +} +#define dom_element_set_attribute(e, n, v) dom_element_set_attribute( \ + (dom_element *) (e), (struct dom_string *) (n), \ + (struct dom_string *) (v)) + +static inline dom_exception dom_element_remove_attribute( + struct dom_element *element, struct dom_string *name) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_remove_attribute(element, name); +} +#define dom_element_remove_attribute(e, n) dom_element_remove_attribute( \ + (dom_element *) (e), (struct dom_string *) (n)) + +static inline dom_exception dom_element_get_attribute_node( + struct dom_element *element, struct dom_string *name, + struct dom_attr **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_attribute_node(element, name, result); +} +#define dom_element_get_attribute_node(e, n, r) \ + dom_element_get_attribute_node((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_attr **) (r)) + +static inline dom_exception dom_element_set_attribute_node( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_attribute_node(element, attr, result); +} +#define dom_element_set_attribute_node(e, a, r) \ + dom_element_set_attribute_node((dom_element *) (e), \ + (struct dom_attr *) (a), (struct dom_attr **) (r)) + +static inline dom_exception dom_element_remove_attribute_node( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_remove_attribute_node(element, attr, + result); +} +#define dom_element_remove_attribute_node(e, a, r) \ + dom_element_remove_attribute_node((dom_element *) (e), \ + (struct dom_attr *) (a), (struct dom_attr **) (r)) + + +static inline dom_exception dom_element_get_elements_by_tag_name( struct dom_element *element, struct dom_string *name, - struct dom_nodelist **result); - -dom_exception dom_element_get_attribute_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *localname, - struct dom_string **value); -dom_exception dom_element_set_attribute_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *qname, - struct dom_string *value); -dom_exception dom_element_remove_attribute_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *localname); - -dom_exception dom_element_get_attribute_node_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *localname, - struct dom_attr **result); -dom_exception dom_element_set_attribute_node_ns(struct dom_element *element, - struct dom_attr *attr, struct dom_attr **result); - -dom_exception dom_element_get_elements_by_tag_name_ns( + struct dom_nodelist **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_elements_by_tag_name(element, name, + result); +} +#define dom_element_get_elements_by_tag_name(e, n, r) \ + dom_element_get_elements_by_tag_name((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_nodelist **) (r)) + +static inline dom_exception dom_element_get_attribute_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *localname, struct dom_string **value) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_attribute_ns(element, namespace, + localname, value); +} +#define dom_element_get_attribute_ns(e, n, l, v) \ + dom_element_get_attribute_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l), \ + (struct dom_string **) (v)) + +static inline dom_exception dom_element_set_attribute_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *qname, struct dom_string *value) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_attribute_ns(element, namespace, + qname, value); +} +#define dom_element_set_attribute_ns(e, n, l, v) \ + dom_element_set_attribute_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l), \ + (struct dom_string *) (v)) + + +static inline dom_exception dom_element_remove_attribute_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *localname) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_remove_attribute_ns(element, namespace, + localname); +} +#define dom_element_remove_attribute_ns(e, n, l, v) \ + dom_element_remove_attribute_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l)) + + +static inline dom_exception dom_element_get_attribute_node_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *localname, struct dom_attr **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_attribute_node_ns(element, namespace, + localname, result); +} +#define dom_element_get_attribute_node_ns(e, n, l, r) \ + dom_element_get_attribute_node_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l), \ + (struct dom_attr **) (r)) + +static inline dom_exception dom_element_set_attribute_node_ns( + struct dom_element *element, struct dom_attr *attr, + struct dom_attr **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_attribute_node_ns(element, attr, + result); +} +#define dom_element_set_attribute_node_ns(e, a, r) \ + dom_element_set_attribute_node_ns((dom_element *) (e), \ + (struct dom_attr *) (a), (struct dom_attr **) (r)) + +static inline dom_exception dom_element_get_elements_by_tag_name_ns( struct dom_element *element, struct dom_string *namespace, - struct dom_string *localname, struct dom_nodelist **result); - -dom_exception dom_element_has_attribute(struct dom_element *element, - struct dom_string *name, bool *result); -dom_exception dom_element_has_attribute_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *localname, - bool *result); - -dom_exception dom_element_get_schema_type_info(struct dom_element *element, - struct dom_type_info **result); - -dom_exception dom_element_set_id_attribute(struct dom_element *element, - struct dom_string *name, bool is_id); -dom_exception dom_element_set_id_attribute_ns(struct dom_element *element, - struct dom_string *namespace, struct dom_string *localname, - bool is_id); -dom_exception dom_element_set_id_attribute_node(struct dom_element *element, - struct dom_attr *id_attr, bool is_id); + struct dom_string *localname, struct dom_nodelist **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_elements_by_tag_name_ns(element, + namespace, localname, result); +} +#define dom_element_get_elements_by_tag_name_ns(e, n, l, r) \ + dom_element_get_elements_by_tag_name_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l), \ + (struct dom_nodelist **) (r)) + +static inline dom_exception dom_element_has_attribute( + struct dom_element *element, struct dom_string *name, + bool *result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_has_attribute(element, name, result); +} +#define dom_element_has_attribute(e, n, r) dom_element_has_attribute( \ + (dom_element *) (e), (struct dom_string *) (n), \ + (bool *) (r)) + +static inline dom_exception dom_element_has_attribute_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *localname, bool *result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_has_attribute_ns(element, namespace, + localname, result); +} +#define dom_element_has_attribute_ns(e, n, l, r) dom_element_has_attribute_ns(\ + (dom_element *) (e), (struct dom_string *) (n), \ + (struct dom_string *) (l), (bool *) (r)) + +static inline dom_exception dom_element_get_schema_type_info( + struct dom_element *element, struct dom_type_info **result) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_get_schema_type_info(element, result); +} +#define dom_element_get_schema_type_info(e, r) \ + dom_element_get_schema_type_info((dom_element *) (e), \ + (struct dom_type_info **) (r)) + +static inline dom_exception dom_element_set_id_attribute( + struct dom_element *element, struct dom_string *name, + bool is_id) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_id_attribute(element, name, is_id); +} +#define dom_element_set_id_attribute(e, n, i) \ + dom_element_set_id_attribute((dom_element *) (e), \ + (struct dom_string *) (n), (bool) (i)) + +static inline dom_exception dom_element_set_id_attribute_ns( + struct dom_element *element, struct dom_string *namespace, + struct dom_string *localname, bool is_id) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_id_attribute_ns(element, namespace, + localname, is_id); +} +#define dom_element_set_id_attribute_ns(e, n, l, i) \ + dom_element_set_id_attribute_ns((dom_element *) (e), \ + (struct dom_string *) (n), (struct dom_string *) (l), \ + (bool) (i)) + +static inline dom_exception dom_element_set_id_attribute_node( + struct dom_element *element, struct dom_attr *id_attr, + bool is_id) +{ + return ((dom_element_vtable *) ((dom_node *) element)->vtable)-> + dom_element_set_id_attribute_node(element, id_attr, + is_id); +} +#define dom_element_set_id_attribute_node(e, a, i) \ + dom_element_set_id_attribute_node((dom_element *) (e), \ + (struct dom_attr *) (a), (bool) (i)) #endif -- cgit v1.2.3