aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/tree.py
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2009-07-23 09:25:34 -0400
committerW. Trevor King <wking@drexel.edu>2009-07-23 09:25:34 -0400
commit678fccaf505eca6d816b859e6d90d728d6426a02 (patch)
tree03909209495fc21cc3d267a2f709e52b56ce4e42 /libbe/tree.py
parent2d381449ece1326b25c5fbbbf3ee7987f03d1ee2 (diff)
downloadbugseverywhere-678fccaf505eca6d816b859e6d90d728d6426a02.tar.gz
Added libbe.tree.Tree.has_descendant().
Tree equality is now based on instance id. It had previously used the default list "equal if all elements are equal", which meant that all the leaves matched each other.
Diffstat (limited to 'libbe/tree.py')
-rw-r--r--libbe/tree.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/libbe/tree.py b/libbe/tree.py
index 0256407..45ae085 100644
--- a/libbe/tree.py
+++ b/libbe/tree.py
@@ -68,7 +68,18 @@ class Tree(list):
f
h
i
+ >>> a.has_descendant(g)
+ True
+ >>> c.has_descendant(g)
+ False
+ >>> a.has_descendant(a)
+ False
+ >>> a.has_descendant(a, match_self=True)
+ True
"""
+ def __eq__(self, other):
+ return id(self) == id(other)
+
def branch_len(self):
"""
Exhaustive search every time == SLOW.
@@ -157,4 +168,12 @@ class Tree(list):
yield (depth,node)
stack.append(node)
+ def has_descendant(self, descendant, depth_first=True, match_self=False):
+ if descendant == self:
+ return match_self
+ for d in self.traverse(depth_first):
+ if descendant == d:
+ return True
+ return False
+
suite = doctest.DocTestSuite()