Codebase list golang-github-vbauerster-mpb / 1ab915c
bar filler: dynamic flush func based on rev Vladimir Bauer 2 years ago
1 changed file(s) with 27 addition(s) and 26 deletion(s). Raw diff Collapse all Expand all
5151 type bFiller struct {
5252 components [components]component
5353 meta [components]func(io.Writer, ...interface{}) error
54 rev bool
54 flush func(w io.Writer, sections ...flushSection) error
5555 tipOnComplete bool
5656 tip struct {
5757 frames []component
155155 func (s *barStyle) Build() BarFiller {
156156 bf := &bFiller{
157157 meta: s.metaFuncs,
158 rev: s.rev,
159158 tipOnComplete: s.tipOnComplete,
160159 }
161160 bf.components[iLbound] = component{
183182 bf.tip.frames[i] = component{
184183 width: runewidth.StringWidth(t),
185184 bytes: []byte(t),
185 }
186 }
187 if s.rev {
188 bf.flush = func(w io.Writer, sections ...flushSection) error {
189 for i := len(sections) - 1; i >= 0; i-- {
190 if s := sections[i]; len(s.bytes) != 0 {
191 err := s.meta(w, s.bytes)
192 if err != nil {
193 return err
194 }
195 }
196 }
197 return nil
198 }
199 } else {
200 bf.flush = func(w io.Writer, sections ...flushSection) error {
201 for _, s := range sections {
202 if len(s.bytes) != 0 {
203 err := s.meta(w, s.bytes)
204 if err != nil {
205 return err
206 }
207 }
208 }
209 return nil
186210 }
187211 }
188212 return bf
240264 padding = append(padding, "…"...)
241265 }
242266
243 err = flush(w, s.rev,
267 err = s.flush(w,
244268 flushSection{s.meta[iRefiller], refilling},
245269 flushSection{s.meta[iFiller], filling},
246270 flushSection{s.meta[iTip], tip.bytes},
252276 return s.meta[iRbound](w, s.components[iRbound].bytes)
253277 }
254278
255 func flush(w io.Writer, rev bool, sections ...flushSection) error {
256 if rev {
257 for i := len(sections) - 1; i >= 0; i-- {
258 if s := sections[i]; len(s.bytes) != 0 {
259 err := s.meta(w, s.bytes)
260 if err != nil {
261 return err
262 }
263 }
264 }
265 } else {
266 for _, s := range sections {
267 if len(s.bytes) != 0 {
268 err := s.meta(w, s.bytes)
269 if err != nil {
270 return err
271 }
272 }
273 }
274 }
275 return nil
276 }
277
278279 func makeMetaFunc(fn func(...interface{}) string) func(io.Writer, ...interface{}) error {
279280 return func(w io.Writer, a ...interface{}) (err error) {
280281 for i := 0; i < len(a) && err == nil; i++ {