43 lines
843 B
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)
|
|
}
|