MCPcopy Create free account
hub / github.com/apache/fory / ReadIntSlice

Function ReadIntSlice

go/fory/slice_primitive.go:1257–1313  ·  view source on GitHub ↗

ReadIntSlice reads []int from buffer using ARRAY protocol

(buf *ByteBuffer, err *Error)

Source from the content-addressed store, hash-verified

1255
1256// ReadIntSlice reads []int from buffer using ARRAY protocol
1257func ReadIntSlice(buf *ByteBuffer, err *Error) []int {
1258 if strconv.IntSize == 64 {
1259 byteSize := buf.ReadLength(err)
1260 if err.HasError() {
1261 return nil
1262 }
1263 if byteSize%8 != 0 {
1264 *err = DeserializationErrorf("array byte size %d is not aligned to element size %d", byteSize, 8)
1265 return nil
1266 }
1267 if byteSize == 0 {
1268 return make([]int, 0)
1269 }
1270 if !buf.CheckReadable(byteSize, err) {
1271 return nil
1272 }
1273 length := byteSize / 8
1274 if isLittleEndian {
1275 result := make([]int, length)
1276 buf.Read(unsafe.Slice((*byte)(unsafe.Pointer(&result[0])), byteSize))
1277 return result
1278 } else {
1279 result := make([]int, length)
1280 for i := 0; i < length; i++ {
1281 result[i] = int(buf.ReadInt64(err))
1282 }
1283 return result
1284 }
1285 } else {
1286 byteSize := buf.ReadLength(err)
1287 if err.HasError() {
1288 return nil
1289 }
1290 if byteSize%4 != 0 {
1291 *err = DeserializationErrorf("array byte size %d is not aligned to element size %d", byteSize, 4)
1292 return nil
1293 }
1294 if byteSize == 0 {
1295 return make([]int, 0)
1296 }
1297 if !buf.CheckReadable(byteSize, err) {
1298 return nil
1299 }
1300 length := byteSize / 4
1301 if isLittleEndian {
1302 result := make([]int, length)
1303 buf.Read(unsafe.Slice((*byte)(unsafe.Pointer(&result[0])), byteSize))
1304 return result
1305 } else {
1306 result := make([]int, length)
1307 for i := 0; i < length; i++ {
1308 result[i] = int(buf.ReadInt32(err))
1309 }
1310 return result
1311 }
1312 }
1313}
1314

Callers 2

ReadDataMethod · 0.85
ReadIntSliceMethod · 0.85

Calls 8

DeserializationErrorfFunction · 0.85
ReadLengthMethod · 0.80
CheckReadableMethod · 0.80
SliceMethod · 0.80
ReadMethod · 0.65
HasErrorMethod · 0.45
ReadInt64Method · 0.45
ReadInt32Method · 0.45

Tested by

no test coverage detected