Przeglądaj źródła

Made CopyTo use Span

Brian Fiete 4 lat temu
rodzic
commit
e7912b1095

+ 6 - 14
BeefLibs/corlib/src/Collections/Dictionary.bf

@@ -290,23 +290,15 @@ namespace System.Collections
 			}
 		}
 		
-		public void CopyTo(KeyValuePair[] kvPair, int index)
+		public void CopyTo(Span<KeyValuePair> kvPair)
 		{
-			Keys.Reset();
-			Values.Reset();
-			int i = 0;
-
-			repeat
+			Debug.Assert(kvPair.Length >= mCount);
+			int idx = 0;
+			for (var kv in this)
 			{
-				if (i >= index)
-				{
-					kvPair[i] = (Keys.Current, Values.Current);
-				}
+				kvPair[idx] = kv;
+				++idx;
 			}
-			while(Keys.MoveNext() && Values.MoveNext());
-
-			Keys.Reset();
-			Values.Reset();
 		}
 
 		public Enumerator GetEnumerator()

+ 1 - 1
BeefLibs/corlib/src/Collections/ICollection.bf

@@ -10,7 +10,7 @@ namespace System.Collections
 		public void Add(T item);
 		public void Clear();
 		public bool Contains(T item);
-		public void CopyTo(T[] arr, int index);
+		public void CopyTo(Span<T> span);
 		public bool Remove(T item);
 	}
 }

+ 7 - 0
BeefLibs/corlib/src/Collections/List.bf

@@ -403,6 +403,13 @@ namespace System.Collections
 				Internal.MemCpy(destList.mItems, mItems, mSize * strideof(T), alignof(T));
 		}
 
+		public void CopyTo(Span<T> span)
+		{
+			// Delegate rest of error checking to Array.Copy.
+			for (int i = 0; i < mSize; i++)
+				span[i] = mItems[i];
+		}
+
 		public void CopyTo(T[] array, int arrayIndex)
 		{
 			// Delegate rest of error checking to Array.Copy.