dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 9c3e75646de30aec82a4d699b18398c4377cd1ea
parent d1e81a8cc056c01525cec4b60b178631096f99ad
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 15 Jan 2023 18:54:37 -0800

generic sortedMerge function

Diffstat:
Mpkg/database/tableChatMessages.go | 13++++++++-----
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 {