summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBo Yang <struggleyb.nku@gmail.com>2009-03-15 13:38:51 +0000
committerBo Yang <struggleyb.nku@gmail.com>2009-03-15 13:38:51 +0000
commitd7a5427346460567042f11460c0ffd24ae50eb51 (patch)
tree81bb7e1db7ea7c5203d8e32a0799fc9df6de6432 /include
parentfb5fc222637ffb1d0cb31deb54cac0ba06a99300 (diff)
downloadlibdom-d7a5427346460567042f11460c0ffd24ae50eb51.tar.gz
libdom-d7a5427346460567042f11460c0ffd24ae50eb51.tar.bz2
Convert the dom_characterdata to use vtable.
svn path=/trunk/dom/; revision=6787
Diffstat (limited to 'include')
-rw-r--r--include/dom/core/characterdata.h131
1 files changed, 114 insertions, 17 deletions
diff --git a/include/dom/core/characterdata.h b/include/dom/core/characterdata.h
index 2ed4ddc..e65cb96 100644
--- a/include/dom/core/characterdata.h
+++ b/include/dom/core/characterdata.h
@@ -9,27 +9,124 @@
#define dom_core_characterdata_h_
#include <dom/core/exceptions.h>
+#include <dom/core/node.h>
struct dom_characterdata;
struct dom_string;
-dom_exception dom_characterdata_get_data(struct dom_characterdata *cdata,
- struct dom_string **data);
-dom_exception dom_characterdata_set_data(struct dom_characterdata *cdata,
- struct dom_string *data);
-dom_exception dom_characterdata_get_length(struct dom_characterdata *cdata,
- unsigned long *length);
-dom_exception dom_characterdata_substring_data(
+/* The vtable for characterdata */
+typedef struct dom_characterdata_vtable {
+ struct dom_node_vtable base;
+
+ dom_exception (*dom_characterdata_get_data)(
+ struct dom_characterdata *cdata,
+ struct dom_string **data);
+ dom_exception (*dom_characterdata_set_data)(
+ struct dom_characterdata *cdata,
+ struct dom_string *data);
+ dom_exception (*dom_characterdata_get_length)(
+ struct dom_characterdata *cdata,
+ unsigned long *length);
+ dom_exception (*dom_characterdata_substring_data)(
+ struct dom_characterdata *cdata, unsigned long offset,
+ unsigned long count, struct dom_string **data);
+ dom_exception (*dom_characterdata_append_data)(
+ struct dom_characterdata *cdata,
+ struct dom_string *data);
+ dom_exception (*dom_characterdata_insert_data)(
+ struct dom_characterdata *cdata,
+ unsigned long offset, struct dom_string *data);
+ dom_exception (*dom_characterdata_delete_data)(
+ struct dom_characterdata *cdata,
+ unsigned long offset, unsigned long count);
+ dom_exception (*dom_characterdata_replace_data)(
+ struct dom_characterdata *cdata, unsigned long offset,
+ unsigned long count, struct dom_string *data);
+} dom_characterdata_vtable;
+
+
+static inline dom_exception dom_characterdata_get_data(
+ struct dom_characterdata *cdata, struct dom_string **data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_get_data(cdata, data);
+}
+#define dom_characterdata_get_data(c, d) dom_characterdata_get_data( \
+ (struct dom_characterdata *) (c), (struct dom_string **) (d))
+
+static inline dom_exception dom_characterdata_set_data(
+ struct dom_characterdata *cdata, struct dom_string *data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_set_data(cdata, data);
+}
+#define dom_characterdata_set_data(c, d) dom_characterdata_set_data( \
+ (struct dom_characterdata *) (c), (struct dom_string **) (d))
+
+static inline dom_exception dom_characterdata_get_length(
+ struct dom_characterdata *cdata, unsigned long *length)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_get_length(cdata, length);
+}
+#define dom_characterdata_get_length(c, l) dom_characterdata_get_length( \
+ (struct dom_characterdata *) (c), (unsigned long *) (l))
+
+static inline dom_exception dom_characterdata_substring_data(
struct dom_characterdata *cdata, unsigned long offset,
- unsigned long count, struct dom_string **data);
-dom_exception dom_characterdata_append_data(struct dom_characterdata *cdata,
- struct dom_string *data);
-dom_exception dom_characterdata_insert_data(struct dom_characterdata *cdata,
- unsigned long offset, struct dom_string *data);
-dom_exception dom_characterdata_delete_data(struct dom_characterdata *cdata,
- unsigned long offset, unsigned long count);
-dom_exception dom_characterdata_replace_data(struct dom_characterdata *cdata,
- unsigned long offset, unsigned long count,
- struct dom_string *data);
+ unsigned long count, struct dom_string **data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_substring_data(cdata, offset, count,
+ data);
+}
+#define dom_characterdata_substring_data(c, o, ct, d) \
+ dom_characterdata_substring_data( \
+ (struct dom_characterdata *) (c), (unsigned long) (o), \
+ (unsigned long) (ct), (struct dom_string **) (d))
+
+static inline dom_exception dom_characterdata_append_data(
+ struct dom_characterdata *cdata, struct dom_string *data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_append_data(cdata, data);
+}
+#define dom_characterdata_append_data(c, d) dom_characterdata_append_data( \
+ (struct dom_characterdata *) (c), (struct dom_string **) (d))
+
+static inline dom_exception dom_characterdata_insert_data(
+ struct dom_characterdata *cdata, unsigned long offset,
+ struct dom_string *data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_insert_data(cdata, offset, data);
+}
+#define dom_characterdata_insert_data(c, o, d) dom_characterdata_insert_data( \
+ (struct dom_characterdata *) (c), (unsigned long) (o), \
+ (struct dom_string **) (d))
+
+static inline dom_exception dom_characterdata_delete_data(
+ struct dom_characterdata *cdata, unsigned long offset,
+ unsigned long count)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_delete_data(cdata, offset, count);
+}
+#define dom_characterdata_delete_data(c, o, ct) dom_characterdata_delete_data( \
+ (struct dom_characterdata *) (c), (unsigned long) (o), \
+ (unsigned long) (ct))
+
+static inline dom_exception dom_characterdata_replace_data(
+ struct dom_characterdata *cdata, unsigned long offset,
+ unsigned long count, struct dom_string *data)
+{
+ return ((dom_characterdata_vtable *) ((dom_node *) cdata)->vtable)->
+ dom_characterdata_replace_data(cdata, offset, count,
+ data);
+}
+#define dom_characterdata_replace_data(c, o, ct, d) \
+ dom_characterdata_replace_data((struct dom_characterdata *) (c),\
+ (unsigned long) (o), (unsigned long) (ct), \
+ (struct dom_string *) (d))
#endif