mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 19:49:32 +00:00
415 lines
9.9 KiB
Go
415 lines
9.9 KiB
Go
// Created by encgen --output enc_helpers.go; DO NOT EDIT
|
|
|
|
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gob
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
var encArrayHelper = map[reflect.Kind]encHelper{
|
|
reflect.Bool: encBoolArray,
|
|
reflect.Complex64: encComplex64Array,
|
|
reflect.Complex128: encComplex128Array,
|
|
reflect.Float32: encFloat32Array,
|
|
reflect.Float64: encFloat64Array,
|
|
reflect.Int: encIntArray,
|
|
reflect.Int16: encInt16Array,
|
|
reflect.Int32: encInt32Array,
|
|
reflect.Int64: encInt64Array,
|
|
reflect.Int8: encInt8Array,
|
|
reflect.String: encStringArray,
|
|
reflect.Uint: encUintArray,
|
|
reflect.Uint16: encUint16Array,
|
|
reflect.Uint32: encUint32Array,
|
|
reflect.Uint64: encUint64Array,
|
|
reflect.Uintptr: encUintptrArray,
|
|
}
|
|
|
|
var encSliceHelper = map[reflect.Kind]encHelper{
|
|
reflect.Bool: encBoolSlice,
|
|
reflect.Complex64: encComplex64Slice,
|
|
reflect.Complex128: encComplex128Slice,
|
|
reflect.Float32: encFloat32Slice,
|
|
reflect.Float64: encFloat64Slice,
|
|
reflect.Int: encIntSlice,
|
|
reflect.Int16: encInt16Slice,
|
|
reflect.Int32: encInt32Slice,
|
|
reflect.Int64: encInt64Slice,
|
|
reflect.Int8: encInt8Slice,
|
|
reflect.String: encStringSlice,
|
|
reflect.Uint: encUintSlice,
|
|
reflect.Uint16: encUint16Slice,
|
|
reflect.Uint32: encUint32Slice,
|
|
reflect.Uint64: encUint64Slice,
|
|
reflect.Uintptr: encUintptrSlice,
|
|
}
|
|
|
|
func encBoolArray(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encBoolSlice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encBoolSlice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]bool)
|
|
if !ok {
|
|
// It is kind bool but not type bool. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != false || state.sendZero {
|
|
if x {
|
|
state.encodeUint(1)
|
|
} else {
|
|
state.encodeUint(0)
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encComplex64Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encComplex64Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encComplex64Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]complex64)
|
|
if !ok {
|
|
// It is kind complex64 but not type complex64. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0+0i || state.sendZero {
|
|
rpart := floatBits(float64(real(x)))
|
|
ipart := floatBits(float64(imag(x)))
|
|
state.encodeUint(rpart)
|
|
state.encodeUint(ipart)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encComplex128Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encComplex128Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encComplex128Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]complex128)
|
|
if !ok {
|
|
// It is kind complex128 but not type complex128. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0+0i || state.sendZero {
|
|
rpart := floatBits(real(x))
|
|
ipart := floatBits(imag(x))
|
|
state.encodeUint(rpart)
|
|
state.encodeUint(ipart)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encFloat32Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encFloat32Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encFloat32Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]float32)
|
|
if !ok {
|
|
// It is kind float32 but not type float32. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
bits := floatBits(float64(x))
|
|
state.encodeUint(bits)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encFloat64Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encFloat64Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encFloat64Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]float64)
|
|
if !ok {
|
|
// It is kind float64 but not type float64. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
bits := floatBits(x)
|
|
state.encodeUint(bits)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encIntArray(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encIntSlice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encIntSlice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]int)
|
|
if !ok {
|
|
// It is kind int but not type int. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeInt(int64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encInt16Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encInt16Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encInt16Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]int16)
|
|
if !ok {
|
|
// It is kind int16 but not type int16. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeInt(int64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encInt32Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encInt32Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encInt32Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]int32)
|
|
if !ok {
|
|
// It is kind int32 but not type int32. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeInt(int64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encInt64Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encInt64Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encInt64Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]int64)
|
|
if !ok {
|
|
// It is kind int64 but not type int64. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeInt(x)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encInt8Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encInt8Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encInt8Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]int8)
|
|
if !ok {
|
|
// It is kind int8 but not type int8. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeInt(int64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encStringArray(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encStringSlice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encStringSlice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]string)
|
|
if !ok {
|
|
// It is kind string but not type string. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != "" || state.sendZero {
|
|
state.encodeUint(uint64(len(x)))
|
|
state.b.WriteString(x)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encUintArray(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encUintSlice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encUintSlice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]uint)
|
|
if !ok {
|
|
// It is kind uint but not type uint. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeUint(uint64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encUint16Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encUint16Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encUint16Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]uint16)
|
|
if !ok {
|
|
// It is kind uint16 but not type uint16. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeUint(uint64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encUint32Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encUint32Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encUint32Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]uint32)
|
|
if !ok {
|
|
// It is kind uint32 but not type uint32. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeUint(uint64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encUint64Array(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encUint64Slice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encUint64Slice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]uint64)
|
|
if !ok {
|
|
// It is kind uint64 but not type uint64. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeUint(x)
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func encUintptrArray(state *encoderState, v reflect.Value) bool {
|
|
// Can only slice if it is addressable.
|
|
if !v.CanAddr() {
|
|
return false
|
|
}
|
|
return encUintptrSlice(state, v.Slice(0, v.Len()))
|
|
}
|
|
|
|
func encUintptrSlice(state *encoderState, v reflect.Value) bool {
|
|
slice, ok := v.Interface().([]uintptr)
|
|
if !ok {
|
|
// It is kind uintptr but not type uintptr. TODO: We can handle this unsafely.
|
|
return false
|
|
}
|
|
for _, x := range slice {
|
|
if x != 0 || state.sendZero {
|
|
state.encodeUint(uint64(x))
|
|
}
|
|
}
|
|
return true
|
|
}
|