Browse Source

codec: helper_unsafe: nit - move lines about

Ugorji Nwoke 6 years ago
parent
commit
f8b212a5ba
1 changed files with 13 additions and 7 deletions
  1. 13 7
      codec/helper_unsafe.go

+ 13 - 7
codec/helper_unsafe.go

@@ -536,6 +536,12 @@ func (e *Encoder) kUintptr(f *codecFnInfo, rv reflect.Value) {
 
 
 // ------------ map range and map indexing ----------
 // ------------ map range and map indexing ----------
 
 
+// regular calls to map via reflection: MapKeys, MapIndex, MapRange/MapIter etc
+// will always allocate for each map key or value.
+//
+// It is more performant to provide a value that the map entry is set into,
+// and that elides the allocation.
+
 // unsafeMapHashIter
 // unsafeMapHashIter
 //
 //
 // go 1.4+ has runtime/hashmap.go or runtime/map.go which has a
 // go 1.4+ has runtime/hashmap.go or runtime/map.go which has a
@@ -607,6 +613,13 @@ func unsafeSet(p, ptyp, p2 unsafe.Pointer, isref bool) {
 	}
 	}
 }
 }
 
 
+func unsafeMapKVPtr(urv *unsafeReflectValue) unsafe.Pointer {
+	if urv.flag&unsafeFlagIndir == 0 {
+		return unsafe.Pointer(&urv.ptr)
+	}
+	return urv.ptr
+}
+
 func mapRange(m, k, v reflect.Value, mapvalues bool) *unsafeMapIter {
 func mapRange(m, k, v reflect.Value, mapvalues bool) *unsafeMapIter {
 	if m.IsNil() {
 	if m.IsNil() {
 		return &unsafeMapIter{done: true}
 		return &unsafeMapIter{done: true}
@@ -637,13 +650,6 @@ func mapRange(m, k, v reflect.Value, mapvalues bool) *unsafeMapIter {
 	return t
 	return t
 }
 }
 
 
-func unsafeMapKVPtr(urv *unsafeReflectValue) unsafe.Pointer {
-	if urv.flag&unsafeFlagIndir == 0 {
-		return unsafe.Pointer(&urv.ptr)
-	}
-	return urv.ptr
-}
-
 func mapGet(m, k, v reflect.Value) (vv reflect.Value) {
 func mapGet(m, k, v reflect.Value) (vv reflect.Value) {
 	var urv = (*unsafeReflectValue)(unsafe.Pointer(&k))
 	var urv = (*unsafeReflectValue)(unsafe.Pointer(&k))
 	var kptr = unsafeMapKVPtr(urv)
 	var kptr = unsafeMapKVPtr(urv)