45 lines
785 B
Go
45 lines
785 B
Go
|
package wal
|
||
|
|
||
|
import "encoding/binary"
|
||
|
|
||
|
type segmentHeader struct {
|
||
|
CreatedAt int64
|
||
|
ArchivedAt int64
|
||
|
FirstSeqNum int64
|
||
|
LastSeqNum int64 // FirstSeqNum - 1 if empty.
|
||
|
LastTimestampMS int64 // 0 if empty.
|
||
|
InsertAt int64
|
||
|
}
|
||
|
|
||
|
func (h segmentHeader) WriteTo(b []byte) {
|
||
|
vals := []int64{
|
||
|
h.CreatedAt,
|
||
|
h.ArchivedAt,
|
||
|
h.FirstSeqNum,
|
||
|
h.LastSeqNum,
|
||
|
h.LastTimestampMS,
|
||
|
h.InsertAt,
|
||
|
}
|
||
|
|
||
|
for _, val := range vals {
|
||
|
binary.LittleEndian.PutUint64(b[0:8], uint64(val))
|
||
|
b = b[8:]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (h *segmentHeader) ReadFrom(b []byte) {
|
||
|
ptrs := []*int64{
|
||
|
&h.CreatedAt,
|
||
|
&h.ArchivedAt,
|
||
|
&h.FirstSeqNum,
|
||
|
&h.LastSeqNum,
|
||
|
&h.LastTimestampMS,
|
||
|
&h.InsertAt,
|
||
|
}
|
||
|
|
||
|
for _, ptr := range ptrs {
|
||
|
*ptr = int64(binary.LittleEndian.Uint64(b[0:8]))
|
||
|
b = b[8:]
|
||
|
}
|
||
|
}
|