summary refs log tree commit diff stats
path: root/lib/sort
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sort')
-rw-r--r--lib/sort/sort.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/sort/sort.go b/lib/sort/sort.go
index 89c36a9..840f77e 100644
--- a/lib/sort/sort.go
+++ b/lib/sort/sort.go
@@ -3,6 +3,7 @@ package sort
 import (
 	"errors"
 	"fmt"
+	"sort"
 	"strings"
 
 	"git.sr.ht/~sircmpwn/aerc/worker/types"
@@ -54,3 +55,18 @@ func parseSortField(arg string) (types.SortField, error) {
 		return types.SortArrival, fmt.Errorf("%v is not a valid sort criterion", arg)
 	}
 }
+
+// Sorts toSort by sortBy so that toSort becomes a permutation following the
+// order of sortBy.
+// toSort should be a subset of sortBy
+func SortBy(toSort []uint32, sortBy []uint32) {
+	// build a map from sortBy
+	uidMap := make(map[uint32]int)
+	for i, uid := range sortBy {
+		uidMap[uid] = i
+	}
+	// sortslice of toSort with less function of indexing the map sortBy
+	sort.Slice(toSort, func(i, j int) bool {
+		return uidMap[toSort[i]] < uidMap[toSort[j]]
+	})
+}
> 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154