From 5dbbeb7dcb94b273524d9aa56d3f60a1638aea73 Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Wed, 10 Nov 2010 08:24:02 -0500 Subject: [PATCH] DLFSTrees Doubly linked filesystem trees are both a doubly linked tree and a filesystem tree. They can walk paths backwards. --- libsaria/trees.py | 21 +++++++++++++++++++++ tests/trees.py | 29 +++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/libsaria/trees.py b/libsaria/trees.py index 6394f020..a55de72c 100644 --- a/libsaria/trees.py +++ b/libsaria/trees.py @@ -91,3 +91,24 @@ class FSTree(Tree): else: self.insert(base + [file]) + +class DLFSTree(DLTree, FSTree): + def __init__(self): + DLTree.__init__(self) + FSTree.__init__(self) + + def walk_path_backwards(self): + return sep.join( self.walk_backwards() ) + + def insert_path(self, base, file = None): + path = base.split(sep) + return self.insert_path_split(path, file) + + def insert_path_split(self, base, file = None): + if file == None: + child = self.insert(base) + #return DLTree.insert(self, base) + else: + child = self.insert(base + [file]) + #return DLTree.insert(self, base + [file]) + return child diff --git a/tests/trees.py b/tests/trees.py index 84361d52..8854fade 100644 --- a/tests/trees.py +++ b/tests/trees.py @@ -17,12 +17,25 @@ from libsaria import trees # print path -tree = trees.DLTree() +#tree = trees.DLTree() +#n = tree.insert(["a", "b", "c", "d"]) +#o = tree.insert(["a", "b", "c", "e"]) +#p = tree.insert(["f", "g", "h", "i"]) +#tree.disp() +#print n.walk_backwards() +#print o.walk_backwards() +#print p.walk_backwards() + + +tree = trees.DLFSTree() +n = tree.insert_path("/a/b/c/d") +o = tree.insert_path("/a/b/c/e") +p = tree.insert_path("/f/g/h/i") + +for path in tree.walk_paths(): + print path + +print n.walk_path_backwards() +print o.walk_path_backwards() +print p.walk_path_backwards() -n = tree.insert(["a", "b", "c", "d"]) -o = tree.insert(["a", "b", "c", "e"]) -p = tree.insert(["f", "g", "h", "i"]) -tree.disp() -print n.walk_backwards() -print o.walk_backwards() -print p.walk_backwards()