aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/gob/encode.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2014-10-17 12:37:41 -0700
committerRob Pike <r@golang.org>2014-10-17 12:37:41 -0700
commit9965e4022030f56fc241be8934d5e6b95ac84900 (patch)
tree08efd013bcfb057a883b25c61df1e379afee721f /src/encoding/gob/encode.go
parentf4de59e234bfa7fb2a3a86764f390b09d4249a9b (diff)
downloadgo-9965e4022030f56fc241be8934d5e6b95ac84900.tar.xz
encoding/gob: custom array/slice decoders
Use go generate to write better loops for decoding arrays, just as we did for encoding. It doesn't help as much, relatively speaking, but it's still noticeable. benchmark old ns/op new ns/op delta BenchmarkDecodeComplex128Slice 202348 184529 -8.81% BenchmarkDecodeFloat64Slice 135800 120979 -10.91% BenchmarkDecodeInt32Slice 121200 105149 -13.24% BenchmarkDecodeStringSlice 288129 278214 -3.44% LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/154420044
Diffstat (limited to 'src/encoding/gob/encode.go')
-rw-r--r--src/encoding/gob/encode.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/encoding/gob/encode.go b/src/encoding/gob/encode.go
index 3b8d0b4271..3da848c851 100644
--- a/src/encoding/gob/encode.go
+++ b/src/encoding/gob/encode.go
@@ -508,7 +508,7 @@ func encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp, building map[
}
// Slices have a header; we decode it to find the underlying array.
elemOp, elemIndir := encOpFor(t.Elem(), inProgress, building)
- helper := sliceHelper[t.Elem().Kind()]
+ helper := encSliceHelper[t.Elem().Kind()]
op = func(i *encInstr, state *encoderState, slice reflect.Value) {
if !state.sendZero && slice.Len() == 0 {
return
@@ -519,7 +519,7 @@ func encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp, building map[
case reflect.Array:
// True arrays have size in the type.
elemOp, elemIndir := encOpFor(t.Elem(), inProgress, building)
- helper := arrayHelper[t.Elem().Kind()]
+ helper := encArrayHelper[t.Elem().Kind()]
op = func(i *encInstr, state *encoderState, array reflect.Value) {
state.update(i)
state.enc.encodeArray(state.b, array, *elemOp, elemIndir, array.Len(), helper)