/packet/packet.go
package packet
import "bytex64.net/code/bitsmash/ac"
type Packet interface {
Length() int
ByteLength() int
Encode(ac.CodecManager)
Pixels() []uint8
String() string
}
type PacketRun struct {
Length int
Bytes int
Depth int
Head Packet
}
type ByPacketEfficiency []PacketRun
func (a ByPacketEfficiency) Len() int {
return len(a)
}
func (a ByPacketEfficiency) Swap(i, j int) {
a[i], a[j] = a[j], a[i]
}
func (a ByPacketEfficiency) Less(i, j int) bool {
e1 := float64(a[i].Length) / float64(a[i].Bytes)
e2 := float64(a[j].Length) / float64(a[j].Bytes)
if e1 == e2 {
if a[i].Depth == a[j].Depth {
return a[j].Head.Length() < a[i].Head.Length()
} else {
return a[i].Depth < a[j].Depth
}
} else {
return e1 > e2
}
}