internal/impl: add fast-path for IsInitialized
This currently returns uninformative errors from the fast path and then
consults the slow, reflection-based path only when an error is detected.
Perhaps it's worth going through the effort of producing better errors
directly on the fast path.
Change-Id: I68536e9438010dbd97dbaff4f47b78430221d94b
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/171462
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/impl/encode_reflect.go b/internal/impl/encode_reflect.go
index 6e172d9..05ceb33 100644
--- a/internal/impl/encode_reflect.go
+++ b/internal/impl/encode_reflect.go
@@ -22,7 +22,10 @@
return b, nil
}
-var coderEnum = pointerCoderFuncs{sizeEnum, appendEnum}
+var coderEnum = pointerCoderFuncs{
+ size: sizeEnum,
+ marshal: appendEnum,
+}
func sizeEnumNoZero(p pointer, tagsize int, opts marshalOptions) (size int) {
if p.v.Elem().Int() == 0 {
@@ -38,7 +41,10 @@
return appendEnum(b, p, wiretag, opts)
}
-var coderEnumNoZero = pointerCoderFuncs{sizeEnumNoZero, appendEnumNoZero}
+var coderEnumNoZero = pointerCoderFuncs{
+ size: sizeEnumNoZero,
+ marshal: appendEnumNoZero,
+}
func sizeEnumPtr(p pointer, tagsize int, opts marshalOptions) (size int) {
return sizeEnum(pointer{p.v.Elem()}, tagsize, opts)
@@ -48,7 +54,10 @@
return appendEnum(b, pointer{p.v.Elem()}, wiretag, opts)
}
-var coderEnumPtr = pointerCoderFuncs{sizeEnumPtr, appendEnumPtr}
+var coderEnumPtr = pointerCoderFuncs{
+ size: sizeEnumPtr,
+ marshal: appendEnumPtr,
+}
func sizeEnumSlice(p pointer, tagsize int, opts marshalOptions) (size int) {
return sizeEnumSliceReflect(p.v.Elem(), tagsize, opts)
@@ -58,7 +67,10 @@
return appendEnumSliceReflect(b, p.v.Elem(), wiretag, opts)
}
-var coderEnumSlice = pointerCoderFuncs{sizeEnumSlice, appendEnumSlice}
+var coderEnumSlice = pointerCoderFuncs{
+ size: sizeEnumSlice,
+ marshal: appendEnumSlice,
+}
func sizeEnumPackedSlice(p pointer, tagsize int, _ marshalOptions) (size int) {
s := p.v.Elem()
@@ -91,4 +103,7 @@
return b, nil
}
-var coderEnumPackedSlice = pointerCoderFuncs{sizeEnumPackedSlice, appendEnumPackedSlice}
+var coderEnumPackedSlice = pointerCoderFuncs{
+ size: sizeEnumPackedSlice,
+ marshal: appendEnumPackedSlice,
+}