package haxe.ds; import python.Syntax; import python.lib.Dict; class StringMap implements haxe.Constraints.IMap { private var h : Dict; public function new() : Void { h = new Dict(); } public inline function set( key : String, value : T ) : Void { h.set(key, value); } public inline function get( key : String ) : Null { return h.get(key, null); } public inline function exists( key : String ) : Bool { return h.hasKey(key); } public function remove( key : String ) : Bool { var has = h.hasKey(key); if (has) h.remove(key); return has; } public function keys() : Iterator { var a = []; Syntax.foreach(key, h, { a.push( key); }); return a.iterator(); } public function iterator() : Iterator { var iter = keys(); var ref = h; return { hasNext : function() { return iter.hasNext(); }, next : function() { var i = iter.next(); return ref.get(i, null); } }; } public function toString() : String { var s = new StringBuf(); s.add("{"); var it = keys(); for( i in it ) { s.add(i); s.add(" => "); s.add(Std.string(get(i))); if( it.hasNext() ) s.add(", "); } s.add("}"); return s.toString(); } }