소스 검색

codec: move references to SetXXXExt from format handler files

We want to reduce dependency on reflect across the package.

To that end, we will only depend on reflect.Kind and reflect.Type
across the package but not reflect.Value.

This way, we can limit reflect to just one mode of operation i.e.
safe mode, and keep unsafe mode using unsafe semantics without
incurring unnecessary reflect cost also.
Ugorji Nwoke 6 년 전
부모
커밋
8c78ba40d8
7개의 변경된 파일38개의 추가작업 그리고 36개의 파일을 삭제
  1. 0 6
      codec/binc.go
  2. 0 6
      codec/cbor.go
  3. 0 6
      codec/json.go
  4. 0 6
      codec/msgpack.go
  5. 38 0
      codec/register_ext.go
  6. 0 6
      codec/simple.go
  7. 0 6
      codec/xml.go

+ 0 - 6
codec/binc.go

@@ -5,7 +5,6 @@ package codec
 
 import (
 	"math"
-	"reflect"
 	"time"
 )
 
@@ -989,11 +988,6 @@ type BincHandle struct {
 // Name returns the name of the handle: binc
 func (h *BincHandle) Name() string { return "binc" }
 
-// SetBytesExt sets an extension
-func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
-	return h.SetExt(rt, tag, makeExt(ext))
-}
-
 func (h *BincHandle) newEncDriver(e *Encoder) encDriver {
 	return &bincEncDriver{e: e, h: h, w: e.w()}
 }

+ 0 - 6
codec/cbor.go

@@ -5,7 +5,6 @@ package codec
 
 import (
 	"math"
-	"reflect"
 	"time"
 )
 
@@ -864,11 +863,6 @@ type CborHandle struct {
 // Name returns the name of the handle: cbor
 func (h *CborHandle) Name() string { return "cbor" }
 
-// SetInterfaceExt sets an extension
-func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
-	return h.SetExt(rt, tag, makeExt(ext))
-}
-
 func (h *CborHandle) newEncDriver(e *Encoder) encDriver {
 	return &cborEncDriver{e: e, w: e.w(), h: h}
 }

+ 0 - 6
codec/json.go

@@ -25,7 +25,6 @@ import (
 	"bytes"
 	"encoding/base64"
 	"math"
-	"reflect"
 	"strconv"
 	"time"
 	"unicode"
@@ -1457,11 +1456,6 @@ func (h *JsonHandle) recreateEncDriver(ed encDriver) (v bool) {
 	return v != h.typical()
 }
 
-// SetInterfaceExt sets an extension
-func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
-	return h.SetExt(rt, tag, makeExt(ext))
-}
-
 func (h *JsonHandle) newEncDriver(e *Encoder) (ee encDriver) {
 	var hd *jsonEncDriver
 	if h.typical() {

+ 0 - 6
codec/msgpack.go

@@ -24,7 +24,6 @@ import (
 	"io"
 	"math"
 	"net/rpc"
-	"reflect"
 	"time"
 )
 
@@ -971,11 +970,6 @@ type MsgpackHandle struct {
 // Name returns the name of the handle: msgpack
 func (h *MsgpackHandle) Name() string { return "msgpack" }
 
-// SetBytesExt sets an extension
-func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
-	return h.SetExt(rt, tag, makeExt(ext))
-}
-
 func (h *MsgpackHandle) newEncDriver(e *Encoder) encDriver {
 	return &msgpackEncDriver{e: e, w: e.w(), h: h}
 }

+ 38 - 0
codec/register_ext.go

@@ -0,0 +1,38 @@
+// Copyright (c) 2012-2018 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+package codec
+
+import "reflect"
+
+// This file exists, so that the files for specific formats do not all import reflect.
+// This just helps us ensure that reflect package is isolated to a few files.
+
+// SetInterfaceExt sets an extension
+func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
+	return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// SetInterfaceExt sets an extension
+func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
+	return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// SetBytesExt sets an extension
+func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
+	return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// SetBytesExt sets an extension
+func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
+	return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// SetBytesExt sets an extension
+func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
+	return h.SetExt(rt, tag, makeExt(ext))
+}
+
+// func (h *XMLHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
+// 	return h.SetExt(rt, tag, &interfaceExtWrapper{InterfaceExt: ext})
+// }

+ 0 - 6
codec/simple.go

@@ -5,7 +5,6 @@ package codec
 
 import (
 	"math"
-	"reflect"
 	"time"
 )
 
@@ -627,11 +626,6 @@ type SimpleHandle struct {
 // Name returns the name of the handle: simple
 func (h *SimpleHandle) Name() string { return "simple" }
 
-// SetBytesExt sets an extension
-func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
-	return h.SetExt(rt, tag, makeExt(ext))
-}
-
 // func (h *SimpleHandle) hasElemSeparators() bool { return true } // as it implements Write(Map|Array)XXX
 
 func (h *SimpleHandle) newEncDriver(e *Encoder) encDriver {

+ 0 - 6
codec/xml.go

@@ -5,8 +5,6 @@
 
 package codec
 
-import "reflect"
-
 /*
 
 A strict Non-validating namespace-aware XML 1.0 parser and (en|de)coder.
@@ -500,9 +498,5 @@ func (h *XMLHandle) newDecDriver(d *Decoder) decDriver {
 	return &hd
 }
 
-func (h *XMLHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {
-	return h.SetExt(rt, tag, &interfaceExtWrapper{InterfaceExt: ext})
-}
-
 var _ decDriver = (*xmlDecDriver)(nil)
 var _ encDriver = (*xmlEncDriver)(nil)