Browse Source

[lua] drop unnecessary Map class, add some helpers to PairTools

Justin Donaldson 8 years ago
parent
commit
3ec777a56f
2 changed files with 15 additions and 90 deletions
  1. 0 89
      std/lua/Map.hx
  2. 15 1
      std/lua/PairTools.hx

+ 0 - 89
std/lua/Map.hx

@@ -1,89 +0,0 @@
-/*
- * Copyright (C)2005-2017 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 lua;
-class Map<A,B> implements haxe.Constraints.IMap<A,B> {
-
-	private var h : Dynamic;
-	private var k : Dynamic;
-
-	public inline function new() : Void {
-		h = {};
-		k = {};
-	}
-
-	public inline function set( key : A, value : B ) : Void untyped {
-		 h[key] = value;
-		 k[key] = true;
-	}
-
-	public inline function get( key : A ) : Null<B> untyped {
-		return h[key];
-	}
-
-	public inline function exists( key : A ) : Bool untyped {
-		return k[key] != null;
-	}
-
-	public function remove( key : A ) : Bool untyped {
-		if ( k[key] == null) return false;
-		k[key] = null;
-		h[key] = null;
-		return true;
-	}
-
-	public function keys() : Iterator<A> untyped {
-		var cur = next(k,null);
-		return {
-			next : function() {
-				var ret = cur;
-				cur = untyped next(k, cur);
-				return ret;
-			},
-			hasNext : function() return cur != null
-		}
-	}
-
-	public function iterator() : Iterator<B> {
-		var itr = keys();
-		return untyped {
-			hasNext : itr.hasNext,
-			next : function() return h[itr.next()]
-		};
-	}
-
-	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();
-	}
-
-}
-

+ 15 - 1
std/lua/PairTools.hx

@@ -14,11 +14,26 @@ class PairTools {
 		untyped __lua__( "for i,v in _G.ipairs(table) do ret[i] = func(i,v) end;");
 		untyped __lua__( "for i,v in _G.ipairs(table) do ret[i] = func(i,v) end;");
 		return ret;
 		return ret;
 	}
 	}
+
+	public static function ipairsToIntMap<A,B>(table:Table<A,B>) : haxe.ds.IntMap<B> {
+		var ret = new haxe.ds.IntMap<B>();
+		ipairsEach(table, function(a,b) ret.set(a,b));
+		return ret;
+	}
+
 	public static function pairsMap<A,B,C>(table:Table<A,B>, func : A->B->C->C) : Table<A,C> {
 	public static function pairsMap<A,B,C>(table:Table<A,B>, func : A->B->C->C) : Table<A,C> {
 		var ret : Table<A,C> = Table.create();
 		var ret : Table<A,C> = Table.create();
 		untyped __lua__( "for k,v in _G.pairs(table) do ret[k] = func(k,v) end;");
 		untyped __lua__( "for k,v in _G.pairs(table) do ret[k] = func(k,v) end;");
 		return ret;
 		return ret;
 	}
 	}
+
+	@:generic
+	public static function pairsToMap<A,B>(table:Table<A,B>) : Map<A,B> {
+		var ret = new Map<A,B>();
+		pairsEach(table, function(a,b) ret.set(a,b));
+		return ret;
+	}
+
 	public static function ipairsFold<A,B>(table:Table<Int,A>, func : Int->A->B->B, seed: B) : B  {
 	public static function ipairsFold<A,B>(table:Table<Int,A>, func : Int->A->B->B, seed: B) : B  {
 		untyped __lua__("for i,v in _G.ipairs(table) do seed = func(i,v,seed) end");
 		untyped __lua__("for i,v in _G.ipairs(table) do seed = func(i,v,seed) end");
 		return untyped __lua__("seed");
 		return untyped __lua__("seed");
@@ -28,7 +43,6 @@ class PairTools {
 		return untyped __lua__("seed");
 		return untyped __lua__("seed");
 	}
 	}
 
 
-
 	public static function ipairsConcat<T>(table1:Table<Int,T>, table2:Table<Int,T>){
 	public static function ipairsConcat<T>(table1:Table<Int,T>, table2:Table<Int,T>){
 		var ret:Table<Int,T> = Table.create();
 		var ret:Table<Int,T> = Table.create();
 		ipairsFold(table1, function(a,b,c:Table<Int,T>){ c[a] = b; return c;}, ret);
 		ipairsFold(table1, function(a,b,c:Table<Int,T>){ c[a] = b; return c;}, ret);