Codebase list golang-github-vbauerster-mpb / 8098365
add BarExtenderRev Vladimir Bauer 3 years ago
2 changed file(s) with 36 addition(s) and 8 deletion(s). Raw diff Collapse all Expand all
5353 buffers [3]*bytes.Buffer
5454 filler BarFiller
5555 middleware func(BarFiller) BarFiller
56 extender extenderFunc
5756 debugOut io.Writer
57
58 extender struct {
59 fn extenderFunc
60 rev bool
61 }
5862
5963 afterBar *Bar // key for (*pState).queueBars
6064 sync bool
377381 }
378382 }
379383 s.aborted = !s.completed
380 s.extender = makePanicExtender(p)
384 s.extender.fn = makePanicExtender(p)
381385 b.recoveredPanic = p
382386 }
383 if s.extender != nil {
384 rows = s.extender(rows, s.reqWidth, stat)
387 if fn := s.extender.fn; fn != nil {
388 rows = fn(rows, s.reqWidth, stat)
389 if s.extender.rev {
390 for left, right := 0, len(rows)-1; left < right; left, right = left+1, right-1 {
391 rows[left], rows[right] = rows[right], rows[left]
392 }
393 }
385394 }
386395 frame := &renderFrame{
387396 rows: rows,
402411 if b.recoveredPanic == nil {
403412 rows = append(rows, s.draw(stat))
404413 }
405 if s.extender != nil {
406 rows = s.extender(rows, s.reqWidth, stat)
414 if fn := s.extender.fn; fn != nil {
415 rows = fn(rows, s.reqWidth, stat)
416 if s.extender.rev {
417 for left, right := 0, len(rows)-1; left < right; left, right = left+1, right-1 {
418 rows[left], rows[right] = rows[right], rows[left]
419 }
420 }
407421 }
408422 frame := &renderFrame{
409423 rows: rows,
118118 }
119119 }
120120
121 // BarExtender provides a way to extend bar to the next new line.
121 // BarExtender extends bar with arbitrary lines. Provided BarFiller will be
122 // called at each render/flush cycle. Any lines written to the underlying
123 // io.Writer will be printed after the bar itself.
122124 func BarExtender(filler BarFiller) BarOption {
125 return barExtender(filler, false)
126 }
127
128 // BarExtenderRev extends bar with arbitrary lines in reverse order. Provided
129 // BarFiller will be called at each render/flush cycle. Any lines written
130 // to the underlying io.Writer will be printed before the bar itself.
131 func BarExtenderRev(filler BarFiller) BarOption {
132 return barExtender(filler, true)
133 }
134
135 func barExtender(filler BarFiller, rev bool) BarOption {
123136 if filler == nil {
124137 return nil
125138 }
126139 return func(s *bState) {
127 s.extender = makeExtenderFunc(filler)
140 s.extender.fn = makeExtenderFunc(filler)
141 s.extender.rev = rev
128142 }
129143 }
130144