...

Source file src/github.com/jedib0t/go-pretty/v6/progress/tracker_sort.go

Documentation: github.com/jedib0t/go-pretty/v6/progress

     1  package progress
     2  
     3  import "sort"
     4  
     5  // SortBy helps sort a list of Trackers by various means.
     6  type SortBy int
     7  
     8  const (
     9  	// SortByNone doesn't do any sorting == sort by insertion order.
    10  	SortByNone SortBy = iota
    11  
    12  	// SortByMessage sorts by the Message alphabetically in ascending order.
    13  	SortByMessage
    14  
    15  	// SortByMessageDsc sorts by the Message alphabetically in descending order.
    16  	SortByMessageDsc
    17  
    18  	// SortByPercent sorts by the Percentage complete in ascending order.
    19  	SortByPercent
    20  
    21  	// SortByPercentDsc sorts by the Percentage complete in descending order.
    22  	SortByPercentDsc
    23  
    24  	// SortByValue sorts by the Value in ascending order.
    25  	SortByValue
    26  
    27  	// SortByValueDsc sorts by the Value in descending order.
    28  	SortByValueDsc
    29  )
    30  
    31  // Sort applies the sorting method defined by SortBy.
    32  func (sb SortBy) Sort(trackers []*Tracker) {
    33  	switch sb {
    34  	case SortByMessage:
    35  		sort.Sort(sortByMessage(trackers))
    36  	case SortByMessageDsc:
    37  		sort.Sort(sortByMessageDsc(trackers))
    38  	case SortByPercent:
    39  		sort.Sort(sortByPercent(trackers))
    40  	case SortByPercentDsc:
    41  		sort.Sort(sortByPercentDsc(trackers))
    42  	case SortByValue:
    43  		sort.Sort(sortByValue(trackers))
    44  	case SortByValueDsc:
    45  		sort.Sort(sortByValueDsc(trackers))
    46  	default:
    47  		// no sort
    48  	}
    49  }
    50  
    51  type sortByMessage []*Tracker
    52  
    53  func (sb sortByMessage) Len() int           { return len(sb) }
    54  func (sb sortByMessage) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    55  func (sb sortByMessage) Less(i, j int) bool { return sb[i].message() < sb[j].message() }
    56  
    57  type sortByMessageDsc []*Tracker
    58  
    59  func (sb sortByMessageDsc) Len() int           { return len(sb) }
    60  func (sb sortByMessageDsc) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    61  func (sb sortByMessageDsc) Less(i, j int) bool { return sb[i].message() > sb[j].message() }
    62  
    63  type sortByPercent []*Tracker
    64  
    65  func (sb sortByPercent) Len() int           { return len(sb) }
    66  func (sb sortByPercent) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    67  func (sb sortByPercent) Less(i, j int) bool { return sb[i].PercentDone() < sb[j].PercentDone() }
    68  
    69  type sortByPercentDsc []*Tracker
    70  
    71  func (sb sortByPercentDsc) Len() int           { return len(sb) }
    72  func (sb sortByPercentDsc) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    73  func (sb sortByPercentDsc) Less(i, j int) bool { return sb[i].PercentDone() > sb[j].PercentDone() }
    74  
    75  type sortByValue []*Tracker
    76  
    77  func (sb sortByValue) Len() int           { return len(sb) }
    78  func (sb sortByValue) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    79  func (sb sortByValue) Less(i, j int) bool { return sb[i].value < sb[j].value }
    80  
    81  type sortByValueDsc []*Tracker
    82  
    83  func (sb sortByValueDsc) Len() int           { return len(sb) }
    84  func (sb sortByValueDsc) Swap(i, j int)      { sb[i], sb[j] = sb[j], sb[i] }
    85  func (sb sortByValueDsc) Less(i, j int) bool { return sb[i].value > sb[j].value }
    86  

View as plain text