##nagelfar syntax fiber_iterate c
##nagelfar syntax fiber_eval x c
##nagelfar syntax iterate n x c
##nagelfar syntax iterate1 n x c
##nagelfar syntax fiber s x*
##nagelfar subcmd fiber create yield error
##nagelfar syntax wyslij e x
##nagelfar syntax czytaj e
## cykl NIEzorient, demonstracja, 12.2023
# + w tym alg nie ma znaczenia ze cykl jest niezorient !!!
# + sa tu deklaracje dla nagelfar
#
source symul_lib.tcl; # ladowanie symulatora
source symul_graf_lib.tcl
# tworzymy graf komunikacyjny (w tym wypadku cykl)
set liczbaWierz 7
set sasiedzi(0) {6 1}
set sasiedzi(1) {0 2}
#set sasiedzi(2) {1 3}
set sasiedzi(2) {3 1}
set sasiedzi(3) {2 4}
set sasiedzi(4) {3 5}
set sasiedzi(5) {4 6}
set sasiedzi(6) {5 0}
fiber create $liczbaWierz run
fiber_iterate {
proc run {} {
global id id_los run kom0 kom1
if {$id==0 || $id==1} {
wyslij 0 "$id_los 0"; wyslij 1 "$id_los 0"
}
fiber yield; # oznacza koniec rundy
while {$run} { # zmienna run pozwala zakonczyc dzialanie symulacji!!
while {$kom0!=""} {
lassign [czytaj 0] x0 x1
incr x1
wyslij 1 "$x0 $x1"
}
while {$kom1!=""} {
lassign [czytaj 1] x0 x1
incr x1
wyslij 0 "$x0 $x1"
}
fiber yield; # oznacza koniec rundy
}
}
}
Inicjalizacja; # koniecznie trzeba to wywolac!!!
proc wizualizacja {} {
_puts "---"
fiber_iterate {_puts "$id, $id_los: $kom0, $kom1"}
}
G::rysujGraf; wm geom .t 234x513+12+26
# !!! do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!!!!!!
fiber error
#fiber restart
#.output.t delete 1.0 end; # czyszczenie output
#set_run 0; fiber yield; set_run 1; fiber restart
#fiber_iterate {set id_los [expr round(rand()*10000)]}
fiber yield; runda; wizualizacja
exit