(ctx *WriteContext, value reflect.Value)
| 376 | } |
| 377 | |
| 378 | func (s float32ArraySerializer) WriteData(ctx *WriteContext, value reflect.Value) { |
| 379 | buf := ctx.Buffer() |
| 380 | length := value.Len() |
| 381 | size := length * 4 |
| 382 | buf.WriteLength(size) |
| 383 | if length > 0 { |
| 384 | if value.CanAddr() && isLittleEndian { |
| 385 | // Fast path: direct memory copy - little-endian only |
| 386 | ptr := value.Addr().UnsafePointer() |
| 387 | buf.WriteBinary(unsafe.Slice((*byte)(ptr), size)) |
| 388 | } else { |
| 389 | // Slow path for non-addressable arrays or big-endian |
| 390 | for i := 0; i < length; i++ { |
| 391 | buf.WriteFloat32(float32(value.Index(i).Float())) |
| 392 | } |
| 393 | } |
| 394 | } |
| 395 | } |
| 396 | |
| 397 | func (s float32ArraySerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) { |
| 398 | writeArrayRefAndType(ctx, refMode, writeType, value, FLOAT32_ARRAY) |
no test coverage detected