ソースを参照

Fixed issue enumerating over empty map.

woollybah 10 年 前
コミット
151551c27f
2 ファイル変更38 行追加8 行削除
  1. 19 4
      map.mod/intmap.bmx
  2. 19 4
      map.mod/ptrmap.bmx

+ 19 - 4
map.mod/intmap.bmx

@@ -57,16 +57,26 @@ Type TIntMap
 	End Method
 	
 	Method Keys:TIntMapEnumerator()
-		Local nodeenum:TIntNodeEnumerator=New TIntKeyEnumerator
-		nodeenum._node=_FirstNode()
+		Local nodeenum:TIntNodeEnumerator
+		If Not isEmpty() Then
+			nodeenum=New TIntKeyEnumerator
+			nodeenum._node=_FirstNode()
+		Else
+			nodeenum=New TIntEmptyEnumerator
+		End If
 		Local mapenum:TIntMapEnumerator=New TIntMapEnumerator
 		mapenum._enumerator=nodeenum
 		Return mapenum
 	End Method
 	
 	Method Values:TIntMapEnumerator()
-		Local nodeenum:TIntNodeEnumerator=New TIntValueEnumerator
-		nodeenum._node=_FirstNode()
+		Local nodeenum:TIntNodeEnumerator
+		If Not isEmpty() Then
+			nodeenum=New TIntValueEnumerator
+			nodeenum._node=_FirstNode()
+		Else
+			nodeenum=New TIntEmptyEnumerator
+		End If
 		Local mapenum:TIntMapEnumerator=New TIntMapEnumerator
 		mapenum._enumerator=nodeenum
 		Return mapenum
@@ -164,3 +174,8 @@ Type TIntMapEnumerator
 	Field _enumerator:TIntNodeEnumerator
 End Type
 
+Type TIntEmptyEnumerator Extends TIntNodeEnumerator
+	Method HasNext()
+		Return False
+	End Method
+End Type

+ 19 - 4
map.mod/ptrmap.bmx

@@ -57,16 +57,26 @@ Type TPtrMap
 	End Method
 	
 	Method Keys:TPtrMapEnumerator()
-		Local nodeenum:TPtrNodeEnumerator=New TPtrKeyEnumerator
-		nodeenum._node=_FirstNode()
+		Local nodeenum:TPtrNodeEnumerator
+		If Not isEmpty() Then
+			nodeenum=New TPtrKeyEnumerator
+			nodeenum._node=_FirstNode()
+		Else
+			nodeenum=New TPtrEmptyEnumerator
+		End If
 		Local mapenum:TPtrMapEnumerator=New TPtrMapEnumerator
 		mapenum._enumerator=nodeenum
 		Return mapenum
 	End Method
 	
 	Method Values:TPtrMapEnumerator()
-		Local nodeenum:TPtrNodeEnumerator=New TPtrValueEnumerator
-		nodeenum._node=_FirstNode()
+		Local nodeenum:TPtrNodeEnumerator
+		If Not isEmpty() Then
+			nodeenum=New TPtrValueEnumerator
+			nodeenum._node=_FirstNode()
+		Else
+			nodeenum=New TPtrEmptyEnumerator
+		End If
 		Local mapenum:TPtrMapEnumerator=New TPtrMapEnumerator
 		mapenum._enumerator=nodeenum
 		Return mapenum
@@ -164,4 +174,9 @@ Type TPtrMapEnumerator
 	Field _enumerator:TPtrNodeEnumerator
 End Type
 
+Type TPtrEmptyEnumerator Extends TPtrNodeEnumerator
+	Method HasNext()
+		Return False
+	End Method
+End Type