From 57e09334cf351d1c281e4970f7a7cd9c952acbd5 Mon Sep 17 00:00:00 2001 From: Jordan Krage Date: Sat, 26 Aug 2017 08:25:04 -0500 Subject: [PATCH] leverage reflect.MakeMapWithSize introduced in go1.9 --- decode.go | 6 ++---- decode_go18.go | 9 +++++++++ decode_go19.go | 12 ++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 decode_go18.go create mode 100644 decode_go19.go diff --git a/decode.go b/decode.go index e7686f9..b291e47 100644 --- a/decode.go +++ b/decode.go @@ -669,8 +669,7 @@ func objectIntoStruct(structPtr reflect.Value) func(*ObjectDecoder) error { func objectIntoMap(mapPtr reflect.Value) func(*ObjectDecoder) error { return func(o *ObjectDecoder) error { mapValue := mapPtr.Elem() - //TODO go1.9 - MakeMapWithSize - mapValue.Set(reflect.MakeMap(mapValue.Type())) + mapValue.Set(makeMap(mapValue.Type(), o.Len)) elemType := mapValue.Type().Elem() for o.NextEntry() { @@ -697,8 +696,7 @@ func objectAsInterface(o *ObjectDecoder) (interface{}, error) { valType := elementTypeFor(o.ValType) mapType := reflect.MapOf(stringType, valType) - //TODO go1.9 - MakeMapWithSize - mapValue := reflect.MakeMap(mapType) + mapValue := makeMap(mapType, o.Len) for o.NextEntry() { k, err := o.DecodeKey() if err != nil { diff --git a/decode_go18.go b/decode_go18.go new file mode 100644 index 0000000..540ab78 --- /dev/null +++ b/decode_go18.go @@ -0,0 +1,9 @@ +// +build !go1.9 + +package ubjson + +import "reflect" + +func makeMap(typ reflect.Type, _ int) reflect.Value { + return reflect.MakeMap(typ) +} diff --git a/decode_go19.go b/decode_go19.go new file mode 100644 index 0000000..d1c818c --- /dev/null +++ b/decode_go19.go @@ -0,0 +1,12 @@ +// +build go1.9 + +package ubjson + +import "reflect" + +func makeMap(typ reflect.Type, cap int) reflect.Value { + if cap < 0 { + cap = 0 + } + return reflect.MakeMapWithSize(typ, cap) +}