From 9bdbe6e64d12c514888457d466f625524627af19 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 4 May 2019 11:58:16 +0100 Subject: Add dom_node_contains() Signed-off-by: Daniel Silverstone --- src/core/node.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/core') diff --git a/src/core/node.c b/src/core/node.c index 17f93dd..2bd95d3 100644 --- a/src/core/node.c +++ b/src/core/node.c @@ -294,6 +294,36 @@ void _dom_node_finalise(dom_node_internal *node) } +/* ---------------------------------------------------------------------*/ + +/* The public non-virtual function of this interface Node */ + +dom_exception _dom_node_contains(struct dom_node_internal *node, + struct dom_node_internal *other, + bool *contains) +{ + assert(node != NULL); + assert(other != NULL); + assert(contains != NULL); + + if (node->owner != other->owner) { + *contains = false; + return DOM_NO_ERR; + } + + while (other != NULL) { + if (other == node) { + *contains = true; + return DOM_NO_ERR; + } + other = other->parent; + } + + *contains = false; + return DOM_NO_ERR; +} + + /* ---------------------------------------------------------------------*/ /* The public virtual function of this interface Node */ -- cgit v1.2.3