2 * Copyright (c) 2018 The xterm.js authors. All rights reserved.
6 export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray
7 | Int8Array | Int16Array | Int32Array
8 | Float32Array | Float64Array;
12 * polyfill for TypedArray.fill
13 * This is needed to support .fill in all safari versions and IE 11.
15 export function fill<T extends TypedArray>(array: T, value: number, start?: number, end?: number): T {
16 // all modern engines that support .fill
18 return array.fill(value, start, end) as T;
20 return fillFallback(array, value, start, end);
23 export function fillFallback<T extends TypedArray>(array: T, value: number, start: number = 0, end: number = array.length): T {
25 // since IE 11 does not support Array.prototype.fill either
26 // we cannot use the suggested polyfill from MDN
27 // instead we simply fall back to looping
28 if (start >= array.length) {
31 start = (array.length + start) % array.length;
32 if (end >= array.length) {
35 end = (array.length + end) % array.length;
37 for (let i = start; i < end; ++i) {
44 * Concat two typed arrays `a` and `b`.
45 * Returns a new typed array.
47 export function concat<T extends TypedArray>(a: T, b: T): T {
48 const result = new (a.constructor as any)(a.length + b.length);
50 result.set(b, a.length);