瀏覽代碼

Further rework of TLink for iterated removal.

woollybah 9 年之前
父節點
當前提交
a5748b74aa
共有 1 個文件被更改,包括 5 次插入23 次删除
  1. 5 23
      linkedlist.mod/linkedlist.bmx

+ 5 - 23
linkedlist.mod/linkedlist.bmx

@@ -42,7 +42,7 @@ Type TLink
 
 	Field _value:Object
 	Field _succ:TLink,_pred:TLink
-	Field _iterHold:Int, _remove:Int
+	Field _removed:Int
 	
 	Rem
 	bbdoc: Returns the Object associated with this Link.
@@ -72,11 +72,9 @@ Type TLink
 		_value=Null
 		_succ._pred=_pred
 		_pred._succ=_succ
-		_remove = True
-		If Not _iterHold
-			_pred=Null
-			_succ=Null
-		End If
+		_removed = True
+		_pred=Null
+		_succ=Null
 	End Method
 
 End Type
@@ -98,7 +96,7 @@ Type TListEnum
 	Field _list:TList
 
 	Method HasNext()
-		Local has:Int = _link._value<>_link
+		Local has:Int = _link._value<>_link And Not _link._removed
 		If Not has Then
 ?Threaded
 			LockMutex(_mutex)
@@ -122,22 +120,7 @@ Type TListEnum
 ?
 		Local value:Object=_link._value
 		Assert value<>_link
-		
-		Local tmp:TLink = _link
-		
 		_link=_link._succ
-		
-		If _link Then
-			_link._iterHold :+ 1
-		End If
-		
-		tmp._iterHold :- 1
-		
-		If tmp._remove And tmp._iterHold <= 0 Then
-			tmp._pred=Null
-			tmp._succ=Null
-		End If
-		
 		Return value
 	End Method
 
@@ -179,7 +162,6 @@ Type TList
 	End Rem
 	Method Clear()
 		While _head._succ<>_head
-			_head._iterHold = 0
 			_head._succ.Remove
 		Wend
 ?ngcmod