commit 9c3e75646de30aec82a4d699b18398c4377cd1ea
parent d1e81a8cc056c01525cec4b60b178631096f99ad
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 15 Jan 2023 18:54:37 -0800
generic sortedMerge function
Diffstat:
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go
@@ -276,6 +276,9 @@ func GetRoomChatMessagesByDate(roomID RoomID, dt time.Time) (out []ChatMessage,
}
func GetChatMessages(roomID RoomID, username string, userID UserID, displayPms int64, mentionsOnly, displayHellbanned, displayIgnored, displayModerators bool) (out ChatMessages, err error) {
+
+ cmp := func(t, t2 ChatMessage) bool { return t.ID > t2.ID }
+
q := DB.
Preload("User").
Preload("ToUser").
@@ -320,7 +323,7 @@ func GetChatMessages(roomID RoomID, username string, userID UserID, displayPms i
err = q2.Find(&out2).Error
}
- mergedTmp := sortedMerge(out1, out2)
+ mergedTmp := sortedMerge(out1, out2, cmp)
//-----------
@@ -335,21 +338,21 @@ func GetChatMessages(roomID RoomID, username string, userID UserID, displayPms i
var out3 []ChatMessage
err = qg.Find(&out3).Error
- out = sortedMerge(mergedTmp, out3)
+ out = sortedMerge(mergedTmp, out3, cmp)
return
}
// merge two sorted slices. The output will also be sorted.
-func sortedMerge(a, b []ChatMessage) []ChatMessage {
- out := make([]ChatMessage, len(a)+len(b))
+func sortedMerge[T any](a, b []T, less func(T, T) bool) []T {
+ out := make([]T, len(a)+len(b))
// "i" is a pointer for slice "a"
// "j" is a pointer for slice "b"
// "k" is a pointer for the output slice
var i, j, k int
// Loop until we reach the end of either "a" or "b"
for i < len(a) && j < len(b) {
- if a[i].ID > b[j].ID {
+ if less(a[i], b[j]) {
out[k] = a[i]
i++
} else {