diff options
Diffstat (limited to 'src/html/html_options_collection.c')
-rw-r--r-- | src/html/html_options_collection.c | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/src/html/html_options_collection.c b/src/html/html_options_collection.c new file mode 100644 index 0000000..8b4c7bb --- /dev/null +++ b/src/html/html_options_collection.c @@ -0,0 +1,177 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + */ + +#include <assert.h> + +#include <libwapcaplet/libwapcaplet.h> + +#include "html/html_options_collection.h" + +#include "core/node.h" +#include "core/document.h" +#include "core/element.h" +#include "core/string.h" +#include "utils/utils.h" + +/*-----------------------------------------------------------------------*/ +/* Constructor and destructor */ + +/** + * Create a dom_html_options_collection + * + * \param doc The document + * \param root The root element of the collection + * \param ic The callback function used to determin whether certain node + * belongs to the collection + * \param col The result collection object + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + */ +dom_exception _dom_html_options_collection_create(struct dom_document *doc, + struct dom_node_internal *root, + dom_callback_is_in_collection ic, + struct dom_html_options_collection **col) +{ + *col = _dom_document_alloc(doc, NULL, + sizeof(dom_html_options_collection)); + if (*col == NULL) + return DOM_NO_MEM_ERR; + + return _dom_html_options_collection_initialise(doc, *col, root, ic); +} + +/** + * Intialiase a dom_html_options_collection + * + * \param doc The document + * \param col The collection object to be initialised + * \param root The root element of the collection + * \param ic The callback function used to determin whether certain node + * belongs to the collection + * \return DOM_NO_ERR on success. + */ +dom_exception _dom_html_options_collection_initialise(struct dom_document *doc, + struct dom_html_options_collection *col, + struct dom_node_internal *root, + dom_callback_is_in_collection ic) +{ + return _dom_html_collection_initialise(doc, &col->base, root, ic); +} + +/** + * Finalise a dom_html_options_collection object + * + * \param col The dom_html_options_collection object + */ +void _dom_html_options_collection_finalise(struct dom_html_options_collection *col) +{ + _dom_html_collection_finalise(&col->base); +} + +/** + * Destroy a dom_html_options_collection object + * \param col The dom_html_options_collection object + */ +void _dom_html_options_collection_destroy(struct dom_html_options_collection *col) +{ + struct dom_document *doc = col->base.doc; + _dom_html_options_collection_finalise(col); + + _dom_document_alloc(doc, col, 0); +} + + +/*-----------------------------------------------------------------------*/ +/* Public API */ + +/** + * Get the length of this dom_html_options_collection + * + * \param col The dom_html_options_collection object + * \param len The returned length of this collection + * \return DOM_NO_ERR on success. + */ +dom_exception dom_html_options_collection_get_length(dom_html_options_collection *col, + unsigned long *len) +{ + return dom_html_collection_get_length(&col->base, len); +} + +/** + * Set the length of this dom_html_options_collection + * + * \param col The dom_html_options_collection object + * \param len The length of this collection to be set + * \return DOM_NO_ERR on success. + */ +dom_exception dom_html_options_collection_set_length( + dom_html_options_collection *col, unsigned long len) +{ + UNUSED(col); + UNUSED(len); + + /* TODO: how to deal with this */ + return DOM_NOT_SUPPORTED_ERR; +} + +/** + * Get the node with certain index + * + * \param col The dom_html_options_collection object + * \param index The index number based on zero + * \param node The returned node object + * \return DOM_NO_ERR on success. + */ +dom_exception dom_html_options_collection_item(dom_html_options_collection *col, + unsigned long index, struct dom_node **node) +{ + return dom_html_collection_item(&col->base, index, node); +} + +/** + * Get the node in the collection according name + * + * \param col The collection + * \param name The name of target node + * \param node The returned node object + * \return DOM_NO_ERR on success. + */ +dom_exception dom_html_options_collection_named_item(dom_html_options_collection *col, + struct dom_string *name, struct dom_node **node) +{ + return dom_html_collection_named_item(&col->base, name, node); +} + +/** + * Claim a reference on this collection + * + * \pram col The collection object + */ +void dom_html_options_collection_ref(dom_html_options_collection *col) +{ + if (col == NULL) + return; + + col->base.refcnt ++; +} + +/** + * Relese a reference on this collection + * + * \pram col The collection object + */ +void dom_html_options_collection_unref(dom_html_options_collection *col) +{ + if (col == NULL) + return; + + if (col->base.refcnt > 0) + col->base.refcnt --; + + if (col->base.refcnt == 0) + _dom_html_options_collection_destroy(col); +} + |