bilibili-backup/app/service/bbq/recsys-recall/model/tuple.go
2019-04-22 02:59:20 +00:00

62 lines
966 B
Go

package model
import (
"encoding/binary"
"math"
)
const (
_tupleSize = 12
)
// Tuple .
type Tuple struct {
Svid uint64
Score float32
}
// PriorityTuple .
type PriorityTuple struct {
Tuple
Tag string
Name string
Priority int32
}
// ToBytes .
func (t *Tuple) ToBytes() []byte {
b := make([]byte, 12)
b[0] = byte(t.Svid)
b[1] = byte(t.Svid >> 8)
b[2] = byte(t.Svid >> 16)
b[3] = byte(t.Svid >> 24)
b[4] = byte(t.Svid >> 32)
b[5] = byte(t.Svid >> 40)
b[6] = byte(t.Svid >> 48)
b[7] = byte(t.Svid >> 56)
// score
score := math.Float32bits(t.Score)
b[8] = byte(score)
b[9] = byte(score >> 8)
b[10] = byte(score >> 16)
b[11] = byte(score >> 24)
return b
}
// ParseTuple .
func ParseTuple(b []byte) *Tuple {
svid := binary.LittleEndian.Uint64(b[:8])
score := math.Float32frombits(binary.LittleEndian.Uint32(b[8:12]))
return &Tuple{
Svid: svid,
Score: score,
}
}
// TupleSize .
func TupleSize() int {
return _tupleSize
}