Blob Blame History Raw
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v0.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v0.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v0.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v0.h	2009-11-29 23:30:39.000000000 +0100
@@ -62,33 +62,23 @@ public:
 	//: Call
 	void call()
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
 		CL_SlotParent_v0 super(slots.begin(), slots.end());
 		super();
 
 		// find slots to be removed:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
 			}
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
+			else
+				slot_it++;
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v1.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v1.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v1.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v1.h	2009-11-29 23:24:20.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1);
+				slot_it++;
 			}
-			
-			slot->call(param1);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v2.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v2.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v2.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v2.h	2009-11-29 23:29:03.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v3.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v3.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v3.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v3.h	2009-11-29 23:25:00.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v4.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v4.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v4.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v4.h	2009-11-29 23:23:14.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3, PARAM4 param4)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3, param4);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3, param4);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}
 
diff -up ClanLib-0.6.5/Sources/API/Signals/signal_v5.h~ ClanLib-0.6.5/Sources/API/Signals/signal_v5.h
--- ClanLib-0.6.5/Sources/API/Signals/signal_v5.h~	2002-06-13 16:43:17.000000000 +0200
+++ ClanLib-0.6.5/Sources/API/Signals/signal_v5.h	2009-11-29 23:16:15.000000000 +0100
@@ -63,31 +63,22 @@ public:
 	//: Call
 	void call(PARAM1 param1, PARAM2 param2, PARAM3 param3, PARAM4 param4, PARAM5 param5)
 	{
-		std::list<SlotIterator> remove_slots;
-
 		// call slots connected to signal:
-		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++)
+		for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); )
 		{
 			Slot slot = *slot_it;
 
-			// skip slot if it has no more references left in application.
-			// (make it pending for removal)
+			// remove slot if it has no more references left in application.
 			if (slot->get_slot_ref() == 0)
 			{
-				remove_slots.push_back(slot_it);
-				continue;
+				slot->release_signal_ref();
+				slot_it = slots.erase(slot_it);
+			}
+			else
+			{
+				slot->call(param1, param2, param3, param4, param5);
+				slot_it++;
 			}
-			
-			slot->call(param1, param2, param3, param4, param5);
-		}
-
-		// remove all slots no longer connected to any CL_Slot.
-		typename std::list<SlotIterator>::iterator remove_it;
-		for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++)
-		{
-			Slot slot = **remove_it;
-			slot->release_signal_ref();
-			slots.erase(*remove_it);
 		}
 	}