Browse Source

smaller inlined iterator code for flash StringMap

SmerkyG 11 years ago
parent
commit
fb954d2df7
1 changed files with 35 additions and 11 deletions
  1. 35 11
      std/flash/_std/haxe/ds/StringMap.hx

+ 35 - 11
std/flash/_std/haxe/ds/StringMap.hx

@@ -212,18 +212,35 @@ private class StringMapKeysIterator {
 		var i = index;
 		var i = index;
 		var result = untyped __has_next__(c, i);
 		var result = untyped __has_next__(c, i);
 		if ( !result ) {
 		if ( !result ) {
-			if( rh != null && rh != collection ) {
-				c = rh;
-				i = 0;
-				result = untyped __has_next__(c, i);
-			}
+			return hasNextReserved();
+		}
+		collection = c;
+		index = i;
+		return result;
+	}
+	private function hasNextReserved():Bool {
+		if ( rh == null || rh == collection ) {
+			return false;
 		}
 		}
+		var c = rh;
+		var i = 0;
+		var result = untyped __has_next__(c, i);
 		collection = c;
 		collection = c;
 		index = i;
 		index = i;
 		return result;
 		return result;
 	}
 	}
 
 
 	public inline function next():String {
 	public inline function next():String {
+		if ( collection == rh ) {
+			return nextReserved();
+		}
+		var result;
+		var i = index;
+		result = untyped __forin__(collection, i);
+		index = i;
+		return result;
+	}
+	private function nextReserved():String {
 		var result;
 		var result;
 		var i = index;
 		var i = index;
 		if( collection == rh ) {
 		if( collection == rh ) {
@@ -232,7 +249,7 @@ private class StringMapKeysIterator {
 			result = untyped __forin__(collection, i);
 			result = untyped __forin__(collection, i);
 		}
 		}
 		index = i;
 		index = i;
-		return result;
+		return result;		
 	}
 	}
 }
 }
 
 
@@ -256,16 +273,23 @@ private class StringMapValuesIterator<T> {
 		var i = index;
 		var i = index;
 		var result = untyped __has_next__(c, i);
 		var result = untyped __has_next__(c, i);
 		if ( !result ) {
 		if ( !result ) {
-			if( rh != null && rh != collection ) {
-				c = rh;
-				i = 0;
-				result = untyped __has_next__(c, i);
-			}
+			return hasNextReserved();
 		}
 		}
 		collection = c;
 		collection = c;
 		index = i;
 		index = i;
 		return result;
 		return result;
 	}
 	}
+	private function hasNextReserved():Bool {
+		if ( rh == null || rh == collection ) {
+			return false;
+		}
+		var c = rh;
+		var i = 0;
+		var result = untyped __has_next__(c, i);
+		collection = c;
+		index = i;
+		return result;
+	}
 
 
 	public inline function next():T {
 	public inline function next():T {
 		var i = index;
 		var i = index;