--- a/src/simulator/simulator.h Tue Jul 10 13:45:20 2007 +0100
+++ b/src/simulator/simulator.h Fri Jul 13 10:40:10 2007 +0200
@@ -173,6 +173,10 @@
*/
template <typename T, typename OBJ, typename T1>
static EventId Schedule (Time const &time, void (T::*mem_ptr) (T1), OBJ obj, T1 a1);
+ template <typename T, typename OBJ, typename T1>
+ static EventId Schedule (Time const &time, void (T::*mem_ptr) (const T1&), OBJ obj, T1 a1); // GFR
+ template <typename T, typename OBJ, typename T1>
+ static EventId Schedule (Time const &time, void (T::*mem_ptr) (T1&), OBJ obj, T1 a1); // GFR
/**
* @param time the relative expiration time of the event.
* @param mem_ptr member method pointer to invoke
@@ -234,6 +238,10 @@
*/
template <typename T1>
static EventId Schedule (Time const &time, void (*f) (T1), T1 a1);
+ template <typename T1>
+ static EventId Schedule (Time const &time, void (*f) (const T1&), T1 a1); // GFR
+ template <typename T1>
+ static EventId Schedule (Time const &time, void (*f) (T1&), T1 a1); // GFR
/**
* @param time the relative expiration time of the event.
* @param f the function to invoke
@@ -533,6 +541,10 @@
static EventImpl *MakeEvent (void (T::*mem_ptr) (void), OBJ obj);
template <typename T, typename OBJ, typename T1>
static EventImpl *MakeEvent (void (T::*mem_ptr) (T1), OBJ obj, T1 a1);
+ template <typename T, typename OBJ, typename T1>
+ static EventImpl *MakeEvent (void (T::*mem_ptr) (const T1&), OBJ obj, T1 a1); // GFR
+ template <typename T, typename OBJ, typename T1>
+ static EventImpl *MakeEvent (void (T::*mem_ptr) (T1&), OBJ obj, T1 a1); // GFR
template <typename T, typename OBJ, typename T1, typename T2>
static EventImpl *MakeEvent (void (T::*mem_ptr) (T1,T2), OBJ obj, T1 a1, T2 a2);
template <typename T, typename OBJ, typename T1, typename T2, typename T3>
@@ -642,6 +654,56 @@
return ev;
}
+template <typename T, typename OBJ, typename T1>
+EventImpl *Simulator::MakeEvent (void (T::*mem_ptr) (const T1&), OBJ obj, T1 a1)
+{
+ // one argument version, with const reference
+ class EventMemberImpl1 : public EventImpl {
+ public:
+ typedef void (T::*F)(const T1&);
+ EventMemberImpl1 (OBJ obj, F function, T1 a1)
+ : m_obj (obj),
+ m_function (function),
+ m_a1 (a1)
+ {}
+ protected:
+ virtual ~EventMemberImpl1 () {}
+ private:
+ virtual void Notify (void) {
+ (EventMemberImplTraits<OBJ>::GetReference (m_obj).*m_function) (m_a1);
+ }
+ OBJ m_obj;
+ F m_function;
+ T1 m_a1;
+ } *ev = new EventMemberImpl1 (obj, mem_ptr, a1);
+ return ev;
+}
+
+template <typename T, typename OBJ, typename T1>
+EventImpl *Simulator::MakeEvent (void (T::*mem_ptr) (T1&), OBJ obj, T1 a1)
+{
+ // one argument version with non-const reference
+ class EventMemberImpl1 : public EventImpl {
+ public:
+ typedef void (T::*F)(T1&);
+ EventMemberImpl1 (OBJ obj, F function, T1 a1)
+ : m_obj (obj),
+ m_function (function),
+ m_a1 (a1)
+ {}
+ protected:
+ virtual ~EventMemberImpl1 () {}
+ private:
+ virtual void Notify (void) {
+ (EventMemberImplTraits<OBJ>::GetReference (m_obj).*m_function) (m_a1);
+ }
+ OBJ m_obj;
+ F m_function;
+ T1 m_a1;
+ } *ev = new EventMemberImpl1 (obj, mem_ptr, a1);
+ return ev;
+}
+
template <typename T, typename OBJ, typename T1, typename T2>
EventImpl *Simulator::MakeEvent (void (T::*mem_ptr) (T1,T2), OBJ obj, T1 a1, T2 a2)
{
@@ -920,6 +982,18 @@
return Schedule (time, MakeEvent (mem_ptr, obj, a1));
}
+template <typename T, typename OBJ, typename T1>
+EventId Simulator::Schedule (Time const &time, void (T::*mem_ptr) (const T1&), OBJ obj, T1 a1)
+{
+ return Schedule (time, MakeEvent (mem_ptr, obj, a1));
+}
+
+template <typename T, typename OBJ, typename T1>
+EventId Simulator::Schedule (Time const &time, void (T::*mem_ptr) (T1&), OBJ obj, T1 a1)
+{
+ return Schedule (time, MakeEvent (mem_ptr, obj, a1));
+}
+
template <typename T, typename OBJ, typename T1, typename T2>
EventId Simulator::Schedule (Time const &time, void (T::*mem_ptr) (T1,T2), OBJ obj, T1 a1, T2 a2)
{