From f1e8040bc33e9057bd7a756a09c431c3f0d86226 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <lukeshu@lukeshu.com>
Date: Tue, 12 Jul 2022 23:52:37 -0600
Subject: Add an `Ordered` interface for the Cmp method, have rbtree use it

---
 lib/util/generic.go | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

(limited to 'lib/util')

diff --git a/lib/util/generic.go b/lib/util/generic.go
index 61e045b..a63a814 100644
--- a/lib/util/generic.go
+++ b/lib/util/generic.go
@@ -124,3 +124,24 @@ func (m *SyncMap[K, V]) Range(f func(key K, value V) bool) {
 	})
 }
 func (m *SyncMap[K, V]) Store(key K, value V) { m.inner.Store(key, value) }
+
+type Ordered[T interface{ Cmp(T) int }] interface {
+	Cmp(T) int
+}
+
+type NativeOrdered[T constraints.Ordered] struct {
+	Val T
+}
+
+func (a NativeOrdered[T]) Cmp(b NativeOrdered[T]) int {
+	switch {
+	case a.Val < b.Val:
+		return -1
+	case a.Val > b.Val:
+		return 1
+	default:
+		return 0
+	}
+}
+
+var _ Ordered[NativeOrdered[int]] = NativeOrdered[int]{}
-- 
cgit v1.2.3-2-g168b