make EventTraceSource acceptable to the MakeTraceSourceAccessor function

This commit is contained in:
Mathieu Lacage
2008-02-22 00:22:16 +01:00
parent 2aa6ff8d7d
commit c4238a2fb7
4 changed files with 42 additions and 17 deletions

View File

@@ -20,9 +20,13 @@ public:
virtual bool RunTests (void);
private:
void NotifySource1 (int64_t old, int64_t n) {
m_gotNew = n;
m_got1 = n;
}
int64_t m_gotNew;
void NotifySource2 (double a, int b, float c) {
m_got2 = a;
}
int64_t m_got1;
double m_got2;
};
class Derived : public Object
@@ -111,6 +115,9 @@ public:
MakeIntegerChecker<int8_t> ())
.AddTraceSource ("Source1", "help test",
MakeTraceSourceAccessor (&AttributeObjectTest::m_intSrc1))
.AddTraceSource ("Source2", "help text",
MakeTraceSourceAccessor (&AttributeObjectTest::m_cb))
;
return tid;
@@ -123,6 +130,10 @@ public:
m_vector2.push_back (CreateObject<Derived> ());
}
void InvokeCb (double a, int b, float c) {
m_cb (a,b,c);
}
private:
void DoSetTestB (bool v) {
m_boolTestA = v;
@@ -162,6 +173,7 @@ private:
std::vector<Ptr<Derived> > m_vector2;
IntegerTraceSource<int8_t> m_intSrc1;
IntegerTraceSource<int8_t> m_intSrc2;
EventTraceSource<double, int, float> m_cb;
};
@@ -392,14 +404,27 @@ AttributeTest::RunTests (void)
NS_TEST_ASSERT (p->SetAttribute ("IntegerTraceSource2", Integer (-128)));
NS_TEST_ASSERT (!p->SetAttribute ("IntegerTraceSource2", Integer (-129)));
m_gotNew = -2;
m_got1 = -2;
NS_TEST_ASSERT (p->SetAttribute ("IntegerTraceSource1", Integer (-1)));
NS_TEST_ASSERT (p->TraceSourceConnect ("Source1", MakeCallback (&AttributeTest::NotifySource1, this)));
NS_TEST_ASSERT (p->SetAttribute ("IntegerTraceSource1", Integer (0)));
NS_TEST_ASSERT_EQUAL (m_gotNew, 0);
NS_TEST_ASSERT_EQUAL (m_got1, 0);
NS_TEST_ASSERT (p->TraceSourceDisconnect ("Source1", MakeCallback (&AttributeTest::NotifySource1, this)));
NS_TEST_ASSERT (p->SetAttribute ("IntegerTraceSource1", Integer (1)));
NS_TEST_ASSERT_EQUAL (m_gotNew, 0);
NS_TEST_ASSERT_EQUAL (m_got1, 0);
m_got2 = 4.3;
p->InvokeCb (1.0, -5, 0.0);
NS_TEST_ASSERT_EQUAL (m_got2, 4.3);
NS_TEST_ASSERT (p->TraceSourceConnect ("Source2", MakeCallback (&AttributeTest::NotifySource2, this)));
NS_TEST_ASSERT_EQUAL (m_got2, 4.3);
p->InvokeCb (1.0, -5, 0.0);
NS_TEST_ASSERT_EQUAL (m_got2, 1.0);
NS_TEST_ASSERT (p->TraceSourceDisconnect ("Source2", MakeCallback (&AttributeTest::NotifySource2, this)));
p->InvokeCb (-1.0, -5, 0.0);
NS_TEST_ASSERT_EQUAL (m_got2, 1.0);
return result;
}

View File

@@ -61,29 +61,29 @@ EventTraceSourceTest::RunTests (void)
bool result = true;
EventTraceSource<uint8_t,double> trace;
trace.AddCallback (MakeCallback (&EventTraceSourceTest::CbOne, this));
trace.AddCallback (MakeCallback (&EventTraceSourceTest::CbTwo, this));
trace.Connect (MakeCallback (&EventTraceSourceTest::CbOne, this));
trace.Connect (MakeCallback (&EventTraceSourceTest::CbTwo, this));
m_one = false;
m_two = false;
trace (1, 2);
NS_TEST_ASSERT (m_one);
NS_TEST_ASSERT (m_two);
trace.RemoveCallback (MakeCallback (&EventTraceSourceTest::CbOne, this));
trace.Disconnect (MakeCallback (&EventTraceSourceTest::CbOne, this));
m_one = false;
m_two = false;
trace (1, 2);
NS_TEST_ASSERT (!m_one);
NS_TEST_ASSERT (m_two);
trace.RemoveCallback (MakeCallback (&EventTraceSourceTest::CbTwo, this));
trace.Disconnect (MakeCallback (&EventTraceSourceTest::CbTwo, this));
m_one = false;
m_two = false;
trace (1, 2);
NS_TEST_ASSERT (!m_one);
NS_TEST_ASSERT (!m_two);
trace.AddCallback (MakeCallback (&EventTraceSourceTest::CbOne, this));
trace.AddCallback (MakeCallback (&EventTraceSourceTest::CbTwo, this));
trace.Connect (MakeCallback (&EventTraceSourceTest::CbOne, this));
trace.Connect (MakeCallback (&EventTraceSourceTest::CbTwo, this));
m_one = false;
m_two = false;
trace (1, 2);

View File

@@ -40,8 +40,8 @@ class EventTraceSource
{
public:
EventTraceSource ();
void AddCallback (const CallbackBase & callback);
void RemoveCallback (const CallbackBase & callback);
void Connect (const CallbackBase & callback);
void Disconnect (const CallbackBase & callback);
void operator() (void) const;
void operator() (T1 a1) const;
void operator() (T1 a1, T2 a2) const;
@@ -68,7 +68,7 @@ EventTraceSource<T1,T2,T3,T4>::EventTraceSource ()
template<typename T1, typename T2,
typename T3, typename T4>
void
EventTraceSource<T1,T2,T3,T4>::AddCallback (const CallbackBase & callback)
EventTraceSource<T1,T2,T3,T4>::Connect (const CallbackBase & callback)
{
Callback<void,T1,T2,T3,T4> cb;
cb.Assign (callback);
@@ -77,7 +77,7 @@ EventTraceSource<T1,T2,T3,T4>::AddCallback (const CallbackBase & callback)
template<typename T1, typename T2,
typename T3, typename T4>
void
EventTraceSource<T1,T2,T3,T4>::RemoveCallback (const CallbackBase & callback)
EventTraceSource<T1,T2,T3,T4>::Disconnect (const CallbackBase & callback)
{
for (typename CallbackList::iterator i = m_callbackList.begin ();
i != m_callbackList.end (); /* empty */)

View File

@@ -40,10 +40,10 @@ public:
}
void Connect (const CallbackBase & callback) {
m_callback.AddCallback (callback);
m_callback.Connect (callback);
}
void Disconnect (const CallbackBase & callback) {
m_callback.RemoveCallback (callback);
m_callback.Disconnect (callback);
}
protected:
void Notify (int64_t oldVal, int64_t newVal) {