avoid *frameReader type assertion
Vladimir Bauer
7 years ago
| 35 | 35 |
operateState chan func(*bState)
|
| 36 | 36 |
int64Ch chan int64
|
| 37 | 37 |
boolCh chan bool
|
| 38 | |
frameReaderCh chan io.Reader
|
|
38 |
frameReaderCh chan *frameReader
|
| 39 | 39 |
syncTableCh chan [][]chan int
|
| 40 | 40 |
bufNL *bytes.Buffer
|
| 41 | 41 |
|
|
| 109 | 109 |
operateState: make(chan func(*bState)),
|
| 110 | 110 |
int64Ch: make(chan int64),
|
| 111 | 111 |
boolCh: make(chan bool),
|
| 112 | |
frameReaderCh: make(chan io.Reader, 1),
|
|
112 |
frameReaderCh: make(chan *frameReader, 1),
|
| 113 | 113 |
syncTableCh: make(chan [][]chan int),
|
| 114 | 114 |
done: make(chan struct{}),
|
| 115 | 115 |
shutdown: make(chan struct{}),
|
| 26 | 26 |
type Writer struct {
|
| 27 | 27 |
out io.Writer
|
| 28 | 28 |
buf bytes.Buffer
|
|
29 |
lineSep []byte
|
| 29 | 30 |
lineCount int
|
| 30 | 31 |
}
|
| 31 | 32 |
|
| 32 | 33 |
// New returns a new Writer with defaults
|
| 33 | 34 |
func New(w io.Writer) *Writer {
|
| 34 | |
return &Writer{out: w}
|
|
35 |
return &Writer{
|
|
36 |
out: w,
|
|
37 |
lineSep: []byte("\n"),
|
|
38 |
}
|
| 35 | 39 |
}
|
| 36 | 40 |
|
| 37 | 41 |
// Flush flushes the underlying buffer
|
| 38 | 42 |
func (w *Writer) Flush() error {
|
| 39 | 43 |
err := w.clearLines()
|
| 40 | |
w.lineCount = bytes.Count(w.buf.Bytes(), []byte("\n"))
|
|
44 |
w.lineCount = bytes.Count(w.buf.Bytes(), w.lineSep)
|
| 41 | 45 |
// WriteTo takes care of w.buf.Reset
|
| 42 | 46 |
if _, e := w.buf.WriteTo(w.out); err == nil {
|
| 43 | 47 |
err = e
|
| 200 | 200 |
func (s *pState) flush() (err error) {
|
| 201 | 201 |
for s.bHeap.Len() > 0 {
|
| 202 | 202 |
bar := heap.Pop(s.bHeap).(*Bar)
|
| 203 | |
reader := <-bar.frameReaderCh
|
| 204 | |
if _, e := s.cw.ReadFrom(reader); e != nil {
|
|
203 |
frameReader := <-bar.frameReaderCh
|
|
204 |
if _, e := s.cw.ReadFrom(frameReader); e != nil {
|
| 205 | 205 |
err = e
|
| 206 | 206 |
}
|
| 207 | 207 |
defer func() {
|
| 208 | |
if frame, ok := reader.(*frameReader); ok && frame.toShutdown {
|
|
208 |
if frameReader.toShutdown {
|
| 209 | 209 |
// shutdown at next flush, in other words decrement underlying WaitGroup
|
| 210 | 210 |
// only after the bar with completed state has been flushed.
|
| 211 | 211 |
// this ensures no bar ends up with less than 100% rendered.
|
|
| 215 | 215 |
s.heapUpdated = true
|
| 216 | 216 |
delete(s.waitBars, bar)
|
| 217 | 217 |
}
|
| 218 | |
if frame.removeOnComplete {
|
|
218 |
if frameReader.removeOnComplete {
|
| 219 | 219 |
s.heapUpdated = true
|
| 220 | 220 |
return
|
| 221 | 221 |
}
|