← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2215: revert 2211.1.3 - VS doesn't support variadic templates

 

------------------------------------------------------------
revno: 2215
committer: poy <poy@xxxxxxxxxx>
branch nick: repo
timestamp: Sun 2010-08-29 14:07:28 +0200
message:
  revert 2211.1.3 - VS doesn't support variadic templates
modified:
  dcpp/Speaker.h


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dcpp/Speaker.h'
--- dcpp/Speaker.h	2010-08-27 14:57:49 +0000
+++ dcpp/Speaker.h	2010-08-29 12:07:28 +0000
@@ -31,12 +31,68 @@
 	Speaker() throw() { }
 	virtual ~Speaker() throw() { }
 
-	template<typename... T>
-	void fire(T&&... type) throw() {
-		Lock l(listenerCS);
-		tmp = listeners;
-		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
-			(*i)->on(forward<T>(type)...);
+	/// @todo simplify when we have variadic templates
+
+	template<typename T0>
+	void fire(T0&& type) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type));
+		}
+	}
+
+	template<typename T0, typename T1>
+	void fire(T0&& type, T1&& p1) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1));
+		}
+	}
+
+	template<typename T0, typename T1, typename T2>
+	void fire(T0&& type, T1&& p1, T2&& p2) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1), forward<T2>(p2));
+		}
+	}
+
+	template<typename T0, typename T1, typename T2, typename T3>
+	void fire(T0&& type, T1&& p1, T2&& p2, T3&& p3) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1), forward<T2>(p2), forward<T3>(p3));
+		}
+	}
+
+	template<typename T0, typename T1, typename T2, typename T3, typename T4>
+	void fire(T0&& type, T1&& p1, T2&& p2, T3&& p3, T4&& p4) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1), forward<T2>(p2), forward<T3>(p3), forward<T4>(p4));
+		}
+	}
+
+	template<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
+	void fire(T0&& type, T1&& p1, T2&& p2, T3&& p3, T4&& p4, T5&& p5) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1), forward<T2>(p2), forward<T3>(p3), forward<T4>(p4), forward<T5>(p5));
+		}
+	}
+
+	template<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+	void fire(T0&& type, T1&& p1, T2&& p2, T3&& p3, T4&& p4, T5&& p5, T6&& p6) throw() {
+		Lock l(listenerCS);
+		tmp = listeners;
+		for(auto i = tmp.begin(); i != tmp.end(); ++i) {
+			(*i)->on(forward<T0>(type), forward<T1>(p1), forward<T2>(p2), forward<T3>(p3), forward<T4>(p4), forward<T5>(p5), forward<T6>(p6));
 		}
 	}