24 lines
620 B
Go
24 lines
620 B
Go
//go:build noasm || nounsafe || gccgo || appengine
|
|
|
|
/**
|
|
* Reed-Solomon Coding over 8-bit values.
|
|
*
|
|
* Copyright 2023, Klaus Post
|
|
*/
|
|
|
|
package reedsolomon
|
|
|
|
// AllocAligned allocates 'shards' slices, with 'each' bytes.
|
|
// Each slice will start on a 64 byte aligned boundary.
|
|
func AllocAligned(shards, each int) [][]byte {
|
|
eachAligned := ((each + 63) / 64) * 64
|
|
total := make([]byte, eachAligned*shards+63)
|
|
// We cannot do initial align without "unsafe", just use native alignment.
|
|
res := make([][]byte, shards)
|
|
for i := range res {
|
|
res[i] = total[:each:eachAligned]
|
|
total = total[eachAligned:]
|
|
}
|
|
return res
|
|
}
|