import { Equality } from "./things.js"; export type AssocArray = [K, V][] export function assocArraySingleton(key : K, value : V) : AssocArray { return [[key, value]]; } export function assocArrayEmpty() : AssocArray { return []; } export function assocArrayPut(eq : Equality, arr : AssocArray, key : K, value : V) : V | undefined { const len = arr.length; for (let i = 0; i < len; i++) { if (eq.equal(key, arr[i][0])) { const old = arr[i][1]; arr[i][1] = value; return old; } } arr.push([key, value]); return undefined; } export function assocArrayPutIfNew(eq : Equality, arr : AssocArray, key : K, value : () => V) : V { const len = arr.length; for (let i = 0; i < len; i++) { if (eq.equal(key, arr[i][0])) { return arr[i][1]; } } const v = value(); arr.push([key, v]); return v; } export function assocArrayGet(eq : Equality, arr : AssocArray, key : K) : V | undefined { const len = arr.length; for (let i = 0; i < len; i++) { if (eq.equal(key, arr[i][0])) { return arr[i][1]; } } return undefined; } export function assocArrayHas(eq : Equality, arr : AssocArray, key : K) : boolean { const len = arr.length; for (let i = 0; i < len; i++) { if (eq.equal(key, arr[i][0])) { return true; } } return false; } export function assocArrayRemove(eq : Equality, arr : AssocArray, key : K) : V | undefined { const len = arr.length; for (let i = 0; i < len; i++) { if (eq.equal(key, arr[i][0])) { const old = arr[i][1]; arr.splice(i, 1); return old; } } return undefined; }