check AverageAdjuster on bar init
Vladimir Bauer
6 years ago
| 77 | 77 |
mDecorators []decor.Decorator
|
| 78 | 78 |
amountReceivers []decor.AmountReceiver
|
| 79 | 79 |
shutdownListeners []decor.ShutdownListener
|
|
80 |
averageAdjusters []decor.AverageAdjuster
|
| 80 | 81 |
bufP, bufB, bufA *bytes.Buffer
|
| 81 | 82 |
bufE *bytes.Buffer
|
| 82 | 83 |
|
|
| 185 | 186 |
// AdjustAverageDecorators updates start time of all average decorators.
|
| 186 | 187 |
// Useful for resume-able tasks.
|
| 187 | 188 |
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) {
|
| 200 | 198 |
b.operateState <- func(s *bState) {
|
| 201 | 199 |
for _, decorators := range [...][]decor.Decorator{
|
| 202 | 200 |
s.pDecorators,
|
| 92 | 92 |
Shutdown()
|
| 93 | 93 |
}
|
| 94 | 94 |
|
| 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 |
}
|
| 97 | 101 |
|
| 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.
|
| 99 | 106 |
var (
|
| 100 | 107 |
WCSyncWidth = WC{C: DSyncWidth}
|
| 101 | 108 |
WCSyncWidthR = WC{C: DSyncWidthR}
|
| 145 | 145 |
}:
|
| 146 | 146 |
var amountReceivers []decor.AmountReceiver
|
| 147 | 147 |
var shutdownListeners []decor.ShutdownListener
|
|
148 |
var averageAdjusters []decor.AverageAdjuster
|
| 148 | 149 |
bar := <-result
|
| 149 | |
bar.UpdateDecorators(func(d decor.Decorator) {
|
|
150 |
bar.TraverseDecorators(func(d decor.Decorator) {
|
| 150 | 151 |
if d, ok := d.(decor.AmountReceiver); ok {
|
| 151 | 152 |
amountReceivers = append(amountReceivers, d)
|
| 152 | 153 |
}
|
| 153 | 154 |
if d, ok := d.(decor.ShutdownListener); ok {
|
| 154 | 155 |
shutdownListeners = append(shutdownListeners, d)
|
|
156 |
}
|
|
157 |
if d, ok := d.(decor.AverageAdjuster); ok {
|
|
158 |
averageAdjusters = append(averageAdjusters, d)
|
| 155 | 159 |
}
|
| 156 | 160 |
})
|
| 157 | 161 |
bar.operateState <- func(s *bState) {
|
| 158 | 162 |
s.amountReceivers = amountReceivers
|
| 159 | 163 |
s.shutdownListeners = shutdownListeners
|
|
164 |
s.averageAdjusters = averageAdjusters
|
| 160 | 165 |
}
|
| 161 | 166 |
return bar
|
| 162 | 167 |
case <-p.done:
|