ReadFloat64Slice reads []float64 from buffer using ARRAY protocol
(buf *ByteBuffer, err *Error)
| 1105 | |
| 1106 | // ReadFloat64Slice reads []float64 from buffer using ARRAY protocol |
| 1107 | func ReadFloat64Slice(buf *ByteBuffer, err *Error) []float64 { |
| 1108 | byteSize := buf.ReadLength(err) |
| 1109 | if err.HasError() { |
| 1110 | return nil |
| 1111 | } |
| 1112 | if byteSize%8 != 0 { |
| 1113 | *err = DeserializationErrorf("array byte size %d is not aligned to element size %d", byteSize, 8) |
| 1114 | return nil |
| 1115 | } |
| 1116 | if byteSize == 0 { |
| 1117 | return make([]float64, 0) |
| 1118 | } |
| 1119 | if !buf.CheckReadable(byteSize, err) { |
| 1120 | return nil |
| 1121 | } |
| 1122 | length := byteSize / 8 |
| 1123 | if isLittleEndian { |
| 1124 | result := make([]float64, length) |
| 1125 | buf.Read(unsafe.Slice((*byte)(unsafe.Pointer(&result[0])), byteSize)) |
| 1126 | return result |
| 1127 | } else { |
| 1128 | result := make([]float64, length) |
| 1129 | for i := 0; i < length; i++ { |
| 1130 | result[i] = buf.ReadFloat64(err) |
| 1131 | } |
| 1132 | return result |
| 1133 | } |
| 1134 | } |
| 1135 | |
| 1136 | // ============================================================================ |
| 1137 | // float16SliceSerializer - optimized []float16.Float16 serialization |