Bladeren bron

patch usage of leveldb first

Aneurin Barker Snook 11 maanden geleden
bovenliggende
commit
123a5be43e
1 gewijzigde bestanden met toevoegingen van 30 en 8 verwijderingen
  1. 30 8
      leveldb_iter.go

+ 30 - 8
leveldb_iter.go

@@ -9,15 +9,28 @@ type LevelDBIterator[T any] struct {
 
 func (i *LevelDBIterator[T]) Count() int {
 	n := 0
+
+	if i.First() {
+		n++
+	}
+
 	for i.Next() {
 		n++
 	}
+
 	return n
 }
 
 func (i *LevelDBIterator[T]) Filter(f FilterFunc[T]) Iterator[T] {
-	i.First()
 	m := map[string]T{}
+
+	if i.First() {
+		key, value, err := i.Get()
+		if err == nil {
+			m[key] = value
+		}
+	}
+
 	for i.Next() {
 		key, value, err := i.Get()
 		if err != nil {
@@ -25,6 +38,7 @@ func (i *LevelDBIterator[T]) Filter(f FilterFunc[T]) Iterator[T] {
 		}
 		m[key] = value
 	}
+
 	return newMemoryIterator(m, i)
 }
 
@@ -39,12 +53,15 @@ func (i *LevelDBIterator[T]) Get() (string, T, error) {
 
 func (i *LevelDBIterator[T]) GetAll() (map[string]T, error) {
 	values := map[string]T{}
-	i.First()
-	key, value, err := i.Get()
-	if err != nil {
-		return values, err
+
+	if i.First() {
+		key, value, err := i.Get()
+		if err != nil {
+			return values, err
+		}
+		values[key] = value
 	}
-	values[key] = value
+
 	for i.Next() {
 		key, value, err := i.Get()
 		if err != nil {
@@ -52,16 +69,21 @@ func (i *LevelDBIterator[T]) GetAll() (map[string]T, error) {
 		}
 		values[key] = value
 	}
+
 	return values, nil
 }
 
 func (i *LevelDBIterator[T]) GetAllKeys() []string {
 	keys := []string{}
-	i.First()
-	keys = append(keys, i.Key())
+
+	if i.First() {
+		keys = append(keys, i.Key())
+	}
+
 	for i.Next() {
 		keys = append(keys, i.Key())
 	}
+
 	return keys
 }