Initial commit
This commit is contained in:
50
node_modules/@maplibre/mlt/dist/decoding/bigEndianDecode.js
generated
vendored
Normal file
50
node_modules/@maplibre/mlt/dist/decoding/bigEndianDecode.js
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
import { bswap32 } from "./fastPforShared";
|
||||
/**
|
||||
* Decodes big-endian bytes into `out` without allocating the output buffer.
|
||||
*
|
||||
* This function does not copy `bytes`; it writes decoded words into the provided `out` array.
|
||||
* For aligned inputs it may create a temporary typed-array view (`Uint32Array`) over `bytes.buffer`
|
||||
* to speed up decoding.
|
||||
*
|
||||
* If `byteLength` is not a multiple of 4, the final word is padded with zeros.
|
||||
*
|
||||
* @returns Number of int32 words written.
|
||||
* @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.
|
||||
*/
|
||||
export function decodeBigEndianInt32sInto(bytes, offset, byteLength, out) {
|
||||
if (offset < 0 || byteLength < 0 || offset + byteLength > bytes.length) {
|
||||
throw new RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${offset}, byteLength=${byteLength}, bytes.length=${bytes.length})`);
|
||||
}
|
||||
const numCompleteInts = Math.floor(byteLength / 4);
|
||||
const hasTrailingBytes = byteLength % 4 !== 0;
|
||||
const numInts = hasTrailingBytes ? numCompleteInts + 1 : numCompleteInts;
|
||||
if (out.length < numInts) {
|
||||
throw new RangeError(`decodeBigEndianInt32sInto: out.length=${out.length} < ${numInts}`);
|
||||
}
|
||||
if (numCompleteInts > 0) {
|
||||
const absoluteOffset = bytes.byteOffset + offset;
|
||||
if ((absoluteOffset & 3) === 0) {
|
||||
const u32 = new Uint32Array(bytes.buffer, absoluteOffset, numCompleteInts);
|
||||
for (let i = 0; i < numCompleteInts; i++) {
|
||||
out[i] = bswap32(u32[i]) | 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (let i = 0; i < numCompleteInts; i++) {
|
||||
const base = offset + i * 4;
|
||||
out[i] = (bytes[base] << 24) | (bytes[base + 1] << 16) | (bytes[base + 2] << 8) | bytes[base + 3] | 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasTrailingBytes) {
|
||||
const base = offset + numCompleteInts * 4;
|
||||
const remaining = byteLength - numCompleteInts * 4;
|
||||
let v = 0;
|
||||
for (let i = 0; i < remaining; i++) {
|
||||
v |= bytes[base + i] << (24 - i * 8);
|
||||
}
|
||||
out[numCompleteInts] = v | 0;
|
||||
}
|
||||
return numInts;
|
||||
}
|
||||
//# sourceMappingURL=bigEndianDecode.js.map
|
||||
Reference in New Issue
Block a user