StringMap.hx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package haxe.ds;
  2. import python.Syntax;
  3. import python.lib.Dict;
  4. class StringMap<T> implements haxe.Constraints.IMap<String, T> {
  5. private var h : Dict<String,T>;
  6. public function new() : Void {
  7. h = new Dict();
  8. }
  9. public inline function set( key : String, value : T ) : Void {
  10. h.set(key, value);
  11. }
  12. public inline function get( key : String ) : Null<T> {
  13. return h.get(key, null);
  14. }
  15. public inline function exists( key : String ) : Bool {
  16. return h.hasKey(key);
  17. }
  18. public function remove( key : String ) : Bool {
  19. var has = h.hasKey(key);
  20. if (has) h.remove(key);
  21. return has;
  22. }
  23. public function keys() : Iterator<String> {
  24. var a = [];
  25. Syntax.foreach(key, h, {
  26. a.push( key);
  27. });
  28. return a.iterator();
  29. }
  30. public function iterator() : Iterator<T> {
  31. var iter = keys();
  32. var ref = h;
  33. return {
  34. hasNext : function() { return iter.hasNext(); },
  35. next : function() { var i = iter.next(); return ref.get(i, null); }
  36. };
  37. }
  38. public function toString() : String {
  39. var s = new StringBuf();
  40. s.add("{");
  41. var it = keys();
  42. for( i in it ) {
  43. s.add(i);
  44. s.add(" => ");
  45. s.add(Std.string(get(i)));
  46. if( it.hasNext() )
  47. s.add(", ");
  48. }
  49. s.add("}");
  50. return s.toString();
  51. }
  52. }