/bs/codec_manager.go
package bs

import (
    "bytex64.net/code/bitsmash/packet"
    "bytex64.net/code/bitsmash/ac"
)

func (self *BitSmash) codecManagerInit(c ac.CodecManager) {
    pm := self.paletteMap
    var colorBiases [17]uint32
    for i := 0; i < 17; i++ {
        colorBiases[i] = uint32(pm & 1)
        pm >>= 1
    }

    c.AddModel(packet.CONTEXT_PACKET_TYPE,     ac.NewModelOrder0(4))
    c.AddModel(packet.CONTEXT_COLOR,           ac.NewModelOrder0PreBias(17, colorBiases[:]))
    c.AddModel(packet.CONTEXT_PATTERN_NUMBER,  ac.NewModelOrder0PreBias(16, packet.ContextBias(packet.CONTEXT_PATTERN_NUMBER)))
    c.AddModel(packet.CONTEXT_PATTERN_REPEAT,  ac.NewModelOrder0PreBias(8,  packet.ContextBias(packet.CONTEXT_PATTERN_REPEAT)))
    c.AddModel(packet.CONTEXT_RLE_REPEAT,      ac.NewModelOrder0(16))
    c.AddModel(packet.CONTEXT_REPEAT_DISTANCE, ac.NewModelOrder0PreBias(32, packet.ContextBias(packet.CONTEXT_REPEAT_DISTANCE)))
    c.AddModel(packet.CONTEXT_REPEAT_LENGTH,   ac.NewModelOrder0PreBias(8,  packet.ContextBias(packet.CONTEXT_REPEAT_LENGTH)))
}