sort.go 567 B

123456789101112131415161718192021222324252627282930313233
  1. package files
  2. import (
  3. "github.com/calmh/syncthing/protocol"
  4. "sort"
  5. )
  6. type SortBy func(p protocol.FileInfo) int
  7. func (by SortBy) Sort(files []protocol.FileInfo) {
  8. ps := &fileSorter{
  9. files: files,
  10. by: by,
  11. }
  12. sort.Sort(ps)
  13. }
  14. type fileSorter struct {
  15. files []protocol.FileInfo
  16. by func(p1 protocol.FileInfo) 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. }