/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]}
}