/* * 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 mod_vtm_helfer { /** * @author kcf */ export class klasse_hashmap { /** * @author kcf */ private hashfunction : (schluessel : typ_schluessel)=>string; /** * @author kcf */ private speicher : {[hashwert : string] : {schluessel : typ_schluessel; wert : typ_wert;}}; /** * @author kcf */ public constructor(hashfunction : (schluessel : typ_schluessel)=>string) { this.hashfunction = hashfunction; this.speicher = {}; } /** * @author kcf */ public setzen(schluessel : typ_schluessel, wert : typ_wert) : void { let hashwert : string = this.hashfunction(schluessel); this.speicher[hashwert] = {"schluessel": schluessel, "wert": wert}; } /** * @author kcf */ public holen(schluessel : typ_schluessel) : schnittstelle_fehlermonade { let hashwert : string = this.hashfunction(schluessel); if (hashwert in this.speicher) { let wert : typ_wert = this.speicher[hashwert].wert; return (new klasse_schlicht(wert)); } else { return (new klasse_nichts()); } } /** * @author kcf */ public iterieren(prozedur : (schluessel ?: typ_schluessel, wert ?: typ_wert)=>void) : void { Object.keys(this.speicher).forEach ( (hashwert) => { let paar : {schluessel : typ_schluessel; wert : typ_wert;} = this.speicher[hashwert]; prozedur(paar.schluessel, paar.wert); } ) ; } } }