UNPKG

@fable-org/fable-library-js

Version:

Core library used by F# projects compiled with fable.io

1,392 lines (1,391 loc) 49.3 kB
import { record_type, bool_type, list_type, option_type, class_type } from "./Reflection.js"; import { some, value as value_1 } from "./Option.js"; import { structuralHash, compare, toIterator, equals, disposeSafe, getEnumerator, isArrayLike } from "./Util.js"; import { singleton, ofArrayWithTail, head, tail, isEmpty as isEmpty_1, fold as fold_1, empty as empty_1, FSharpList, cons } from "./List.js"; import { map as map_2, item, fill, setItem } from "./Array.js"; import { Record } from "./Types.js"; import { tryPick as tryPick_1, pick as pick_1, iterate as iterate_1, compareWith, map as map_1, unfold } from "./Seq.js"; import { format, join } from "./String.js"; export class MapTreeLeaf$2 { constructor(k, v) { this.k = k; this.v = v; } } export function MapTreeLeaf$2_$reflection(gen0, gen1) { return class_type("Map.MapTreeLeaf`2", [gen0, gen1], MapTreeLeaf$2); } export function MapTreeLeaf$2_$ctor_5BDDA1(k, v) { return new MapTreeLeaf$2(k, v); } export function MapTreeLeaf$2__get_Key(_) { return _.k; } export function MapTreeLeaf$2__get_Value(_) { return _.v; } export class MapTreeNode$2 extends MapTreeLeaf$2 { constructor(k, v, left, right, h) { super(k, v); this.left = left; this.right = right; this.h = (h | 0); } } export function MapTreeNode$2_$reflection(gen0, gen1) { return class_type("Map.MapTreeNode`2", [gen0, gen1], MapTreeNode$2, MapTreeLeaf$2_$reflection(gen0, gen1)); } export function MapTreeNode$2_$ctor_Z39DE9543(k, v, left, right, h) { return new MapTreeNode$2(k, v, left, right, h); } export function MapTreeNode$2__get_Left(_) { return _.left; } export function MapTreeNode$2__get_Right(_) { return _.right; } export function MapTreeNode$2__get_Height(_) { return _.h | 0; } export function MapTreeModule_empty() { return undefined; } export function MapTreeModule_sizeAux(acc_mut, m_mut) { MapTreeModule_sizeAux: while (true) { const acc = acc_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; acc_mut = MapTreeModule_sizeAux(acc + 1, MapTreeNode$2__get_Left(mn)); m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_sizeAux; } else { return (acc + 1) | 0; } } else { return acc | 0; } break; } } export function MapTreeModule_size(x) { return MapTreeModule_sizeAux(0, x) | 0; } export function MapTreeModule_mk(l, k, v, r) { let mn, mn_1; let hl; const m = l; if (m != null) { const m2 = value_1(m); hl = ((m2 instanceof MapTreeNode$2) ? ((mn = m2, MapTreeNode$2__get_Height(mn))) : 1); } else { hl = 0; } let hr; const m_1 = r; if (m_1 != null) { const m2_1 = value_1(m_1); hr = ((m2_1 instanceof MapTreeNode$2) ? ((mn_1 = m2_1, MapTreeNode$2__get_Height(mn_1))) : 1); } else { hr = 0; } const m_2 = ((hl < hr) ? hr : hl) | 0; if (m_2 === 0) { return MapTreeLeaf$2_$ctor_5BDDA1(k, v); } else { return MapTreeNode$2_$ctor_Z39DE9543(k, v, l, r, m_2 + 1); } } export function MapTreeModule_rebalance(t1, k, v, t2) { let mn, mn_1, m_2, m2_2, mn_2, m_3, m2_3, mn_3; let t1h; const m = t1; if (m != null) { const m2 = value_1(m); t1h = ((m2 instanceof MapTreeNode$2) ? ((mn = m2, MapTreeNode$2__get_Height(mn))) : 1); } else { t1h = 0; } let t2h; const m_1 = t2; if (m_1 != null) { const m2_1 = value_1(m_1); t2h = ((m2_1 instanceof MapTreeNode$2) ? ((mn_1 = m2_1, MapTreeNode$2__get_Height(mn_1))) : 1); } else { t2h = 0; } if (t2h > (t1h + 2)) { const matchValue = value_1(t2); if (matchValue instanceof MapTreeNode$2) { const t2$0027 = matchValue; if (((m_2 = MapTreeNode$2__get_Left(t2$0027), (m_2 != null) ? ((m2_2 = value_1(m_2), (m2_2 instanceof MapTreeNode$2) ? ((mn_2 = m2_2, MapTreeNode$2__get_Height(mn_2))) : 1)) : 0)) > (t1h + 1)) { const matchValue_1 = value_1(MapTreeNode$2__get_Left(t2$0027)); if (matchValue_1 instanceof MapTreeNode$2) { const t2l = matchValue_1; return MapTreeModule_mk(MapTreeModule_mk(t1, k, v, MapTreeNode$2__get_Left(t2l)), MapTreeLeaf$2__get_Key(t2l), MapTreeLeaf$2__get_Value(t2l), MapTreeModule_mk(MapTreeNode$2__get_Right(t2l), MapTreeLeaf$2__get_Key(t2$0027), MapTreeLeaf$2__get_Value(t2$0027), MapTreeNode$2__get_Right(t2$0027))); } else { throw new Error("internal error: Map.rebalance"); } } else { return MapTreeModule_mk(MapTreeModule_mk(t1, k, v, MapTreeNode$2__get_Left(t2$0027)), MapTreeLeaf$2__get_Key(t2$0027), MapTreeLeaf$2__get_Value(t2$0027), MapTreeNode$2__get_Right(t2$0027)); } } else { throw new Error("internal error: Map.rebalance"); } } else if (t1h > (t2h + 2)) { const matchValue_2 = value_1(t1); if (matchValue_2 instanceof MapTreeNode$2) { const t1$0027 = matchValue_2; if (((m_3 = MapTreeNode$2__get_Right(t1$0027), (m_3 != null) ? ((m2_3 = value_1(m_3), (m2_3 instanceof MapTreeNode$2) ? ((mn_3 = m2_3, MapTreeNode$2__get_Height(mn_3))) : 1)) : 0)) > (t2h + 1)) { const matchValue_3 = value_1(MapTreeNode$2__get_Right(t1$0027)); if (matchValue_3 instanceof MapTreeNode$2) { const t1r = matchValue_3; return MapTreeModule_mk(MapTreeModule_mk(MapTreeNode$2__get_Left(t1$0027), MapTreeLeaf$2__get_Key(t1$0027), MapTreeLeaf$2__get_Value(t1$0027), MapTreeNode$2__get_Left(t1r)), MapTreeLeaf$2__get_Key(t1r), MapTreeLeaf$2__get_Value(t1r), MapTreeModule_mk(MapTreeNode$2__get_Right(t1r), k, v, t2)); } else { throw new Error("internal error: Map.rebalance"); } } else { return MapTreeModule_mk(MapTreeNode$2__get_Left(t1$0027), MapTreeLeaf$2__get_Key(t1$0027), MapTreeLeaf$2__get_Value(t1$0027), MapTreeModule_mk(MapTreeNode$2__get_Right(t1$0027), k, v, t2)); } } else { throw new Error("internal error: Map.rebalance"); } } else { return MapTreeModule_mk(t1, k, v, t2); } } export function MapTreeModule_add(comparer, k, v, m) { if (m != null) { const m2 = value_1(m); const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0; if (m2 instanceof MapTreeNode$2) { const mn = m2; if (c < 0) { return MapTreeModule_rebalance(MapTreeModule_add(comparer, k, v, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn)); } else if (c === 0) { return MapTreeNode$2_$ctor_Z39DE9543(k, v, MapTreeNode$2__get_Left(mn), MapTreeNode$2__get_Right(mn), MapTreeNode$2__get_Height(mn)); } else { return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_add(comparer, k, v, MapTreeNode$2__get_Right(mn))); } } else if (c < 0) { return MapTreeNode$2_$ctor_Z39DE9543(k, v, MapTreeModule_empty(), m, 2); } else if (c === 0) { return MapTreeLeaf$2_$ctor_5BDDA1(k, v); } else { return MapTreeNode$2_$ctor_Z39DE9543(k, v, m, MapTreeModule_empty(), 2); } } else { return MapTreeLeaf$2_$ctor_5BDDA1(k, v); } } export function MapTreeModule_tryFind(comparer_mut, k_mut, m_mut) { MapTreeModule_tryFind: while (true) { const comparer = comparer_mut, k = k_mut, m = m_mut; if (m != null) { const m2 = value_1(m); const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0; if (c === 0) { return some(MapTreeLeaf$2__get_Value(m2)); } else if (m2 instanceof MapTreeNode$2) { const mn = m2; comparer_mut = comparer; k_mut = k; m_mut = ((c < 0) ? MapTreeNode$2__get_Left(mn) : MapTreeNode$2__get_Right(mn)); continue MapTreeModule_tryFind; } else { return undefined; } } else { return undefined; } break; } } export function MapTreeModule_find(comparer, k, m) { const matchValue = MapTreeModule_tryFind(comparer, k, m); if (matchValue == null) { throw new Error(); } else { return value_1(matchValue); } } export function MapTreeModule_partition1(comparer, f, k, v, acc1, acc2) { if (f(k, v)) { return [MapTreeModule_add(comparer, k, v, acc1), acc2]; } else { return [acc1, MapTreeModule_add(comparer, k, v, acc2)]; } } export function MapTreeModule_partitionAux(comparer_mut, f_mut, m_mut, acc__mut, acc__1_mut) { MapTreeModule_partitionAux: while (true) { const comparer = comparer_mut, f = f_mut, m = m_mut, acc_ = acc__mut, acc__1 = acc__1_mut; const acc = [acc_, acc__1]; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const acc_1 = MapTreeModule_partitionAux(comparer, f, MapTreeNode$2__get_Right(mn), acc[0], acc[1]); const acc_4 = MapTreeModule_partition1(comparer, f, MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), acc_1[0], acc_1[1]); comparer_mut = comparer; f_mut = f; m_mut = MapTreeNode$2__get_Left(mn); acc__mut = acc_4[0]; acc__1_mut = acc_4[1]; continue MapTreeModule_partitionAux; } else { return MapTreeModule_partition1(comparer, f, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), acc[0], acc[1]); } } else { return acc; } break; } } export function MapTreeModule_partition(comparer, f, m) { return MapTreeModule_partitionAux(comparer, f, m, MapTreeModule_empty(), MapTreeModule_empty()); } export function MapTreeModule_filter1(comparer, f, k, v, acc) { if (f(k, v)) { return MapTreeModule_add(comparer, k, v, acc); } else { return acc; } } export function MapTreeModule_filterAux(comparer_mut, f_mut, m_mut, acc_mut) { MapTreeModule_filterAux: while (true) { const comparer = comparer_mut, f = f_mut, m = m_mut, acc = acc_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const acc_1 = MapTreeModule_filterAux(comparer, f, MapTreeNode$2__get_Left(mn), acc); const acc_2 = MapTreeModule_filter1(comparer, f, MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), acc_1); comparer_mut = comparer; f_mut = f; m_mut = MapTreeNode$2__get_Right(mn); acc_mut = acc_2; continue MapTreeModule_filterAux; } else { return MapTreeModule_filter1(comparer, f, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), acc); } } else { return acc; } break; } } export function MapTreeModule_filter(comparer, f, m) { return MapTreeModule_filterAux(comparer, f, m, MapTreeModule_empty()); } export function MapTreeModule_spliceOutSuccessor(m) { if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; if (MapTreeNode$2__get_Left(mn) == null) { return [MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn)]; } else { const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Left(mn)); return [patternInput[0], patternInput[1], MapTreeModule_mk(patternInput[2], MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn))]; } } else { return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), MapTreeModule_empty()]; } } else { throw new Error("internal error: Map.spliceOutSuccessor"); } } export function MapTreeModule_remove(comparer, k, m) { if (m != null) { const m2 = value_1(m); const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0; if (m2 instanceof MapTreeNode$2) { const mn = m2; if (c < 0) { return MapTreeModule_rebalance(MapTreeModule_remove(comparer, k, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn)); } else if (c === 0) { if (MapTreeNode$2__get_Left(mn) == null) { return MapTreeNode$2__get_Right(mn); } else if (MapTreeNode$2__get_Right(mn) == null) { return MapTreeNode$2__get_Left(mn); } else { const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Right(mn)); return MapTreeModule_mk(MapTreeNode$2__get_Left(mn), patternInput[0], patternInput[1], patternInput[2]); } } else { return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_remove(comparer, k, MapTreeNode$2__get_Right(mn))); } } else if (c === 0) { return MapTreeModule_empty(); } else { return m; } } else { return MapTreeModule_empty(); } } export function MapTreeModule_change(comparer, k, u, m) { if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(mn)) | 0; if (c < 0) { return MapTreeModule_rebalance(MapTreeModule_change(comparer, k, u, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn)); } else if (c === 0) { const matchValue_1 = u(some(MapTreeLeaf$2__get_Value(mn))); if (matchValue_1 != null) { return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_1), MapTreeNode$2__get_Left(mn), MapTreeNode$2__get_Right(mn), MapTreeNode$2__get_Height(mn)); } else if (MapTreeNode$2__get_Left(mn) == null) { return MapTreeNode$2__get_Right(mn); } else if (MapTreeNode$2__get_Right(mn) == null) { return MapTreeNode$2__get_Left(mn); } else { const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Right(mn)); return MapTreeModule_mk(MapTreeNode$2__get_Left(mn), patternInput[0], patternInput[1], patternInput[2]); } } else { return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_change(comparer, k, u, MapTreeNode$2__get_Right(mn))); } } else { const c_1 = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0; if (c_1 < 0) { const matchValue_2 = u(undefined); if (matchValue_2 != null) { return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_2), MapTreeModule_empty(), m, 2); } else { return m; } } else if (c_1 === 0) { const matchValue_3 = u(some(MapTreeLeaf$2__get_Value(m2))); if (matchValue_3 != null) { return MapTreeLeaf$2_$ctor_5BDDA1(k, value_1(matchValue_3)); } else { return MapTreeModule_empty(); } } else { const matchValue_4 = u(undefined); if (matchValue_4 != null) { return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_4), m, MapTreeModule_empty(), 2); } else { return m; } } } } else { const matchValue = u(undefined); if (matchValue != null) { return MapTreeLeaf$2_$ctor_5BDDA1(k, value_1(matchValue)); } else { return m; } } } export function MapTreeModule_mem(comparer_mut, k_mut, m_mut) { MapTreeModule_mem: while (true) { const comparer = comparer_mut, k = k_mut, m = m_mut; if (m != null) { const m2 = value_1(m); const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0; if (m2 instanceof MapTreeNode$2) { const mn = m2; if (c < 0) { comparer_mut = comparer; k_mut = k; m_mut = MapTreeNode$2__get_Left(mn); continue MapTreeModule_mem; } else if (c === 0) { return true; } else { comparer_mut = comparer; k_mut = k; m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_mem; } } else { return c === 0; } } else { return false; } break; } } export function MapTreeModule_iterOpt(f_mut, m_mut) { MapTreeModule_iterOpt: while (true) { const f = f_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; MapTreeModule_iterOpt(f, MapTreeNode$2__get_Left(mn)); f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)); f_mut = f; m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_iterOpt; } else { f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)); } } break; } } export function MapTreeModule_iter(f, m) { MapTreeModule_iterOpt(f, m); } export function MapTreeModule_tryPickOpt(f_mut, m_mut) { MapTreeModule_tryPickOpt: while (true) { const f = f_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const matchValue = MapTreeModule_tryPickOpt(f, MapTreeNode$2__get_Left(mn)); if (matchValue == null) { const matchValue_1 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)); if (matchValue_1 == null) { f_mut = f; m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_tryPickOpt; } else { return matchValue_1; } } else { return matchValue; } } else { return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)); } } else { return undefined; } break; } } export function MapTreeModule_tryPick(f, m) { return MapTreeModule_tryPickOpt(f, m); } export function MapTreeModule_existsOpt(f_mut, m_mut) { MapTreeModule_existsOpt: while (true) { const f = f_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; if (MapTreeModule_existsOpt(f, MapTreeNode$2__get_Left(mn)) ? true : f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn))) { return true; } else { f_mut = f; m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_existsOpt; } } else { return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)); } } else { return false; } break; } } export function MapTreeModule_exists(f, m) { return MapTreeModule_existsOpt(f, m); } export function MapTreeModule_forallOpt(f_mut, m_mut) { MapTreeModule_forallOpt: while (true) { const f = f_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; if (MapTreeModule_forallOpt(f, MapTreeNode$2__get_Left(mn)) && f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn))) { f_mut = f; m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_forallOpt; } else { return false; } } else { return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)); } } else { return true; } break; } } export function MapTreeModule_forall(f, m) { return MapTreeModule_forallOpt(f, m); } export function MapTreeModule_map(f, m) { if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const l2 = MapTreeModule_map(f, MapTreeNode$2__get_Left(mn)); const v2 = f(MapTreeLeaf$2__get_Value(mn)); const r2 = MapTreeModule_map(f, MapTreeNode$2__get_Right(mn)); return MapTreeNode$2_$ctor_Z39DE9543(MapTreeLeaf$2__get_Key(mn), v2, l2, r2, MapTreeNode$2__get_Height(mn)); } else { return MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(m2), f(MapTreeLeaf$2__get_Value(m2))); } } else { return MapTreeModule_empty(); } } export function MapTreeModule_mapiOpt(f, m) { if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const l2 = MapTreeModule_mapiOpt(f, MapTreeNode$2__get_Left(mn)); const v2 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)); const r2 = MapTreeModule_mapiOpt(f, MapTreeNode$2__get_Right(mn)); return MapTreeNode$2_$ctor_Z39DE9543(MapTreeLeaf$2__get_Key(mn), v2, l2, r2, MapTreeNode$2__get_Height(mn)); } else { return MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(m2), f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2))); } } else { return MapTreeModule_empty(); } } export function MapTreeModule_mapi(f, m) { return MapTreeModule_mapiOpt(f, m); } export function MapTreeModule_foldBackOpt(f_mut, m_mut, x_mut) { MapTreeModule_foldBackOpt: while (true) { const f = f_mut, m = m_mut, x = x_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; const x_1 = MapTreeModule_foldBackOpt(f, MapTreeNode$2__get_Right(mn), x); const x_2 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), x_1); f_mut = f; m_mut = MapTreeNode$2__get_Left(mn); x_mut = x_2; continue MapTreeModule_foldBackOpt; } else { return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), x); } } else { return x; } break; } } export function MapTreeModule_foldBack(f, m, x) { return MapTreeModule_foldBackOpt(f, m, x); } export function MapTreeModule_foldOpt(f_mut, x_mut, m_mut) { MapTreeModule_foldOpt: while (true) { const f = f_mut, x = x_mut, m = m_mut; if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; f_mut = f; x_mut = f(MapTreeModule_foldOpt(f, x, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)); m_mut = MapTreeNode$2__get_Right(mn); continue MapTreeModule_foldOpt; } else { return f(x, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)); } } else { return x; } break; } } export function MapTreeModule_fold(f, x, m) { return MapTreeModule_foldOpt(f, x, m); } export function MapTreeModule_foldSectionOpt(comparer, lo, hi, f, m, x) { const foldFromTo = (f_1_mut, m_1_mut, x_1_mut) => { foldFromTo: while (true) { const f_1 = f_1_mut, m_1 = m_1_mut, x_1 = x_1_mut; if (m_1 != null) { const m2 = value_1(m_1); if (m2 instanceof MapTreeNode$2) { const mn = m2; const cLoKey = comparer.Compare(lo, MapTreeLeaf$2__get_Key(mn)) | 0; const cKeyHi = comparer.Compare(MapTreeLeaf$2__get_Key(mn), hi) | 0; const x_2 = (cLoKey < 0) ? foldFromTo(f_1, MapTreeNode$2__get_Left(mn), x_1) : x_1; const x_3 = ((cLoKey <= 0) && (cKeyHi <= 0)) ? f_1(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), x_2) : x_2; if (cKeyHi < 0) { f_1_mut = f_1; m_1_mut = MapTreeNode$2__get_Right(mn); x_1_mut = x_3; continue foldFromTo; } else { return x_3; } } else if ((comparer.Compare(lo, MapTreeLeaf$2__get_Key(m2)) <= 0) && (comparer.Compare(MapTreeLeaf$2__get_Key(m2), hi) <= 0)) { return f_1(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), x_1); } else { return x_1; } } else { return x_1; } break; } }; if (comparer.Compare(lo, hi) === 1) { return x; } else { return foldFromTo(f, m, x); } } export function MapTreeModule_foldSection(comparer, lo, hi, f, m, x) { return MapTreeModule_foldSectionOpt(comparer, lo, hi, f, m, x); } export function MapTreeModule_toList(m) { const loop = (m_1_mut, acc_mut) => { loop: while (true) { const m_1 = m_1_mut, acc = acc_mut; if (m_1 != null) { const m2 = value_1(m_1); if (m2 instanceof MapTreeNode$2) { const mn = m2; m_1_mut = MapTreeNode$2__get_Left(mn); acc_mut = cons([MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)], loop(MapTreeNode$2__get_Right(mn), acc)); continue loop; } else { return cons([MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)], acc); } } else { return acc; } break; } }; return loop(m, empty_1()); } export function MapTreeModule_copyToArray(m, arr, i) { let j = i; MapTreeModule_iter((x, y) => { setItem(arr, j, [x, y]); j = ((j + 1) | 0); }, m); } export function MapTreeModule_toArray(m) { const n = MapTreeModule_size(m) | 0; const res = fill(new Array(n), 0, n, [null, null]); MapTreeModule_copyToArray(m, res, 0); return res; } export function MapTreeModule_ofList(comparer, l) { return fold_1((acc, tupledArg) => MapTreeModule_add(comparer, tupledArg[0], tupledArg[1], acc), MapTreeModule_empty(), l); } export function MapTreeModule_mkFromEnumerator(comparer_mut, acc_mut, e_mut) { MapTreeModule_mkFromEnumerator: while (true) { const comparer = comparer_mut, acc = acc_mut, e = e_mut; if (e["System.Collections.IEnumerator.MoveNext"]()) { const patternInput = e["System.Collections.Generic.IEnumerator`1.get_Current"](); comparer_mut = comparer; acc_mut = MapTreeModule_add(comparer, patternInput[0], patternInput[1], acc); e_mut = e; continue MapTreeModule_mkFromEnumerator; } else { return acc; } break; } } export function MapTreeModule_ofArray(comparer, arr) { let res = MapTreeModule_empty(); for (let idx = 0; idx <= (arr.length - 1); idx++) { const forLoopVar = item(idx, arr); res = MapTreeModule_add(comparer, forLoopVar[0], forLoopVar[1], res); } return res; } export function MapTreeModule_ofSeq(comparer, c) { if (isArrayLike(c)) { return MapTreeModule_ofArray(comparer, c); } else if (c instanceof FSharpList) { return MapTreeModule_ofList(comparer, c); } else { const ie = getEnumerator(c); try { return MapTreeModule_mkFromEnumerator(comparer, MapTreeModule_empty(), ie); } finally { disposeSafe(ie); } } } export class MapTreeModule_MapIterator$2 extends Record { constructor(stack, started) { super(); this.stack = stack; this.started = started; } } export function MapTreeModule_MapIterator$2_$reflection(gen0, gen1) { return record_type("Map.MapTreeModule.MapIterator`2", [gen0, gen1], MapTreeModule_MapIterator$2, () => [["stack", list_type(option_type(MapTreeLeaf$2_$reflection(gen0, gen1)))], ["started", bool_type]]); } export function MapTreeModule_collapseLHS(stack_mut) { MapTreeModule_collapseLHS: while (true) { const stack = stack_mut; if (!isEmpty_1(stack)) { const rest = tail(stack); const m = head(stack); if (m != null) { const m2 = value_1(m); if (m2 instanceof MapTreeNode$2) { const mn = m2; stack_mut = ofArrayWithTail([MapTreeNode$2__get_Left(mn), MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)), MapTreeNode$2__get_Right(mn)], rest); continue MapTreeModule_collapseLHS; } else { return stack; } } else { stack_mut = rest; continue MapTreeModule_collapseLHS; } } else { return empty_1(); } break; } } export function MapTreeModule_mkIterator(m) { return new MapTreeModule_MapIterator$2(MapTreeModule_collapseLHS(singleton(m)), false); } export function MapTreeModule_notStarted() { throw new Error("enumeration not started"); } export function MapTreeModule_alreadyFinished() { throw new Error("enumeration already finished"); } export function MapTreeModule_current(i) { if (i.started) { const matchValue = i.stack; if (!isEmpty_1(matchValue)) { if (head(matchValue) != null) { const m = value_1(head(matchValue)); if (m instanceof MapTreeNode$2) { throw new Error("Please report error: Map iterator, unexpected stack for current"); } else { return [MapTreeLeaf$2__get_Key(m), MapTreeLeaf$2__get_Value(m)]; } } else { throw new Error("Please report error: Map iterator, unexpected stack for current"); } } else { return MapTreeModule_alreadyFinished(); } } else { return MapTreeModule_notStarted(); } } export function MapTreeModule_moveNext(i) { if (i.started) { const matchValue = i.stack; if (!isEmpty_1(matchValue)) { if (head(matchValue) != null) { const m = value_1(head(matchValue)); if (m instanceof MapTreeNode$2) { throw new Error("Please report error: Map iterator, unexpected stack for moveNext"); } else { i.stack = MapTreeModule_collapseLHS(tail(matchValue)); return !isEmpty_1(i.stack); } } else { throw new Error("Please report error: Map iterator, unexpected stack for moveNext"); } } else { return false; } } else { i.started = true; return !isEmpty_1(i.stack); } } export function MapTreeModule_mkIEnumerator(m) { let i = MapTreeModule_mkIterator(m); return { "System.Collections.Generic.IEnumerator`1.get_Current"() { return MapTreeModule_current(i); }, "System.Collections.IEnumerator.get_Current"() { return MapTreeModule_current(i); }, "System.Collections.IEnumerator.MoveNext"() { return MapTreeModule_moveNext(i); }, "System.Collections.IEnumerator.Reset"() { i = MapTreeModule_mkIterator(m); }, Dispose() { }, }; } export function MapTreeModule_toSeq(s) { return unfold((en_1) => { if (en_1["System.Collections.IEnumerator.MoveNext"]()) { return [en_1["System.Collections.Generic.IEnumerator`1.get_Current"](), en_1]; } else { return undefined; } }, MapTreeModule_mkIEnumerator(s)); } export function MapTreeModule_leftmost(m_mut) { MapTreeModule_leftmost: while (true) { const m = m_mut; if (m != null) { const m2 = value_1(m); let matchResult, nd_1; if (m2 instanceof MapTreeNode$2) { if (MapTreeNode$2__get_Height(m2) > 1) { matchResult = 0; nd_1 = m2; } else { matchResult = 1; } } else { matchResult = 1; } switch (matchResult) { case 0: if (MapTreeNode$2__get_Left(nd_1) == null) { return [MapTreeLeaf$2__get_Key(nd_1), MapTreeLeaf$2__get_Value(nd_1)]; } else { m_mut = MapTreeNode$2__get_Left(nd_1); continue MapTreeModule_leftmost; } default: return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)]; } } else { throw new Error(); } break; } } export function MapTreeModule_rightmost(m_mut) { MapTreeModule_rightmost: while (true) { const m = m_mut; if (m != null) { const m2 = value_1(m); let matchResult, nd_1; if (m2 instanceof MapTreeNode$2) { if (MapTreeNode$2__get_Height(m2) > 1) { matchResult = 0; nd_1 = m2; } else { matchResult = 1; } } else { matchResult = 1; } switch (matchResult) { case 0: if (MapTreeNode$2__get_Right(nd_1) == null) { return [MapTreeLeaf$2__get_Key(nd_1), MapTreeLeaf$2__get_Value(nd_1)]; } else { m_mut = MapTreeNode$2__get_Right(nd_1); continue MapTreeModule_rightmost; } default: return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)]; } } else { throw new Error(); } break; } } export class FSharpMap { constructor(comparer, tree) { this.comparer = comparer; this.tree = tree; } GetHashCode() { const this$ = this; return FSharpMap__ComputeHashCode(this$) | 0; } Equals(other) { const this$ = this; if (other instanceof FSharpMap) { const that = other; const e1 = getEnumerator(this$); try { const e2 = getEnumerator(that); try { const loop = () => { const m1 = e1["System.Collections.IEnumerator.MoveNext"](); if (m1 === e2["System.Collections.IEnumerator.MoveNext"]()) { if (!m1) { return true; } else { const e1c = e1["System.Collections.Generic.IEnumerator`1.get_Current"](); const e2c = e2["System.Collections.Generic.IEnumerator`1.get_Current"](); if (equals(e1c[0], e2c[0]) && equals(e1c[1], e2c[1])) { return loop(); } else { return false; } } } else { return false; } }; return loop(); } finally { disposeSafe(e2); } } finally { disposeSafe(e1); } } else { return false; } } toString() { const this$ = this; return ("map [" + join("; ", map_1((kv) => format("({0}, {1})", kv[0], kv[1]), this$))) + "]"; } get [Symbol.toStringTag]() { return "FSharpMap"; } toJSON() { const this$ = this; return Array.from(this$); } GetEnumerator() { const _ = this; return MapTreeModule_mkIEnumerator(_.tree); } [Symbol.iterator]() { return toIterator(getEnumerator(this)); } "System.Collections.IEnumerable.GetEnumerator"() { const _ = this; return MapTreeModule_mkIEnumerator(_.tree); } CompareTo(other) { let that; const this$ = this; return ((other instanceof FSharpMap) ? ((that = other, compareWith((kvp1, kvp2) => { const c = this$.comparer.Compare(kvp1[0], kvp2[0]) | 0; return ((c !== 0) ? c : compare(kvp1[1], kvp2[1])) | 0; }, this$, that))) : 1) | 0; } "System.Collections.Generic.ICollection`1.Add2B595"(x) { throw new Error("Map cannot be mutated"); } "System.Collections.Generic.ICollection`1.Clear"() { throw new Error("Map cannot be mutated"); } "System.Collections.Generic.ICollection`1.Remove2B595"(x) { throw new Error("Map cannot be mutated"); } "System.Collections.Generic.ICollection`1.Contains2B595"(x) { const m = this; return FSharpMap__ContainsKey(m, x[0]) && equals(FSharpMap__get_Item(m, x[0]), x[1]); } "System.Collections.Generic.ICollection`1.CopyToZ3B4C077E"(arr, i) { const m = this; MapTreeModule_copyToArray(m.tree, arr, i); } "System.Collections.Generic.ICollection`1.get_IsReadOnly"() { return true; } "System.Collections.Generic.ICollection`1.get_Count"() { const m = this; return FSharpMap__get_Count(m) | 0; } "System.Collections.Generic.IReadOnlyCollection`1.get_Count"() { const m = this; return FSharpMap__get_Count(m) | 0; } get size() { const m = this; return FSharpMap__get_Count(m) | 0; } clear() { throw new Error("Map cannot be mutated"); } delete(_arg) { throw new Error("Map cannot be mutated"); return false; } entries() { const m = this; return map_1((p) => [p[0], p[1]], m); } get(k) { const m = this; return FSharpMap__get_Item(m, k); } has(k) { const m = this; return FSharpMap__ContainsKey(m, k); } keys() { const m = this; return map_1((p) => p[0], m); } set(k, v) { const m = this; throw new Error("Map cannot be mutated"); return m; } values() { const m = this; return map_1((p) => p[1], m); } forEach(f, thisArg) { const m = this; iterate_1((p) => { f(p[1], p[0], m); }, m); } } export function FSharpMap_$reflection(gen0, gen1) { return class_type("Map.FSharpMap", [gen0, gen1], FSharpMap); } export function FSharpMap_$ctor(comparer, tree) { return new FSharpMap(comparer, tree); } export function FSharpMap_Empty(comparer) { return FSharpMap_$ctor(comparer, MapTreeModule_empty()); } export function FSharpMap__get_Comparer(m) { return m.comparer; } export function FSharpMap__get_Tree(m) { return m.tree; } export function FSharpMap__Add(m, key, value) { return FSharpMap_$ctor(m.comparer, MapTreeModule_add(m.comparer, key, value, m.tree)); } export function FSharpMap__Change(m, key, f) { return FSharpMap_$ctor(m.comparer, MapTreeModule_change(m.comparer, key, f, m.tree)); } export function FSharpMap__get_IsEmpty(m) { return m.tree == null; } export function FSharpMap__get_Item(m, key) { return MapTreeModule_find(m.comparer, key, m.tree); } export function FSharpMap__TryPick(m, f) { return MapTreeModule_tryPick(f, m.tree); } export function FSharpMap__Exists(m, predicate) { return MapTreeModule_exists(predicate, m.tree); } export function FSharpMap__Filter(m, predicate) { return FSharpMap_$ctor(m.comparer, MapTreeModule_filter(m.comparer, predicate, m.tree)); } export function FSharpMap__ForAll(m, predicate) { return MapTreeModule_forall(predicate, m.tree); } export function FSharpMap__Fold(m, f, acc) { return MapTreeModule_foldBack(f, m.tree, acc); } export function FSharpMap__FoldSection(m, lo, hi, f, acc) { return MapTreeModule_foldSection(m.comparer, lo, hi, f, m.tree, acc); } export function FSharpMap__Iterate(m, f) { MapTreeModule_iter(f, m.tree); } export function FSharpMap__MapRange(m, f) { return FSharpMap_$ctor(m.comparer, MapTreeModule_map(f, m.tree)); } export function FSharpMap__Map(m, f) { return FSharpMap_$ctor(m.comparer, MapTreeModule_mapi(f, m.tree)); } export function FSharpMap__Partition(m, predicate) { const patternInput = MapTreeModule_partition(m.comparer, predicate, m.tree); return [FSharpMap_$ctor(m.comparer, patternInput[0]), FSharpMap_$ctor(m.comparer, patternInput[1])]; } export function FSharpMap__get_Count(m) { return MapTreeModule_size(m.tree) | 0; } export function FSharpMap__ContainsKey(m, key) { return MapTreeModule_mem(m.comparer, key, m.tree); } export function FSharpMap__Remove(m, key) { return FSharpMap_$ctor(m.comparer, MapTreeModule_remove(m.comparer, key, m.tree)); } export function FSharpMap__TryGetValue(_, key, value) { const matchValue = MapTreeModule_tryFind(_.comparer, key, _.tree); if (matchValue == null) { return false; } else { const v = value_1(matchValue); value.contents = v; return true; } } export function FSharpMap__get_Keys(_) { return map_2((kvp) => kvp[0], MapTreeModule_toArray(_.tree)); } export function FSharpMap__get_Values(_) { return map_2((kvp) => kvp[1], MapTreeModule_toArray(_.tree)); } export function FSharpMap__get_MinKeyValue(m) { return MapTreeModule_leftmost(m.tree); } export function FSharpMap__get_MaxKeyValue(m) { return MapTreeModule_rightmost(m.tree); } export function FSharpMap__TryFind(m, key) { return MapTreeModule_tryFind(m.comparer, key, m.tree); } export function FSharpMap__ToList(m) { return MapTreeModule_toList(m.tree); } export function FSharpMap__ToArray(m) { return MapTreeModule_toArray(m.tree); } export function FSharpMap__ComputeHashCode(this$) { const combineHash = (x, y) => ((((x << 1) + y) + 631) | 0); let res = 0; const enumerator = getEnumerator(this$); try { while (enumerator["System.Collections.IEnumerator.MoveNext"]()) { const activePatternResult = enumerator["System.Collections.Generic.IEnumerator`1.get_Current"](); res = (combineHash(res, structuralHash(activePatternResult[0])) | 0); res = (combineHash(res, structuralHash(activePatternResult[1])) | 0); } } finally { disposeSafe(enumerator); } return res | 0; } export function isEmpty(table) { return FSharpMap__get_IsEmpty(table); } export function add(key, value, table) { return FSharpMap__Add(table, key, value); } export function change(key, f, table) { return FSharpMap__Change(table, key, f); } export function find(key, table) { return FSharpMap__get_Item(table, key); } export function tryFind(key, table) { return FSharpMap__TryFind(table, key); } export function remove(key, table) { return FSharpMap__Remove(table, key); } export function containsKey(key, table) { return FSharpMap__ContainsKey(table, key); } export function iterate(action, table) { FSharpMap__Iterate(table, action); } export function tryPick(chooser, table) { return FSharpMap__TryPick(table, chooser); } export function pick(chooser, table) { const matchValue = tryPick(chooser, table); if (matchValue != null) { return value_1(matchValue); } else { throw new Error(); } } export function exists(predicate, table) { return FSharpMap__Exists(table, predicate); } export function filter(predicate, table) { return FSharpMap__Filter(table, predicate); } export function partition(predicate, table) { return FSharpMap__Partition(table, predicate); } export function forAll(predicate, table) { return FSharpMap__ForAll(table, predicate); } export function map(mapping, table) { return FSharpMap__Map(table, mapping); } export function fold(folder, state, table) { return MapTreeModule_fold(folder, state, FSharpMap__get_Tree(table)); } export function foldBack(folder, table, state) { return MapTreeModule_foldBack(folder, FSharpMap__get_Tree(table), state); } export function toSeq(table) { return map_1((kvp) => [kvp[0], kvp[1]], table); } export function findKey(predicate, table) { return pick_1((kvp) => { const k = kvp[0]; if (predicate(k, kvp[1])) { return some(k); } else { return undefined; } }, table); } export function tryFindKey(predicate, table) { return tryPick_1((kvp) => { const k = kvp[0]; if (predicate(k, kvp[1])) { return some(k); } else { return undefined; } }, table); } export function ofList(elements, comparer) { return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements)); } export function ofSeq(elements, comparer) { return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements)); } export function ofArray(elements, comparer) { return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements)); } export function toList(table) { return FSharpMap__ToList(table); } export function toArray(table) { return FSharpMap__ToArray(table); } export function keys(table) { return FSharpMap__get_Keys(table); } export function values(table) { return FSharpMap__get_Values(table); } export function minKeyValue(table) { return FSharpMap__get_MinKeyValue(table); } export function maxKeyValue(table) { return FSharpMap__get_MaxKeyValue(table); } export function empty(comparer) { return FSharpMap_Empty(comparer); } export function count(table) { return FSharpMap__get_Count(table) | 0; }