memdb.go 745 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
package entrydb

import (
	"io"
)

type MemEntryStore[T EntryType, E Entry[T]] struct {
	entries []E
}

func (s *MemEntryStore[T, E]) Size() int64 {
	return int64(len(s.entries))
}

func (s *MemEntryStore[T, E]) LastEntryIdx() EntryIdx {
	return EntryIdx(s.Size() - 1)
}

func (s *MemEntryStore[T, E]) Read(idx EntryIdx) (E, error) {
	if idx < EntryIdx(len(s.entries)) {
		return s.entries[idx], nil
	}
	var out E
	return out, io.EOF
}

func (s *MemEntryStore[T, E]) Append(entries ...E) error {
	s.entries = append(s.entries, entries...)
	return nil
}

func (s *MemEntryStore[T, E]) Truncate(idx EntryIdx) error {
	s.entries = s.entries[:min(s.Size()-1, int64(idx+1))]
	return nil
}

func (s *MemEntryStore[T, E]) Close() error {
	return nil
}