...

Source file src/pkg/encoding/gob/enc_helpers.go

     1	// Code generated by go run encgen.go -output enc_helpers.go; DO NOT EDIT.
     2	
     3	// Copyright 2014 The Go Authors. All rights reserved.
     4	// Use of this source code is governed by a BSD-style
     5	// license that can be found in the LICENSE file.
     6	
     7	package gob
     8	
     9	import (
    10		"reflect"
    11	)
    12	
    13	var encArrayHelper = map[reflect.Kind]encHelper{
    14		reflect.Bool:       encBoolArray,
    15		reflect.Complex64:  encComplex64Array,
    16		reflect.Complex128: encComplex128Array,
    17		reflect.Float32:    encFloat32Array,
    18		reflect.Float64:    encFloat64Array,
    19		reflect.Int:        encIntArray,
    20		reflect.Int16:      encInt16Array,
    21		reflect.Int32:      encInt32Array,
    22		reflect.Int64:      encInt64Array,
    23		reflect.Int8:       encInt8Array,
    24		reflect.String:     encStringArray,
    25		reflect.Uint:       encUintArray,
    26		reflect.Uint16:     encUint16Array,
    27		reflect.Uint32:     encUint32Array,
    28		reflect.Uint64:     encUint64Array,
    29		reflect.Uintptr:    encUintptrArray,
    30	}
    31	
    32	var encSliceHelper = map[reflect.Kind]encHelper{
    33		reflect.Bool:       encBoolSlice,
    34		reflect.Complex64:  encComplex64Slice,
    35		reflect.Complex128: encComplex128Slice,
    36		reflect.Float32:    encFloat32Slice,
    37		reflect.Float64:    encFloat64Slice,
    38		reflect.Int:        encIntSlice,
    39		reflect.Int16:      encInt16Slice,
    40		reflect.Int32:      encInt32Slice,
    41		reflect.Int64:      encInt64Slice,
    42		reflect.Int8:       encInt8Slice,
    43		reflect.String:     encStringSlice,
    44		reflect.Uint:       encUintSlice,
    45		reflect.Uint16:     encUint16Slice,
    46		reflect.Uint32:     encUint32Slice,
    47		reflect.Uint64:     encUint64Slice,
    48		reflect.Uintptr:    encUintptrSlice,
    49	}
    50	
    51	func encBoolArray(state *encoderState, v reflect.Value) bool {
    52		// Can only slice if it is addressable.
    53		if !v.CanAddr() {
    54			return false
    55		}
    56		return encBoolSlice(state, v.Slice(0, v.Len()))
    57	}
    58	
    59	func encBoolSlice(state *encoderState, v reflect.Value) bool {
    60		slice, ok := v.Interface().([]bool)
    61		if !ok {
    62			// It is kind bool but not type bool. TODO: We can handle this unsafely.
    63			return false
    64		}
    65		for _, x := range slice {
    66			if x != false || state.sendZero {
    67				if x {
    68					state.encodeUint(1)
    69				} else {
    70					state.encodeUint(0)
    71				}
    72			}
    73		}
    74		return true
    75	}
    76	
    77	func encComplex64Array(state *encoderState, v reflect.Value) bool {
    78		// Can only slice if it is addressable.
    79		if !v.CanAddr() {
    80			return false
    81		}
    82		return encComplex64Slice(state, v.Slice(0, v.Len()))
    83	}
    84	
    85	func encComplex64Slice(state *encoderState, v reflect.Value) bool {
    86		slice, ok := v.Interface().([]complex64)
    87		if !ok {
    88			// It is kind complex64 but not type complex64. TODO: We can handle this unsafely.
    89			return false
    90		}
    91		for _, x := range slice {
    92			if x != 0+0i || state.sendZero {
    93				rpart := floatBits(float64(real(x)))
    94				ipart := floatBits(float64(imag(x)))
    95				state.encodeUint(rpart)
    96				state.encodeUint(ipart)
    97			}
    98		}
    99		return true
   100	}
   101	
   102	func encComplex128Array(state *encoderState, v reflect.Value) bool {
   103		// Can only slice if it is addressable.
   104		if !v.CanAddr() {
   105			return false
   106		}
   107		return encComplex128Slice(state, v.Slice(0, v.Len()))
   108	}
   109	
   110	func encComplex128Slice(state *encoderState, v reflect.Value) bool {
   111		slice, ok := v.Interface().([]complex128)
   112		if !ok {
   113			// It is kind complex128 but not type complex128. TODO: We can handle this unsafely.
   114			return false
   115		}
   116		for _, x := range slice {
   117			if x != 0+0i || state.sendZero {
   118				rpart := floatBits(real(x))
   119				ipart := floatBits(imag(x))
   120				state.encodeUint(rpart)
   121				state.encodeUint(ipart)
   122			}
   123		}
   124		return true
   125	}
   126	
   127	func encFloat32Array(state *encoderState, v reflect.Value) bool {
   128		// Can only slice if it is addressable.
   129		if !v.CanAddr() {
   130			return false
   131		}
   132		return encFloat32Slice(state, v.Slice(0, v.Len()))
   133	}
   134	
   135	func encFloat32Slice(state *encoderState, v reflect.Value) bool {
   136		slice, ok := v.Interface().([]float32)
   137		if !ok {
   138			// It is kind float32 but not type float32. TODO: We can handle this unsafely.
   139			return false
   140		}
   141		for _, x := range slice {
   142			if x != 0 || state.sendZero {
   143				bits := floatBits(float64(x))
   144				state.encodeUint(bits)
   145			}
   146		}
   147		return true
   148	}
   149	
   150	func encFloat64Array(state *encoderState, v reflect.Value) bool {
   151		// Can only slice if it is addressable.
   152		if !v.CanAddr() {
   153			return false
   154		}
   155		return encFloat64Slice(state, v.Slice(0, v.Len()))
   156	}
   157	
   158	func encFloat64Slice(state *encoderState, v reflect.Value) bool {
   159		slice, ok := v.Interface().([]float64)
   160		if !ok {
   161			// It is kind float64 but not type float64. TODO: We can handle this unsafely.
   162			return false
   163		}
   164		for _, x := range slice {
   165			if x != 0 || state.sendZero {
   166				bits := floatBits(x)
   167				state.encodeUint(bits)
   168			}
   169		}
   170		return true
   171	}
   172	
   173	func encIntArray(state *encoderState, v reflect.Value) bool {
   174		// Can only slice if it is addressable.
   175		if !v.CanAddr() {
   176			return false
   177		}
   178		return encIntSlice(state, v.Slice(0, v.Len()))
   179	}
   180	
   181	func encIntSlice(state *encoderState, v reflect.Value) bool {
   182		slice, ok := v.Interface().([]int)
   183		if !ok {
   184			// It is kind int but not type int. TODO: We can handle this unsafely.
   185			return false
   186		}
   187		for _, x := range slice {
   188			if x != 0 || state.sendZero {
   189				state.encodeInt(int64(x))
   190			}
   191		}
   192		return true
   193	}
   194	
   195	func encInt16Array(state *encoderState, v reflect.Value) bool {
   196		// Can only slice if it is addressable.
   197		if !v.CanAddr() {
   198			return false
   199		}
   200		return encInt16Slice(state, v.Slice(0, v.Len()))
   201	}
   202	
   203	func encInt16Slice(state *encoderState, v reflect.Value) bool {
   204		slice, ok := v.Interface().([]int16)
   205		if !ok {
   206			// It is kind int16 but not type int16. TODO: We can handle this unsafely.
   207			return false
   208		}
   209		for _, x := range slice {
   210			if x != 0 || state.sendZero {
   211				state.encodeInt(int64(x))
   212			}
   213		}
   214		return true
   215	}
   216	
   217	func encInt32Array(state *encoderState, v reflect.Value) bool {
   218		// Can only slice if it is addressable.
   219		if !v.CanAddr() {
   220			return false
   221		}
   222		return encInt32Slice(state, v.Slice(0, v.Len()))
   223	}
   224	
   225	func encInt32Slice(state *encoderState, v reflect.Value) bool {
   226		slice, ok := v.Interface().([]int32)
   227		if !ok {
   228			// It is kind int32 but not type int32. TODO: We can handle this unsafely.
   229			return false
   230		}
   231		for _, x := range slice {
   232			if x != 0 || state.sendZero {
   233				state.encodeInt(int64(x))
   234			}
   235		}
   236		return true
   237	}
   238	
   239	func encInt64Array(state *encoderState, v reflect.Value) bool {
   240		// Can only slice if it is addressable.
   241		if !v.CanAddr() {
   242			return false
   243		}
   244		return encInt64Slice(state, v.Slice(0, v.Len()))
   245	}
   246	
   247	func encInt64Slice(state *encoderState, v reflect.Value) bool {
   248		slice, ok := v.Interface().([]int64)
   249		if !ok {
   250			// It is kind int64 but not type int64. TODO: We can handle this unsafely.
   251			return false
   252		}
   253		for _, x := range slice {
   254			if x != 0 || state.sendZero {
   255				state.encodeInt(x)
   256			}
   257		}
   258		return true
   259	}
   260	
   261	func encInt8Array(state *encoderState, v reflect.Value) bool {
   262		// Can only slice if it is addressable.
   263		if !v.CanAddr() {
   264			return false
   265		}
   266		return encInt8Slice(state, v.Slice(0, v.Len()))
   267	}
   268	
   269	func encInt8Slice(state *encoderState, v reflect.Value) bool {
   270		slice, ok := v.Interface().([]int8)
   271		if !ok {
   272			// It is kind int8 but not type int8. TODO: We can handle this unsafely.
   273			return false
   274		}
   275		for _, x := range slice {
   276			if x != 0 || state.sendZero {
   277				state.encodeInt(int64(x))
   278			}
   279		}
   280		return true
   281	}
   282	
   283	func encStringArray(state *encoderState, v reflect.Value) bool {
   284		// Can only slice if it is addressable.
   285		if !v.CanAddr() {
   286			return false
   287		}
   288		return encStringSlice(state, v.Slice(0, v.Len()))
   289	}
   290	
   291	func encStringSlice(state *encoderState, v reflect.Value) bool {
   292		slice, ok := v.Interface().([]string)
   293		if !ok {
   294			// It is kind string but not type string. TODO: We can handle this unsafely.
   295			return false
   296		}
   297		for _, x := range slice {
   298			if x != "" || state.sendZero {
   299				state.encodeUint(uint64(len(x)))
   300				state.b.WriteString(x)
   301			}
   302		}
   303		return true
   304	}
   305	
   306	func encUintArray(state *encoderState, v reflect.Value) bool {
   307		// Can only slice if it is addressable.
   308		if !v.CanAddr() {
   309			return false
   310		}
   311		return encUintSlice(state, v.Slice(0, v.Len()))
   312	}
   313	
   314	func encUintSlice(state *encoderState, v reflect.Value) bool {
   315		slice, ok := v.Interface().([]uint)
   316		if !ok {
   317			// It is kind uint but not type uint. TODO: We can handle this unsafely.
   318			return false
   319		}
   320		for _, x := range slice {
   321			if x != 0 || state.sendZero {
   322				state.encodeUint(uint64(x))
   323			}
   324		}
   325		return true
   326	}
   327	
   328	func encUint16Array(state *encoderState, v reflect.Value) bool {
   329		// Can only slice if it is addressable.
   330		if !v.CanAddr() {
   331			return false
   332		}
   333		return encUint16Slice(state, v.Slice(0, v.Len()))
   334	}
   335	
   336	func encUint16Slice(state *encoderState, v reflect.Value) bool {
   337		slice, ok := v.Interface().([]uint16)
   338		if !ok {
   339			// It is kind uint16 but not type uint16. TODO: We can handle this unsafely.
   340			return false
   341		}
   342		for _, x := range slice {
   343			if x != 0 || state.sendZero {
   344				state.encodeUint(uint64(x))
   345			}
   346		}
   347		return true
   348	}
   349	
   350	func encUint32Array(state *encoderState, v reflect.Value) bool {
   351		// Can only slice if it is addressable.
   352		if !v.CanAddr() {
   353			return false
   354		}
   355		return encUint32Slice(state, v.Slice(0, v.Len()))
   356	}
   357	
   358	func encUint32Slice(state *encoderState, v reflect.Value) bool {
   359		slice, ok := v.Interface().([]uint32)
   360		if !ok {
   361			// It is kind uint32 but not type uint32. TODO: We can handle this unsafely.
   362			return false
   363		}
   364		for _, x := range slice {
   365			if x != 0 || state.sendZero {
   366				state.encodeUint(uint64(x))
   367			}
   368		}
   369		return true
   370	}
   371	
   372	func encUint64Array(state *encoderState, v reflect.Value) bool {
   373		// Can only slice if it is addressable.
   374		if !v.CanAddr() {
   375			return false
   376		}
   377		return encUint64Slice(state, v.Slice(0, v.Len()))
   378	}
   379	
   380	func encUint64Slice(state *encoderState, v reflect.Value) bool {
   381		slice, ok := v.Interface().([]uint64)
   382		if !ok {
   383			// It is kind uint64 but not type uint64. TODO: We can handle this unsafely.
   384			return false
   385		}
   386		for _, x := range slice {
   387			if x != 0 || state.sendZero {
   388				state.encodeUint(x)
   389			}
   390		}
   391		return true
   392	}
   393	
   394	func encUintptrArray(state *encoderState, v reflect.Value) bool {
   395		// Can only slice if it is addressable.
   396		if !v.CanAddr() {
   397			return false
   398		}
   399		return encUintptrSlice(state, v.Slice(0, v.Len()))
   400	}
   401	
   402	func encUintptrSlice(state *encoderState, v reflect.Value) bool {
   403		slice, ok := v.Interface().([]uintptr)
   404		if !ok {
   405			// It is kind uintptr but not type uintptr. TODO: We can handle this unsafely.
   406			return false
   407		}
   408		for _, x := range slice {
   409			if x != 0 || state.sendZero {
   410				state.encodeUint(uint64(x))
   411			}
   412		}
   413		return true
   414	}
   415	

View as plain text