home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / xbmc-9.11.exe / system / python / spyce / tree.py < prev    next >
Encoding:
Python Source  |  2009-12-23  |  1.6 KB  |  71 lines

  1. ##################################################
  2. # SPYCE - Python-based HTML Scripting
  3. # Copyright (c) 2002 Rimon Barr.
  4. #
  5. # Refer to spyce.py
  6. # CVS: $Id: tree.py 20864 2009-06-02 06:16:47Z ceros7 $
  7. ##################################################
  8.  
  9. import string
  10.  
  11. class tree:
  12.   def __init__(self, data):
  13.     self.data = data
  14.     self.parent = None
  15.     self.children = []
  16.     self.next = self.prev = None
  17.     self.depth = 0
  18.   def append(self, data):
  19.     node = tree(data)
  20.     self.children.append(node)
  21.     node.parent = self
  22.     node.depth = self.depth+1
  23.     return node
  24.   def delete(self):
  25.     for c in self.children:
  26.       c.delete()
  27.     if self.parent:
  28.       self.parent.children.remove(self)
  29.       self.parent = None
  30.   def __repr__(self):
  31.     return '%s [%s]' % (self.data, string.join(map(str, self.children),', '))
  32.   def postWalk(self, f):
  33.     for c in self.children:
  34.       c.postWalk(f)
  35.     f(self)
  36.   def preWalk(self, f):
  37.     f(self)
  38.     for c in self.children:
  39.       c.preWalk(f)
  40.   def computePreChain(self):
  41.     prev = [None]
  42.     def walker(node, prev=prev):
  43.       node.prev = prev[0]
  44.       if prev[0]: 
  45.         node.prev.next = node
  46.       prev[0] = node
  47.     self.preWalk(walker)
  48.   def __cmp__(self, o):
  49.     try:
  50.       x = not self.data == o.data
  51.       if x: return x
  52.       x = not self.children == o.children
  53.       if x: return x
  54.     except:
  55.       return 1
  56.     return 0
  57.  
  58. if __name__=='__main__':
  59.   root = tree('1')
  60.   n = root.append('1.1')
  61.   n.append('1.1.1')
  62.   n = root.append('1.2')
  63.   n.append('1.2.1')
  64.   root.computePreChain()
  65.   n = root
  66.   while(n):
  67.     print n.data
  68.     n = n.next
  69.   root.delete()
  70.  
  71.