/* * Verrückte Turing-Maschinen — A turing complete game * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ module lib_hashmap { /** * @author kcf */ export type typ_hashmap = { hashfunction : (schluessel : typ_schluessel)=>string; speicher : {[hashwert : string] : {schluessel : typ_schluessel; wert : typ_wert;}}; } ; /** * @author kcf */ export function erstellen ( hashfunction : (schluessel : typ_schluessel)=>string ) : typ_hashmap { return { "hashfunction": hashfunction, "speicher": {}, }; } /** * @author kcf */ export function setzen ( hashmap : typ_hashmap, schluessel : typ_schluessel, wert : typ_wert ) : void { let hashwert : string = hashmap.hashfunction(schluessel); hashmap.speicher[hashwert] = {"schluessel": schluessel, "wert": wert}; } /** * @author kcf */ export function holen ( hashmap : typ_hashmap, schluessel : typ_schluessel ) : lib_fehlermonade.typ_fehlermonade { let hashwert : string = hashmap.hashfunction(schluessel); if (hashwert in hashmap.speicher) { let wert : typ_wert = hashmap.speicher[hashwert].wert; return (lib_fehlermonade.erstellen_schlicht(wert)); } else { return (lib_fehlermonade.erstellen_nichts()); } } /** * @author kcf */ export function iterieren ( hashmap : typ_hashmap, prozedur : (schluessel ?: typ_schluessel, wert ?: typ_wert)=>void ) : void { Object.keys(hashmap.speicher).forEach ( (hashwert) => { let paar : {schluessel : typ_schluessel; wert : typ_wert;} = hashmap.speicher[hashwert]; prozedur(paar.schluessel, paar.wert); } ) ; } }