/packet/direct.go
package packet
import (
"fmt"
"bytex64.net/code/bitsmash/ac"
)
type DirectPacket struct {
c1, c2 uint8
}
func (*DirectPacket) Length() int {
return 2
}
func (*DirectPacket) ByteLength() int {
return 1
}
func (self *DirectPacket) Encode(encoder ac.CodecManager) {
encoder.Encode(CONTEXT_COLOR, uint32(self.c1))
encoder.Encode(CONTEXT_COLOR, uint32(self.c2))
}
func DecodeDirect(decoder ac.CodecManager) Packet {
c1 := byte(decoder.Decode(CONTEXT_COLOR))
c2 := byte(decoder.Decode(CONTEXT_COLOR))
return &DirectPacket{c1, c2}
}
func (self *DirectPacket) Pixels() []uint8 {
return []uint8{self.c1, self.c2}
}
func (self *DirectPacket) String() string {
return fmt.Sprintf("Direct colors (%d, %d)", self.c1, self.c2)
}
func ScanDirect(pixels []uint8) Packet {
var p [2]uint8
// This will still succeed even if only one pixel is available. The
// second pixel will be zero
copy(p[:], pixels[:])
return &DirectPacket{p[0], p[1]}
}