File tree Expand file tree Collapse file tree 1 file changed +12
-0
lines changed
Expand file tree Collapse file tree 1 file changed +12
-0
lines changed Original file line number Diff line number Diff line change @@ -4,10 +4,13 @@ import (
44 "fmt"
55 "strconv"
66 "strings"
7+ "unsafe"
78)
89
910type Repeated []string
1011
12+ var intIs64Bit = unsafe .Sizeof (int (0 )) == unsafe .Sizeof (uint64 (0 ))
13+
1114func (r Repeated ) AsInts () ([]int , error ) {
1215 var result = make ([]int , 0 , len (r ))
1316 for _ , item := range r {
@@ -31,6 +34,9 @@ func (r Repeated) AsUInts() ([]uint, error) {
3134 if err != nil {
3235 return nil , err
3336 }
37+ if intIs64Bit {
38+ return * (* []uint )(unsafe .Pointer (& v )), nil
39+ }
3440 result := make ([]uint , len (v ))
3541 for i , item := range v {
3642 result [i ] = uint (item )
@@ -43,6 +49,9 @@ func (r Repeated) AsInt64s() ([]int64, error) {
4349 if err != nil {
4450 return nil , err
4551 }
52+ if intIs64Bit {
53+ return * (* []int64 )(unsafe .Pointer (& v )), nil
54+ }
4655 result := make ([]int64 , len (v ))
4756 for i , item := range v {
4857 result [i ] = int64 (item )
@@ -55,6 +64,9 @@ func (r Repeated) AsUInt64s() ([]uint64, error) {
5564 if err != nil {
5665 return nil , err
5766 }
67+ if intIs64Bit {
68+ return * (* []uint64 )(unsafe .Pointer (& v )), nil
69+ }
5870 result := make ([]uint64 , len (v ))
5971 for i , item := range v {
6072 result [i ] = uint64 (item )
You can’t perform that action at this time.
0 commit comments