Update Files
This commit is contained in:
		
							
								
								
									
										142
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/IntMap.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/IntMap.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,142 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.ds;
 | 
			
		||||
 | 
			
		||||
@:coreApi class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 | 
			
		||||
	private var h:flash.utils.Dictionary;
 | 
			
		||||
 | 
			
		||||
	public function new():Void {
 | 
			
		||||
		h = new flash.utils.Dictionary();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function set(key:Int, value:T):Void {
 | 
			
		||||
		untyped h[key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function get(key:Int):Null<T> {
 | 
			
		||||
		return untyped h[key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function exists(key:Int):Bool {
 | 
			
		||||
		return untyped __in__(key, h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function remove(key:Int):Bool {
 | 
			
		||||
		if (!exists(key))
 | 
			
		||||
			return false;
 | 
			
		||||
		untyped __delete__(h, key);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function keys():Iterator<Int> {
 | 
			
		||||
		return new IntMapKeysIterator(h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function iterator():Iterator<T> {
 | 
			
		||||
		return new IntMapValuesIterator<T>(h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:runtime public inline function keyValueIterator():KeyValueIterator<Int, T> {
 | 
			
		||||
		return new haxe.iterators.MapKeyValueIterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function copy():IntMap<T> {
 | 
			
		||||
		var copied = new IntMap();
 | 
			
		||||
		for (key in keys())
 | 
			
		||||
			copied.set(key, get(key));
 | 
			
		||||
		return copied;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function clear():Void {
 | 
			
		||||
		h = new flash.utils.Dictionary();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.IntMap)
 | 
			
		||||
private class IntMapKeysIterator {
 | 
			
		||||
	var h:flash.utils.Dictionary;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:flash.utils.Dictionary):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():Int {
 | 
			
		||||
		var r:Int = untyped __forin__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.IntMap)
 | 
			
		||||
private class IntMapValuesIterator<T> {
 | 
			
		||||
	var h:flash.utils.Dictionary;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:flash.utils.Dictionary):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():T {
 | 
			
		||||
		var r = untyped __foreach__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										141
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/ObjectMap.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/ObjectMap.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,141 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.ds;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class ObjectMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constraints.IMap<K, V> {
 | 
			
		||||
	public function new() {
 | 
			
		||||
		super(false);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function get(key:K):Null<V> {
 | 
			
		||||
		return untyped this[key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function set(key:K, value:V):Void {
 | 
			
		||||
		untyped this[key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function exists(key:K):Bool {
 | 
			
		||||
		return untyped this[key] != null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function remove(key:K):Bool {
 | 
			
		||||
		var has = exists(key);
 | 
			
		||||
		untyped __delete__(this, key);
 | 
			
		||||
		return has;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function keys():Iterator<K> {
 | 
			
		||||
		return NativePropertyIterator.iterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function iterator():Iterator<V> {
 | 
			
		||||
		return NativeValueIterator.iterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:runtime public inline function keyValueIterator():KeyValueIterator<K, V> {
 | 
			
		||||
		return new haxe.iterators.MapKeyValueIterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function copy():ObjectMap<K, V> {
 | 
			
		||||
		var copied = new ObjectMap();
 | 
			
		||||
		for (key in keys())
 | 
			
		||||
			copied.set(key, get(key));
 | 
			
		||||
		return copied;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function toString():String {
 | 
			
		||||
		var s = "";
 | 
			
		||||
		var it = keys();
 | 
			
		||||
		for (i in it) {
 | 
			
		||||
			s += (s == "" ? "" : ",") + Std.string(i);
 | 
			
		||||
			s += " => ";
 | 
			
		||||
			s += Std.string(get(i));
 | 
			
		||||
		}
 | 
			
		||||
		return s + "}";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function clear():Void {
 | 
			
		||||
		for (i in keys())
 | 
			
		||||
			untyped __delete__(this, i);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class NativePropertyIterator {
 | 
			
		||||
	var collection:Dynamic;
 | 
			
		||||
	var index:Int = 0;
 | 
			
		||||
 | 
			
		||||
	public static inline function iterator(collection:Dynamic):NativePropertyIterator {
 | 
			
		||||
		var result = new NativePropertyIterator();
 | 
			
		||||
		result.collection = collection;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function new() {}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var c = collection;
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __has_next__(c, i);
 | 
			
		||||
		collection = c;
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():Dynamic {
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __forin__(collection, i);
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class NativeValueIterator {
 | 
			
		||||
	var collection:Dynamic;
 | 
			
		||||
	var index:Int = 0;
 | 
			
		||||
 | 
			
		||||
	public static inline function iterator(collection:Dynamic):NativeValueIterator {
 | 
			
		||||
		var result = new NativeValueIterator();
 | 
			
		||||
		result.collection = collection;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function new() {}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var c = collection;
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __has_next__(c, i);
 | 
			
		||||
		collection = c;
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():Dynamic {
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __foreach__(collection, i);
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										202
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/StringMap.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/StringMap.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,202 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.ds;
 | 
			
		||||
 | 
			
		||||
@:coreApi class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 | 
			
		||||
	private var h:Dynamic;
 | 
			
		||||
	private var rh:Dynamic;
 | 
			
		||||
 | 
			
		||||
	static var reserved = {};
 | 
			
		||||
 | 
			
		||||
	public function new():Void {
 | 
			
		||||
		h = {};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inline function isReserved(key:String):Bool {
 | 
			
		||||
		return untyped __in__(key, reserved);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function set(key:String, value:T):Void {
 | 
			
		||||
		if (isReserved(key))
 | 
			
		||||
			setReserved(key, value);
 | 
			
		||||
		else
 | 
			
		||||
			untyped h[key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function get(key:String):Null<T> {
 | 
			
		||||
		if (isReserved(key))
 | 
			
		||||
			return getReserved(key);
 | 
			
		||||
		return untyped h[key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function exists(key:String):Bool {
 | 
			
		||||
		if (isReserved(key))
 | 
			
		||||
			return existsReserved(key);
 | 
			
		||||
		return untyped __in__(key, h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function setReserved(key:String, value:T):Void {
 | 
			
		||||
		if (rh == null)
 | 
			
		||||
			rh = {};
 | 
			
		||||
		untyped rh["$" + key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function getReserved(key:String):Null<T> {
 | 
			
		||||
		return rh == null ? null : untyped rh["$" + key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function existsReserved(key:String):Bool {
 | 
			
		||||
		if (rh == null)
 | 
			
		||||
			return false;
 | 
			
		||||
		return untyped __in__("$" + key, rh);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function remove(key:String):Bool {
 | 
			
		||||
		if (isReserved(key)) {
 | 
			
		||||
			key = "$" + key;
 | 
			
		||||
			if (rh == null || !untyped __in__(key, rh))
 | 
			
		||||
				return false;
 | 
			
		||||
			untyped __delete__(rh, key);
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			if (!untyped __in__(key, h))
 | 
			
		||||
				return false;
 | 
			
		||||
			untyped __delete__(h, key);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function keys():Iterator<String> {
 | 
			
		||||
		return new StringMapKeysIterator(h, rh);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function iterator():Iterator<T> {
 | 
			
		||||
		return new StringMapValuesIterator<T>(h, rh);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:runtime public inline function keyValueIterator():KeyValueIterator<String, T> {
 | 
			
		||||
		return new haxe.iterators.MapKeyValueIterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function copy():StringMap<T> {
 | 
			
		||||
		var copied = new StringMap();
 | 
			
		||||
		for (key in keys())
 | 
			
		||||
			copied.set(key, get(key));
 | 
			
		||||
		return copied;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function clear():Void {
 | 
			
		||||
		h = {};
 | 
			
		||||
		rh = null;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.StringMap)
 | 
			
		||||
private class StringMapKeysIterator {
 | 
			
		||||
	var h:Dynamic;
 | 
			
		||||
	var rh:Dynamic;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
	var isReserved:Bool;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:Dynamic, rh:Dynamic):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.rh = rh;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		isReserved = false;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		if (!n && rh != null) {
 | 
			
		||||
			h = this.h = rh;
 | 
			
		||||
			index = this.index = 0;
 | 
			
		||||
			rh = null;
 | 
			
		||||
			isReserved = true;
 | 
			
		||||
			n = untyped __has_next__(h, index);
 | 
			
		||||
		}
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():String {
 | 
			
		||||
		var r:String = untyped __forin__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		if (isReserved)
 | 
			
		||||
			r = r.substr(1);
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.StringMap)
 | 
			
		||||
private class StringMapValuesIterator<T> {
 | 
			
		||||
	var h:Dynamic;
 | 
			
		||||
	var rh:Dynamic;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:Dynamic, rh:Dynamic):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.rh = rh;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		if (!n && rh != null) {
 | 
			
		||||
			h = this.h = rh;
 | 
			
		||||
			index = this.index = 0;
 | 
			
		||||
			rh = null;
 | 
			
		||||
			n = untyped __has_next__(h, index);
 | 
			
		||||
		}
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():T {
 | 
			
		||||
		var r = untyped __foreach__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										147
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/UnsafeStringMap.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/UnsafeStringMap.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,147 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.ds;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	This is similar to `StringMap` excepts that it does not sanitize the keys.
 | 
			
		||||
	As a result, it will be faster to access the map for reading, but it might fail
 | 
			
		||||
	with some reserved keys such as `constructor` or `prototype`.
 | 
			
		||||
**/
 | 
			
		||||
class UnsafeStringMap<T> implements haxe.Constraints.IMap<String, T> {
 | 
			
		||||
	private var h:flash.utils.Dictionary;
 | 
			
		||||
 | 
			
		||||
	public function new():Void {
 | 
			
		||||
		h = new flash.utils.Dictionary();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function set(key:String, value:T):Void {
 | 
			
		||||
		untyped h[key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function get(key:String):Null<T> {
 | 
			
		||||
		return untyped h[key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function exists(key:String):Bool {
 | 
			
		||||
		return untyped __in__(key, h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function remove(key:String):Bool {
 | 
			
		||||
		if (untyped !h.hasOwnProperty(key))
 | 
			
		||||
			return false;
 | 
			
		||||
		untyped __delete__(h, key);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function keys():Iterator<String> {
 | 
			
		||||
		return new UnsafeStringMapKeysIterator(h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function iterator():Iterator<T> {
 | 
			
		||||
		return new UnsafeStringMapValuesIterator<T>(h);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function keyValueIterator():KeyValueIterator<String, T> {
 | 
			
		||||
		return new haxe.iterators.MapKeyValueIterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function copy():UnsafeStringMap<T> {
 | 
			
		||||
		var copied = new UnsafeStringMap();
 | 
			
		||||
		for (key in keys())
 | 
			
		||||
			copied.set(key, get(key));
 | 
			
		||||
		return copied;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function clear():Void {
 | 
			
		||||
		h = new flash.utils.Dictionary();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.UnsafeStringMap)
 | 
			
		||||
private class UnsafeStringMapKeysIterator {
 | 
			
		||||
	var h:flash.utils.Dictionary;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:flash.utils.Dictionary):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():String {
 | 
			
		||||
		var r:String = untyped __forin__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:allow(haxe.ds.UnsafeStringMap)
 | 
			
		||||
private class UnsafeStringMapValuesIterator<T> {
 | 
			
		||||
	var h:flash.utils.Dictionary;
 | 
			
		||||
	var index:Int;
 | 
			
		||||
	var nextIndex:Int;
 | 
			
		||||
 | 
			
		||||
	inline function new(h:flash.utils.Dictionary):Void {
 | 
			
		||||
		this.h = h;
 | 
			
		||||
		this.index = 0;
 | 
			
		||||
		hasNext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var h = h, index = index; // tmp vars required for __has_next
 | 
			
		||||
		var n = untyped __has_next__(h, index);
 | 
			
		||||
		this.nextIndex = index; // store next index
 | 
			
		||||
		return n;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():T {
 | 
			
		||||
		var r = untyped __foreach__(h, nextIndex);
 | 
			
		||||
		index = nextIndex;
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										141
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/WeakMap.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								Kha/Tools/macos/std/flash/_std/haxe/ds/WeakMap.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,141 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.ds;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class WeakMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constraints.IMap<K, V> {
 | 
			
		||||
	public function new() {
 | 
			
		||||
		super(true);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function get(key:K):Null<V> {
 | 
			
		||||
		return untyped this[key];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function set(key:K, value:V):Void {
 | 
			
		||||
		untyped this[key] = value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function exists(key:K):Bool {
 | 
			
		||||
		return untyped this[key] != null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function remove(key:K):Bool {
 | 
			
		||||
		var has = exists(key);
 | 
			
		||||
		untyped __delete__(this, key);
 | 
			
		||||
		return has;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function keys():Iterator<K> {
 | 
			
		||||
		return NativePropertyIterator.iterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function iterator():Iterator<V> {
 | 
			
		||||
		return NativeValueIterator.iterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function keyValueIterator():KeyValueIterator<K, V> {
 | 
			
		||||
		return new haxe.iterators.MapKeyValueIterator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function copy():WeakMap<K, V> {
 | 
			
		||||
		var copied = new WeakMap();
 | 
			
		||||
		for (key in keys())
 | 
			
		||||
			copied.set(key, get(key));
 | 
			
		||||
		return copied;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function toString():String {
 | 
			
		||||
		var s = "";
 | 
			
		||||
		var it = keys();
 | 
			
		||||
		for (i in it) {
 | 
			
		||||
			s += (s == "" ? "" : ",") + Std.string(i);
 | 
			
		||||
			s += " => ";
 | 
			
		||||
			s += Std.string(get(i));
 | 
			
		||||
		}
 | 
			
		||||
		return s + "}";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function clear():Void {
 | 
			
		||||
		for (i in keys())
 | 
			
		||||
			untyped __delete__(this, i);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class NativePropertyIterator {
 | 
			
		||||
	var collection:Dynamic;
 | 
			
		||||
	var index:Int = 0;
 | 
			
		||||
 | 
			
		||||
	public static inline function iterator(collection:Dynamic):NativePropertyIterator {
 | 
			
		||||
		var result = new NativePropertyIterator();
 | 
			
		||||
		result.collection = collection;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function new() {}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var c = collection;
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __has_next__(c, i);
 | 
			
		||||
		collection = c;
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():Dynamic {
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __forin__(collection, i);
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class NativeValueIterator {
 | 
			
		||||
	var collection:Dynamic;
 | 
			
		||||
	var index:Int = 0;
 | 
			
		||||
 | 
			
		||||
	public static inline function iterator(collection:Dynamic):NativeValueIterator {
 | 
			
		||||
		var result = new NativeValueIterator();
 | 
			
		||||
		result.collection = collection;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function new() {}
 | 
			
		||||
 | 
			
		||||
	public inline function hasNext():Bool {
 | 
			
		||||
		var c = collection;
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __has_next__(c, i);
 | 
			
		||||
		collection = c;
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function next():Dynamic {
 | 
			
		||||
		var i = index;
 | 
			
		||||
		var result = untyped __foreach__(collection, i);
 | 
			
		||||
		index = i;
 | 
			
		||||
		return result;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user