Files
nostrlib/eventstore/mmm/position.go

43 lines
843 B
Go

package mmm
import (
"encoding/binary"
"fmt"
"strings"
)
type positions []position
func (poss positions) String() string {
str := strings.Builder{}
str.Grow(10 + 20*len(poss))
str.WriteString("positions:[")
for _, pos := range poss {
str.WriteByte(' ')
str.WriteString(pos.String())
}
str.WriteString(" ]")
return str.String()
}
type position struct {
start uint64
size uint32
}
func (pos position) String() string {
return fmt.Sprintf("<%d|%d|%d>", pos.start, pos.size, pos.start+uint64(pos.size))
}
func positionFromBytes(posb []byte) position {
return position{
size: binary.BigEndian.Uint32(posb[0:4]),
start: binary.BigEndian.Uint64(posb[4:12]),
}
}
func writeBytesFromPosition(out []byte, pos position) {
binary.BigEndian.PutUint32(out[0:4], pos.size)
binary.BigEndian.PutUint64(out[4:12], pos.start)
}