Advertisement
Guest User

Untitled

a guest
Nov 5th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 2.07 KB | None | 0 0
  1. package require nx
  2.  
  3. namespace eval ::Base {
  4.  
  5.   nx::Class create Node {}
  6.  
  7.  
  8.   nx::Class create Edge {
  9.     :property n1:object,type=Node
  10.     :property n2:object,type=Node
  11.    
  12.     :public method equals {e:object,type=Edge, required} {
  13.       # Check if the nodes are equal
  14.       if {[$e cget -n1] == ${:n1} && [$e cget -n2] == ${:n2}} {
  15.         return true
  16.       } elseif {[$e cget -n2] == ${:n1} && [$e cget -n1] == ${:n2}} {
  17.         return true
  18.       } else {
  19.         return false
  20.       }
  21.     }
  22.   }
  23.  
  24.   nx::Class create Graph {
  25.     :property edges {}
  26.     :property nodes {}
  27.    
  28.     :private add_edge {n1,type=Node,required,n2,type=Node,required} {
  29.       Edge create e -n1 $n1 -n2 $n2
  30.       set checker 0
  31.       foreach {key value} [array get edges] {
  32.         if {e equals $value} {
  33.           set checker 1
  34.         }
  35.       }
  36.       if {checker == 1}{
  37.         puts "The edge is in the list already"
  38.       } else {
  39.         lappend :edges $e
  40.       }
  41.     }
  42.    
  43.     :private add_node {n,type=Node,required} {
  44.       set checker 0
  45.       foreach {key value} [array get nodes] {
  46.         if {$n == $value} {
  47.           set checker 1
  48.         }
  49.       }
  50.       if {checker == 0} {
  51.         lappend :nodes $n
  52.       }
  53.     }
  54.    
  55.     :public method add {-n1:object,type=Node, required,-n2:object,type=Node, required} {
  56.       : -add_node $n1
  57.       : -add_node $n2
  58.       : -add_edge $n1 $n2
  59.     }
  60.   }
  61.  
  62. }
  63.  
  64.  
  65. ::Base::Node create n1
  66. ::Base::Node create n2
  67. ::Base::Node create n3
  68.  
  69. ::Base::Edge create e1 -n1 n1 -n2 n2
  70. ::Base::Edge create e2 -n1 n2 -n2 n1
  71. ::Base::Edge create e3 -n1 n2 -n2 n3
  72.  
  73. puts [e1 cget -n1]
  74. puts [e1 equals e2]
  75. puts [e1 equals e3]
  76. puts [e1 info class]
  77.  
  78. set G [::Base::Graph new]
  79.     set n1 [::Base::Node new]
  80.     set n2 [::Base::Node new]
  81.     set n3 [::Base::Node new]
  82.     set n4 [::Base::Node new]
  83.     set n5 [::Base::Node new]
  84.     set n6 [::Base::Node new]
  85.     set n7 [::Base::Node new]
  86.   set n8 [::Base::Node new]
  87.     $G add $n1 $n2
  88.     $G add $n1 $n3
  89.     $G add $n1 $n4
  90.     $G add $n1 $n5
  91.     $G add $n5 $n6
  92.     $G add $n5 $n7
  93.   $G add $n5 $n8
  94.  
  95. ;# e1 equals e2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement