diff options
author | Bo Yang <struggleyb.nku@gmail.com> | 2009-03-20 13:22:37 +0000 |
---|---|---|
committer | Bo Yang <struggleyb.nku@gmail.com> | 2009-03-20 13:22:37 +0000 |
commit | 51683f2262fd165f477edebb934ffe9065bf3fff (patch) | |
tree | e4b5a66abf5a7d83ef070ca7f44d86d6cc07d952 /src/core/element.h | |
parent | 366e21e1dc75ab4f334091582b05aa02a85574d6 (diff) | |
download | libdom-51683f2262fd165f477edebb934ffe9065bf3fff.tar.gz libdom-51683f2262fd165f477edebb934ffe9065bf3fff.tar.bz2 |
Convert DOMElement interface to use vtable structure.
svn path=/trunk/dom/; revision=6808
Diffstat (limited to 'src/core/element.h')
-rw-r--r-- | src/core/element.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/core/element.h b/src/core/element.h index 35e1323..7a674e3 100644 --- a/src/core/element.h +++ b/src/core/element.h @@ -17,14 +17,33 @@ struct dom_element; struct dom_namednodemap; struct dom_node; struct dom_string; +struct dom_attr; +struct dom_type_info; + +/** + * DOM element node + */ +struct dom_element { + struct dom_node_internal base; /**< Base node */ + + struct dom_attr *attributes; /**< Element attributes */ + + struct dom_type_info *schema_type_info; /**< Type information */ +}; dom_exception dom_element_create(struct dom_document *doc, struct dom_string *name, struct dom_string *namespace, struct dom_string *prefix, struct dom_element **result); +dom_exception dom_element_initialize(struct dom_element *el, + struct dom_string *name, struct dom_string *namespace, + struct dom_string *prefix, struct dom_element **result); + void dom_element_destroy(struct dom_document *doc, struct dom_element *element); +void _dom_element_destroy(struct dom_node_internal *node); + dom_exception dom_element_get_attributes(struct dom_element *element, struct dom_namednodemap **result); @@ -33,4 +52,74 @@ dom_exception dom_element_has_attributes(struct dom_element *element, struct dom_node *dom_element_get_first_attribute(struct dom_element *element); +/* The virtual functions of dom_element */ +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); + +#define DOM_ELEMENT_VTABLE \ + _dom_element_get_tag_name, \ + _dom_element_get_attribute, \ + _dom_element_set_attribute, \ + _dom_element_remove_attribute, \ + _dom_element_get_attribute_node, \ + _dom_element_set_attribute_node, \ + _dom_element_remove_attribute_node, \ + _dom_element_get_elements_by_tag_name, \ + _dom_element_get_attribute_ns, \ + _dom_element_set_attribute_ns, \ + _dom_element_remove_attribute_ns, \ + _dom_element_get_attribute_node_ns, \ + _dom_element_set_attribute_node_ns, \ + _dom_element_get_elements_by_tag_name_ns, \ + _dom_element_has_attribute, \ + _dom_element_has_attribute_ns, \ + _dom_element_get_schema_type_info, \ + _dom_element_set_id_attribute, \ + _dom_element_set_id_attribute_ns, \ + _dom_element_set_id_attribute_node + #endif |