28 lines
845 B
JavaScript
28 lines
845 B
JavaScript
import { BeeArgumentError } from "../utils/error.js";
|
|
export const SPAN_SIZE = 8; // we limit the maximum span size in 32 bits to avoid BigInt compatibility issues
|
|
|
|
const MAX_SPAN_LENGTH = Math.pow(2, 32) - 1;
|
|
/**
|
|
* Create a span for storing the length of the chunk
|
|
*
|
|
* The length is encoded in 64-bit little endian.
|
|
*
|
|
* @param length The length of the span
|
|
*/
|
|
|
|
export function makeSpan(length) {
|
|
if (length <= 0) {
|
|
throw new BeeArgumentError('invalid length for span', length);
|
|
}
|
|
|
|
if (length > MAX_SPAN_LENGTH) {
|
|
throw new BeeArgumentError('invalid length (> MAX_SPAN_LENGTH)', length);
|
|
}
|
|
|
|
const span = new Uint8Array(SPAN_SIZE);
|
|
const dataView = new DataView(span.buffer);
|
|
const littleEndian = true;
|
|
const lengthLower32 = length & 0xffffffff;
|
|
dataView.setUint32(0, lengthLower32, littleEndian);
|
|
return span;
|
|
} |