remove unnecessary slice boxing

This commit is contained in:
David 2021-12-20 18:42:36 -05:00
parent 44c8a7659d
commit 562fc231a4
1 changed files with 11 additions and 11 deletions

View File

@ -95,9 +95,9 @@ func parsePayload(stream []uint8) (int64, int) {
return parseNumber(num, chars), pos return parseNumber(num, chars), pos
} }
func parsePackets(stream []uint8) (int, []packet) { func parsePackets(stream []uint8) (int, packet) {
if len(stream) <= 7 { if len(stream) <= 7 {
return 0, []packet{} return 0, packet{}
} }
parsedPacket := packet{} parsedPacket := packet{}
parsedPacket.version = getPacketVersion(stream[0:3]) parsedPacket.version = getPacketVersion(stream[0:3])
@ -105,29 +105,28 @@ func parsePackets(stream []uint8) (int, []packet) {
if parsedPacket.typeID == 4 { if parsedPacket.typeID == 4 {
encoded, consumed := parsePayload(stream[6:]) encoded, consumed := parsePayload(stream[6:])
parsedPacket.encodedNumber = encoded parsedPacket.encodedNumber = encoded
return consumed + 6, []packet{parsedPacket} // 6 is packet header length return consumed + 6, parsedPacket // 6 is packet header length
} else { } else {
parsed := 0 parsed := 0
size, subpacketlength := getSubpacketLength(stream[6], stream[7:]) size, subpacketlength := getSubpacketLength(stream[6], stream[7:])
for { for {
consumed, subs := parsePackets(stream[7+size+parsed:]) consumed, subs := parsePackets(stream[7+size+parsed:])
parsedPacket.subPackets = append(parsedPacket.subPackets, subs...) parsedPacket.subPackets = append(parsedPacket.subPackets, subs)
parsed += consumed parsed += consumed
if size == 11 && int64(len(parsedPacket.subPackets)) == subpacketlength { if size == 11 && int64(len(parsedPacket.subPackets)) == subpacketlength {
return parsed + 7 + size, []packet{parsedPacket} return parsed + 7 + size, parsedPacket
} else if size == 15 && int64(parsed) > subpacketlength || consumed == 0 { } else if size == 15 && int64(parsed) > subpacketlength || consumed == 0 {
return parsed + 7 + size, []packet{parsedPacket} return parsed + 7 + size, parsedPacket
} }
} }
} }
} }
func countVersions(packets []packet) int { func countVersions(pac packet) int {
i := 0 i := int(pac.version)
for _, p := range packets { for _, p := range pac.subPackets {
i += int(p.version) i += countVersions(p)
i += countVersions(p.subPackets)
} }
return i return i
} }
@ -142,6 +141,7 @@ func partOne() {
stream = append(stream, hexMap[hex]...) stream = append(stream, hexMap[hex]...)
} }
_, parsedPacket := parsePackets(stream) _, parsedPacket := parsePackets(stream)
fmt.Println(parsedPacket)
fmt.Println(countVersions(parsedPacket)) fmt.Println(countVersions(parsedPacket))
} }