sort.go 547 B

12345678910111213141516171819202122232425262728293031323334
  1. package files
  2. import (
  3. "sort"
  4. "github.com/calmh/syncthing/scanner"
  5. )
  6. type SortBy func(p scanner.File) int
  7. func (by SortBy) Sort(files []scanner.File) {
  8. ps := &fileSorter{
  9. files: files,
  10. by: by,
  11. }
  12. sort.Sort(ps)
  13. }
  14. type fileSorter struct {
  15. files []scanner.File
  16. by func(p1 scanner.File) int
  17. }
  18. func (s *fileSorter) Len() int {
  19. return len(s.files)
  20. }
  21. func (s *fileSorter) Swap(i, j int) {
  22. s.files[i], s.files[j] = s.files[j], s.files[i]
  23. }
  24. func (s *fileSorter) Less(i, j int) bool {
  25. return s.by(s.files[i]) > s.by(s.files[j])
  26. }