PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/wonka/src/include/rebel_native
Просмотр файла: Array_native.re
type t('a) = array('a);
let makeEmpty = (): t('a) => [||];
let makeUninitialized = Belt.Array.makeUninitializedUnsafe;
let make = Belt.Array.make;
let size = Belt.Array.size;
let get = Belt.Array.get;
let getUnsafe = Belt.Array.getUnsafe;
let set = Belt.Array.set;
let setUnsafe = Belt.Array.setUnsafe;
let fill = (arr: t('a), x: 'a) =>
Belt.Array.fill(arr, ~offset=0, ~len=size(arr), x);
let reverseInPlace = Belt.Array.reverseInPlace;
let reverse = Belt.Array.reverse;
let shuffle = Belt.Array.shuffle;
let shuffleInPlace = Belt.Array.shuffleInPlace;
let copy = Belt.Array.copy;
let slice = (arr: t('a), ~start: int, ~end_: int): t('a) => {
let len = end_ - start;
Belt.Array.slice(arr, ~offset=start, ~len);
};
let concat = Belt.Array.concat;
let append = (arr: t('a), x: 'a) => Belt.Array.concat(arr, [|x|]);
let somei = (arr: t('a), f: ('a, int) => bool): bool => {
let len = size(arr);
let rec search = (i: int) =>
if (i >= len) {
false;
} else if (f(getUnsafe(arr, i), i)) {
true;
} else {
search(i + 1);
};
search(0);
};
let everyi = (arr: t('a), f: ('a, int) => bool): bool => {
let len = size(arr);
let rec search = (i: int) =>
if (i >= len) {
true;
} else if (!f(getUnsafe(arr, i), i)) {
false;
} else {
search(i + 1);
};
search(0);
};
let findi = (arr: t('a), f: ('a, int) => bool): option('a) => {
let len = size(arr);
let rec search = (i: int) =>
if (i >= len) {
None;
} else {
let x = getUnsafe(arr, i);
if (f(x, i)) {
Some(x);
} else {
search(i + 1);
};
};
search(0);
};
let findIndex = (arr: t('a), f: 'a => bool): int => {
let len = size(arr);
let rec search = (i: int) =>
if (i >= len) {
(-1);
} else if (f(getUnsafe(arr, i))) {
i;
} else {
search(i + 1);
};
search(0);
};
let lastIndexOf = (arr: t('a), x: 'a): int => {
let len = size(arr);
let rec search = (i: int) =>
if (i < 0) {
(-1);
} else if (x === getUnsafe(arr, i)) {
i;
} else {
search(i - 1);
};
search(len - 1);
};
let filteri = (arr: t('a), f: ('a, int) => bool): t('a) => {
let len = size(arr);
let res: t('a) = copy(arr);
let j = ref(-1);
let rec filter = (i: int) =>
if (i >= len) {
Array.sub(res, 0, j^ + 1);
} else {
let x = getUnsafe(arr, i);
if (f(x, i)) {
j := j^ + 1;
Belt.Array.setUnsafe(arr, j^, x);
};
filter(i + 1);
};
filter(0);
};
let removeCount = (arr: t('a), ~pos: int, ~count: int): t('a) => {
let len = size(arr);
let pos2 = pos + count - 1;
let res = Array.sub(arr, 0, len - count);
let rec copy = (i: int) =>
if (i >= len) {
res;
} else if (i >= pos && i <= pos2) {
copy(i + 1);
} else {
let j = i > pos2 ? i - count : i;
Belt.Array.setUnsafe(arr, j, Belt.Array.getUnsafe(arr, i));
copy(i + 1);
};
copy(0);
};
let find = (arr: t('a), f: 'a => bool): option('a) =>
findi(arr, (x, _i) => f(x));
let indexOf = (arr: t('a), x: 'a): int => findIndex(arr, item => item === x);
let includes = (arr: t('a), x: 'a): bool =>
findIndex(arr, item => item === x) > (-1);
let filter = (arr: t('a), f: 'a => bool): t('a) =>
filteri(arr, (x, _i) => f(x));
let remove = (arr: t('a), index: int): t('a) =>
removeCount(arr, ~pos=index, ~count=1);
let some = Belt.Array.some;
let every = Belt.Array.every;
let map = Belt.Array.map;
let mapi = (arr: t('a), f: ('a, int) => 'b): t('b) =>
Belt.Array.mapWithIndexU(arr, (. i, x) => f(x, i));
let forEach = Belt.Array.forEach;
let forEachi = (arr: t('a), f: ('a, int) => unit): unit =>
Belt.Array.forEachWithIndexU(arr, (. i, x) => f(x, i));
let reduce = (arr: t('a), reducer: ('b, 'a) => 'b, acc: 'b): 'b =>
Belt.Array.reduce(arr, acc, reducer);
let reduceRight = (arr: t('a), reducer: ('b, 'a) => 'b, acc: 'b): 'b =>
Belt.Array.reduceReverse(arr, acc, reducer);
Выполнить команду
Для локальной разработки. Не используйте в интернете!