package python.lib; import python.lib.Builtin; import python.lib.Tuple; import python.NativeIterator; import python.Syntax; extern class DictView { public inline function iter ():NativeIterator { return Builtin.iter(this); } public inline function length ():Int { return Builtin.len(this); } public inline function iterator ():Iterator { return iter(); } } @:pythonImport("builtins", "dict") extern class Dict { public function new ():Void; public inline function length ():Int { return python.lib.Builtin.len(this); } public inline function hasKey (k:K):Bool { return DictImpl.hasKey(this,k); } public function clear ():Void; public function copy ():Dict; public function get (key:K, def:V):V; public function update (d:Dict):Void; public function keys ():DictView; public function values ():DictView; public function items ():DictView>; public inline function set (key:K, val:V):Void { DictImpl.set(this, key, val); } public inline function remove (key:K):Void { DictImpl.remove(this, key); } public inline function iterator ():Iterator { return values().iter(); } public function __iter__():NativeIterator; } class DictImpl { public static inline function hasKey (d:Dict, key:X) { return Syntax.isIn(key, d); } public static inline function remove (d:Dict, key:X) { Syntax.delete(python.Syntax.arrayAccess(d, key)); } public static inline function set (d:Dict, key:K, val:V) { Syntax.arraySet(d, key, val); } }