github.com/alkemics/goflow@v0.2.1/wrappers/gonodes/graph/gonodes.go (about) 1 // Code generated by goflow DO NOT EDIT. 2 3 //go:build !codeanalysis 4 // +build !codeanalysis 5 6 package main 7 8 import ( 9 "github.com/alkemics/goflow/example/nodes" 10 ) 11 12 /* 13 14 */ 15 type GoNodes struct{ debug bool } 16 17 func NewGoNodes(debug bool) GoNodes { 18 return GoNodes{ 19 debug: debug, 20 } 21 } 22 23 func newGoNodes(id string, debug bool) GoNodes { 24 return GoNodes{ 25 debug: debug, 26 } 27 } 28 29 /* 30 31 */ 32 func (g *GoNodes) Run() { 33 34 // __add_slice_list outputs 35 var __add_slice_list_aggregated []int 36 37 // __print_values outputs 38 var __print_values_aggregated []interface{} 39 40 // add_slice outputs 41 var add_slice_sum int 42 43 // make_slice outputs 44 var make_slice_list []int 45 46 // print outputs 47 48 igniteNodeID := "ignite" 49 doneNodeID := "done" 50 51 done := make(chan string) 52 defer close(done) 53 54 steps := map[string]struct { 55 deps map[string]struct{} 56 run func() 57 alreadyDone bool 58 }{ 59 60 "__add_slice_list": { 61 deps: map[string]struct{}{ 62 "make_slice": {}, 63 igniteNodeID: {}, 64 }, 65 run: func() { 66 __add_slice_list_aggregated = make_slice_list 67 done <- "__add_slice_list" 68 }, 69 alreadyDone: false, 70 }, 71 "__print_values": { 72 deps: map[string]struct{}{ 73 "add_slice": {}, 74 igniteNodeID: {}, 75 }, 76 run: func() { 77 __print_values_aggregated = append(__print_values_aggregated, add_slice_sum) 78 done <- "__print_values" 79 }, 80 alreadyDone: false, 81 }, 82 "add_slice": { 83 deps: map[string]struct{}{ 84 "__add_slice_list": {}, 85 igniteNodeID: {}, 86 }, 87 run: func() { 88 node := nodes.NewIntReducer(g.debug) 89 add_slice_sum = node.Add(__add_slice_list_aggregated) 90 done <- "add_slice" 91 }, 92 alreadyDone: false, 93 }, 94 "make_slice": { 95 deps: map[string]struct{}{ 96 igniteNodeID: {}, 97 }, 98 run: func() { 99 make_slice_list = nodes.SliceMaker() 100 done <- "make_slice" 101 }, 102 alreadyDone: false, 103 }, 104 "print": { 105 deps: map[string]struct{}{ 106 "__print_values": {}, 107 igniteNodeID: {}, 108 }, 109 run: func() { 110 nodes.Printer(__print_values_aggregated) 111 done <- "print" 112 }, 113 alreadyDone: false, 114 }, 115 igniteNodeID: { 116 deps: map[string]struct{}{}, 117 run: func() { 118 done <- igniteNodeID 119 }, 120 alreadyDone: false, 121 }, 122 doneNodeID: { 123 deps: map[string]struct{}{ 124 "__add_slice_list": {}, 125 "__print_values": {}, 126 "add_slice": {}, 127 "make_slice": {}, 128 "print": {}, 129 }, 130 run: func() { 131 done <- doneNodeID 132 }, 133 alreadyDone: false, 134 }, 135 } 136 137 // Ignite 138 ignite := steps[igniteNodeID] 139 ignite.alreadyDone = true 140 steps[igniteNodeID] = ignite 141 go steps[igniteNodeID].run() 142 143 // Resolve the graph 144 for resolved := range done { 145 if resolved == doneNodeID { 146 // If all the graph was resolved, get out of the loop 147 break 148 } 149 150 for name, step := range steps { 151 delete(step.deps, resolved) 152 if len(step.deps) == 0 && !step.alreadyDone { 153 step.alreadyDone = true 154 steps[name] = step 155 go step.run() 156 } 157 } 158 } 159 160 return 161 }