/razpub/src/com/razie/pubstage/data/TreeStruc.scala

http://razpub.googlecode.com/ · Scala · 77 lines · 33 code · 17 blank · 27 comment · 0 complexity · 84d761356e23cd77c7998ef8300a1e7f MD5 · raw file

  1. package com.razie.pubstage.data;
  2. /**
  3. * a tree structure, with nodes and leafs etc
  4. *
  5. * @author razvanc
  6. * @param [T]
  7. */
  8. trait TreeStruc[T] extends Structure[T] {
  9. def children : List[TreeStruc[T]]
  10. def isLeaf : Boolean
  11. }
  12. class TreeImplNode[T] (c:T) extends StrucImpl[T] (c) with TreeStruc[T] {
  13. val kids = razie.Listi[TreeStruc[T]]()
  14. override def children : List[TreeStruc[T]] = kids.toList
  15. override def isLeaf : Boolean = false
  16. def addLeaf (t:T) = this.kids += new TreeImplLeaf[T](t)
  17. def addNode (t:T) : TreeStruc[T] = {
  18. val newT = new TreeImplNode[T](t);
  19. this.kids += newT
  20. newT
  21. }
  22. }
  23. class TreeImplLeaf[T] (c:T) extends StrucImpl[T](c) with TreeStruc[T] {
  24. override def children : List[TreeStruc[T]] = scala.collection.immutable.List[TreeStruc[T]]()
  25. override def isLeaf : Boolean = true
  26. }
  27. class TreeBuilder[T] (t:T)(f: =>List[TreeStruc[T]]) extends TreeImplNode[T] (t) {
  28. override val children : List[TreeStruc[T]] = f
  29. }
  30. case class INode (t:Int)(f: =>List[TreeStruc[Int]]) extends TreeBuilder[Int] (t)(f) {}
  31. case class ILeaf (t:Int) extends TreeImplLeaf[Int] (t) {}
  32. object TestTree1 {
  33. val tree = INode (0) {
  34. ILeaf(1) :: ILeaf(2) :: Nil
  35. }
  36. }
  37. /** the f should create also LazyTreeBuiled nodes or leafs */
  38. class LazyTreeBuilder[T] (t:T)(f: TreeStruc[T] => List[TreeStruc[T]]) extends TreeImplNode[T] (t) {
  39. override lazy val children : List[TreeStruc[T]] = f (this)
  40. }
  41. // morph test
  42. //class TreeMorph[T] (t:T)(f: =>List[TreeMorph[T]] = Nil) extends TreeImplNode[T] (t) {
  43. //}
  44. //
  45. //class TreeMorphAny extends TreeImplNode[Any] {
  46. //
  47. //}
  48. //
  49. //case class IT (t:Int)(f: =>List[TreeMorph[Int]] = Nil) extends TreeMorph[Int] (i) (f) {
  50. //}
  51. //
  52. //
  53. //object TestTree2 {
  54. //
  55. // val tree = IT (0) {
  56. //// IT(1) :: IT(2)
  57. // }
  58. //
  59. //
  60. //}