equal
deleted
inserted
replaced
|
1 package danger |
|
2 |
|
3 import ( |
|
4 "reflect" |
|
5 "unsafe" |
|
6 ) |
|
7 |
|
8 // typeID is used as key in encoder and decoder caches to enable using |
|
9 // the optimize runtime.mapaccess2_fast64 function instead of the more |
|
10 // expensive lookup if we were to use reflect.Type as map key. |
|
11 // |
|
12 // typeID holds the pointer to the reflect.Type value, which is unique |
|
13 // in the program. |
|
14 // |
|
15 // https://github.com/segmentio/encoding/blob/master/json/codec.go#L59-L61 |
|
16 type TypeID unsafe.Pointer |
|
17 |
|
18 func MakeTypeID(t reflect.Type) TypeID { |
|
19 // reflect.Type has the fields: |
|
20 // typ unsafe.Pointer |
|
21 // ptr unsafe.Pointer |
|
22 return TypeID((*[2]unsafe.Pointer)(unsafe.Pointer(&t))[1]) |
|
23 } |