Codebase list golang-github-vbauerster-mpb / 262e695
check AverageAdjuster on bar init Vladimir Bauer 6 years ago
3 changed file(s) with 26 addition(s) and 16 deletion(s). Raw diff Collapse all Expand all
7777 mDecorators []decor.Decorator
7878 amountReceivers []decor.AmountReceiver
7979 shutdownListeners []decor.ShutdownListener
80 averageAdjusters []decor.AverageAdjuster
8081 bufP, bufB, bufA *bytes.Buffer
8182 bufE *bytes.Buffer
8283
185186 // AdjustAverageDecorators updates start time of all average decorators.
186187 // Useful for resume-able tasks.
187188 func (b *Bar) AdjustAverageDecorators(startTime time.Time) {
188 type adjustable interface {
189 AverageAdjust(time.Time)
190 }
191 b.UpdateDecorators(func(d decor.Decorator) {
192 if d, ok := d.(adjustable); ok {
193 d.AverageAdjust(startTime)
194 }
195 })
196 }
197
198 // UpdateDecorators general helper func.
199 func (b *Bar) UpdateDecorators(cb decor.UpdateFunc) {
189 b.operateState <- func(s *bState) {
190 for _, adjuster := range s.averageAdjusters {
191 adjuster.AverageAdjust(startTime)
192 }
193 }
194 }
195
196 // TraverseDecorators traverses all available decorators and calls cb func on each.
197 func (b *Bar) TraverseDecorators(cb decor.CBFunc) {
200198 b.operateState <- func(s *bState) {
201199 for _, decorators := range [...][]decor.Decorator{
202200 s.pDecorators,
9292 Shutdown()
9393 }
9494
95 // UpdateFunc convenience func type
96 type UpdateFunc func(Decorator)
95 // AverageAdjuster interface.
96 // Average decorators should implement this interface to provide start
97 // time adjustment facility, for resume-able tasks.
98 type AverageAdjuster interface {
99 AverageAdjust(time.Time)
100 }
97101
98 // Global convenience shortcuts
102 // CBFunc convenience call back func type.
103 type CBFunc func(Decorator)
104
105 // Global convenience instances of WC with sync width bit set.
99106 var (
100107 WCSyncWidth = WC{C: DSyncWidth}
101108 WCSyncWidthR = WC{C: DSyncWidthR}
145145 }:
146146 var amountReceivers []decor.AmountReceiver
147147 var shutdownListeners []decor.ShutdownListener
148 var averageAdjusters []decor.AverageAdjuster
148149 bar := <-result
149 bar.UpdateDecorators(func(d decor.Decorator) {
150 bar.TraverseDecorators(func(d decor.Decorator) {
150151 if d, ok := d.(decor.AmountReceiver); ok {
151152 amountReceivers = append(amountReceivers, d)
152153 }
153154 if d, ok := d.(decor.ShutdownListener); ok {
154155 shutdownListeners = append(shutdownListeners, d)
156 }
157 if d, ok := d.(decor.AverageAdjuster); ok {
158 averageAdjusters = append(averageAdjusters, d)
155159 }
156160 })
157161 bar.operateState <- func(s *bState) {
158162 s.amountReceivers = amountReceivers
159163 s.shutdownListeners = shutdownListeners
164 s.averageAdjusters = averageAdjusters
160165 }
161166 return bar
162167 case <-p.done: