changeset 81:de94552446ab

Add List.removeAt() and tests for it.
author Jordan Miner <jminer7@gmail.com>
date Sat, 17 Jul 2010 16:52:16 -0500
parents f1e176a76c00
children e52546f41851
files dynamin/core/list.d
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dynamin/core/list.d	Sat Jul 17 16:51:03 2010 -0500
+++ b/dynamin/core/list.d	Sat Jul 17 16:52:16 2010 -0500
@@ -128,8 +128,12 @@
 		uint i = find(item);
 		if(i == -1)
 			return;
+		removeAt(i);
+	}
+	void removeAt(uint index) {
+		T item = _data[index];
 
-		for(++i; i < _count; ++i)
+		for(uint i = index + 1; i < _count; ++i)
 			_data[i-1] = _data[i];
 		// must null out to allow to be collected
 		static if(is(T == class) || is(T == interface))
@@ -137,7 +141,7 @@
 		--_count;
 
 		static if(hasDelegates)
-			whenRemoved(item, i);
+			whenRemoved(item, index);
 	}
 	void insert(T item, uint index) {
 		maybeEnlarge(_count+1);
@@ -197,6 +201,12 @@
 	assert(list.data == "Hello!, Mat");
 	list.remove('l');
 	assert(list.data == "Helo!, Mat");
+	list.removeAt(0);
+	assert(list.data == "elo!, Mat");
+	list.removeAt(8);
+	assert(list.data == "elo!, Ma");
+	list.removeAt(1);
+	assert(list.data == "eo!, Ma");
 	list.clear();
 	assert(list.data == "");