Codebase list golang-github-vbauerster-mpb / ed6d497
refactoring TraverseDecorators Vladimir Bauer 3 years ago
1 changed file(s) with 11 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
152152
153153 // TraverseDecorators traverses all available decorators and calls cb func on each.
154154 func (b *Bar) TraverseDecorators(cb func(decor.Decorator)) {
155 sync := make(chan struct{})
156 select {
157 case b.operateState <- func(s *bState) {
158 defer close(sync)
155 iter := make(chan decor.Decorator)
156 select {
157 case b.operateState <- func(s *bState) {
159158 for _, decorators := range [][]decor.Decorator{
160159 s.pDecorators,
161160 s.aDecorators,
162161 } {
163162 for _, d := range decorators {
164 cb(unwrap(d))
165 }
166 }
167 }:
168 <-sync
163 iter <- d
164 }
165 }
166 close(iter)
167 }:
168 for d := range iter {
169 cb(unwrap(d))
170 }
169171 case <-b.done:
170172 }
171173 }