mtcute/packages/core/src/utils/buffer-utils.ts

80 lines
1.7 KiB
TypeScript
Raw Normal View History

2022-08-29 16:22:57 +03:00
/**
* Check if two buffers are equal
*
* @param a First buffer
* @param b Second buffer
*/
export function buffersEqual(a: Uint8Array, b: Uint8Array): boolean {
2021-04-08 12:19:38 +03:00
if (a.length !== b.length) return false
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return false
}
return true
}
2022-08-29 16:22:57 +03:00
/**
* Copy a buffer
*
* @param buf Buffer to copy
* @param start Start offset
* @param end End offset
*/
export function cloneBuffer(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {
const ret = new Uint8Array(end - start)
ret.set(buf.subarray(start, end))
2021-04-08 12:19:38 +03:00
return ret
}
2022-08-29 16:22:57 +03:00
/**
* Concatenate multiple buffers into one
2022-08-29 16:22:57 +03:00
*/
export function concatBuffers(buffers: Uint8Array[]): Uint8Array {
2023-10-20 00:41:47 +03:00
if (buffers.length === 1) return buffers[0]
/* eslint-disable no-restricted-globals */
if (typeof Buffer !== 'undefined') {
return Buffer.concat(buffers)
2022-08-29 16:22:57 +03:00
}
/* eslint-enable no-restricted-globals */
2022-08-29 16:22:57 +03:00
let length = 0
for (const buf of buffers) {
length += buf.length
}
const ret = new Uint8Array(length)
let offset = 0
for (const buf of buffers) {
ret.set(buf, offset)
offset += buf.length
2022-08-29 16:22:57 +03:00
}
return ret
}
2023-11-06 02:28:35 +03:00
/**
* Shortcut for creating a DataView from a Uint8Array
*/
export function dataViewFromBuffer(buf: Uint8Array): DataView {
return new DataView(buf.buffer, buf.byteOffset, buf.byteLength)
}
2023-11-06 02:28:35 +03:00
/**
* Reverse a buffer (or a part of it) into a new buffer
*/
export function bufferToReversed(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {
const len = end - start
const ret = new Uint8Array(len)
for (let i = 0; i < len; i++) {
ret[i] = buf[end - i - 1]
}
return ret
}