MCPcopy Create free account
hub / github.com/eapache/channels / tee

Function tee

channels.go:120–140  ·  view source on GitHub ↗
(input SimpleOutChannel, outputs []SimpleInChannel, closeWhenDone bool)

Source from the content-addressed store, hash-verified

118}
119
120func tee(input SimpleOutChannel, outputs []SimpleInChannel, closeWhenDone bool) {
121 cases := make([]reflect.SelectCase, len(outputs))
122 for i := range cases {
123 cases[i].Dir = reflect.SelectSend
124 }
125 for elem := range input.Out() {
126 for i := range cases {
127 cases[i].Chan = reflect.ValueOf(outputs[i].In())
128 cases[i].Send = reflect.ValueOf(elem)
129 }
130 for _ = range cases {
131 chosen, _, _ := reflect.Select(cases)
132 cases[chosen].Chan = reflect.ValueOf(nil)
133 }
134 }
135 if closeWhenDone {
136 for i := range outputs {
137 outputs[i].Close()
138 }
139 }
140}
141
142func distribute(input SimpleOutChannel, outputs []SimpleInChannel, closeWhenDone bool) {
143 cases := make([]reflect.SelectCase, len(outputs))

Callers 3

TeeFunction · 0.85
WeakTeeFunction · 0.85
testTeeFunction · 0.85

Calls 3

OutMethod · 0.65
InMethod · 0.65
CloseMethod · 0.65

Tested by 1

testTeeFunction · 0.68