summaryrefslogtreecommitdiff
path: root/src/core/element.h
diff options
context:
space:
mode:
authorBo Yang <struggleyb.nku@gmail.com>2009-03-20 13:22:37 +0000
committerBo Yang <struggleyb.nku@gmail.com>2009-03-20 13:22:37 +0000
commit51683f2262fd165f477edebb934ffe9065bf3fff (patch)
treee4b5a66abf5a7d83ef070ca7f44d86d6cc07d952 /src/core/element.h
parent366e21e1dc75ab4f334091582b05aa02a85574d6 (diff)
downloadlibdom-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.h89
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