Skip to content

Commit beecea7

Browse files
committed
- updated pointer handling
1 parent 84b76c7 commit beecea7

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

internal/converter/repeated.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ import (
44
"fmt"
55
"strconv"
66
"strings"
7+
"unsafe"
78
)
89

910
type Repeated []string
1011

12+
var intIs64Bit = unsafe.Sizeof(int(0)) == unsafe.Sizeof(uint64(0))
13+
1114
func (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)

0 commit comments

Comments
 (0)