src/core/object.cc
changeset 2258 666099a753e0
parent 2257 71a58e70c671
child 2402 0950067d70a2
equal deleted inserted replaced
2257:71a58e70c671 2258:666099a753e0
   408     current = current->m_next;
   408     current = current->m_next;
   409   } while (current != this);
   409   } while (current != this);
   410 }
   410 }
   411 
   411 
   412 void 
   412 void 
   413 Object::AddInterface (Ptr<Object> o)
   413 Object::AggregateObject (Ptr<Object> o)
   414 {
   414 {
   415   NS_ASSERT (!m_disposed);
   415   NS_ASSERT (!m_disposed);
   416   NS_ASSERT (!o->m_disposed);
   416   NS_ASSERT (!o->m_disposed);
   417   NS_ASSERT (CheckLoose ());
   417   NS_ASSERT (CheckLoose ());
   418   NS_ASSERT (o->CheckLoose ());
   418   NS_ASSERT (o->CheckLoose ());
   760   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<DerivedA> (), 0);
   760   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<DerivedA> (), 0);
   761 
   761 
   762   baseA = CreateObject<BaseA> ();
   762   baseA = CreateObject<BaseA> ();
   763   Ptr<BaseB> baseB = CreateObject<BaseB> ();
   763   Ptr<BaseB> baseB = CreateObject<BaseB> ();
   764   Ptr<BaseB> baseBCopy = baseB;
   764   Ptr<BaseB> baseBCopy = baseB;
   765   baseA->AddInterface (baseB);
   765   baseA->AggregateObject (baseB);
   766   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseA> (), 0);
   766   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseA> (), 0);
   767   NS_TEST_ASSERT_EQUAL (baseA->GetObject<DerivedA> (), 0);
   767   NS_TEST_ASSERT_EQUAL (baseA->GetObject<DerivedA> (), 0);
   768   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseB> (), 0);
   768   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseB> (), 0);
   769   NS_TEST_ASSERT_EQUAL (baseA->GetObject<DerivedB> (), 0);
   769   NS_TEST_ASSERT_EQUAL (baseA->GetObject<DerivedB> (), 0);
   770   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseB> (), 0);
   770   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseB> (), 0);
   774   NS_TEST_ASSERT_UNEQUAL (baseBCopy->GetObject<BaseA> (), 0);
   774   NS_TEST_ASSERT_UNEQUAL (baseBCopy->GetObject<BaseA> (), 0);
   775 
   775 
   776   baseA = CreateObject<DerivedA> (1);
   776   baseA = CreateObject<DerivedA> (1);
   777   baseB = CreateObject<DerivedB> (1);
   777   baseB = CreateObject<DerivedB> (1);
   778   baseBCopy = baseB;
   778   baseBCopy = baseB;
   779   baseA->AddInterface (baseB);
   779   baseA->AggregateObject (baseB);
   780   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<DerivedB> (), 0);
   780   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<DerivedB> (), 0);
   781   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseB> (), 0);
   781   NS_TEST_ASSERT_UNEQUAL (baseA->GetObject<BaseB> (), 0);
   782   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<DerivedA> (), 0);
   782   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<DerivedA> (), 0);
   783   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseA> (), 0);
   783   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseA> (), 0);
   784   NS_TEST_ASSERT_UNEQUAL (baseBCopy->GetObject<DerivedA> (), 0);
   784   NS_TEST_ASSERT_UNEQUAL (baseBCopy->GetObject<DerivedA> (), 0);
   786   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<DerivedB> (), 0);
   786   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<DerivedB> (), 0);
   787   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseB> (), 0)
   787   NS_TEST_ASSERT_UNEQUAL (baseB->GetObject<BaseB> (), 0)
   788 
   788 
   789   baseA = CreateObject<BaseA> ();
   789   baseA = CreateObject<BaseA> ();
   790   baseB = CreateObject<BaseB> ();
   790   baseB = CreateObject<BaseB> ();
   791   baseA->AddInterface (baseB);
   791   baseA->AggregateObject (baseB);
   792   baseA = 0;
   792   baseA = 0;
   793   baseA = baseB->GetObject<BaseA> ();
   793   baseA = baseB->GetObject<BaseA> ();
   794 
   794 
   795   baseA = CreateObject<BaseA> ();
   795   baseA = CreateObject<BaseA> ();
   796   baseA->TraceConnect ("/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   796   baseA->TraceConnect ("/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   804   m_baseBTrace = false;
   804   m_baseBTrace = false;
   805   baseB->BaseGenerateTrace (2);
   805   baseB->BaseGenerateTrace (2);
   806   NS_TEST_ASSERT (m_baseBTrace);
   806   NS_TEST_ASSERT (m_baseBTrace);
   807   baseB->TraceDisconnect ("/baseb-x",  MakeCallback (&ObjectTest::BaseBTrace, this));
   807   baseB->TraceDisconnect ("/baseb-x",  MakeCallback (&ObjectTest::BaseBTrace, this));
   808 
   808 
   809   baseA->AddInterface (baseB);
   809   baseA->AggregateObject (baseB);
   810 
   810 
   811   baseA->TraceConnect ("/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   811   baseA->TraceConnect ("/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   812   m_baseATrace = false;
   812   m_baseATrace = false;
   813   baseA->BaseGenerateTrace (3);
   813   baseA->BaseGenerateTrace (3);
   814   NS_TEST_ASSERT (m_baseATrace);
   814   NS_TEST_ASSERT (m_baseATrace);
   836   baseA->TraceDisconnect ("/$BaseA/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   836   baseA->TraceDisconnect ("/$BaseA/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   837 
   837 
   838   Ptr<DerivedA> derivedA;
   838   Ptr<DerivedA> derivedA;
   839   derivedA = CreateObject<DerivedA> (1);
   839   derivedA = CreateObject<DerivedA> (1);
   840   baseB = CreateObject<BaseB> ();
   840   baseB = CreateObject<BaseB> ();
   841   derivedA->AddInterface (baseB);
   841   derivedA->AggregateObject (baseB);
   842   baseB->TraceConnect ("/$DerivedA/deriveda-x", MakeCallback (&ObjectTest::DerivedATrace, this));
   842   baseB->TraceConnect ("/$DerivedA/deriveda-x", MakeCallback (&ObjectTest::DerivedATrace, this));
   843   baseB->TraceConnect ("/$DerivedA/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   843   baseB->TraceConnect ("/$DerivedA/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
   844   m_derivedATrace = false;
   844   m_derivedATrace = false;
   845   m_baseATrace = false;
   845   m_baseATrace = false;
   846   derivedA->DerivedGenerateTrace (8);
   846   derivedA->DerivedGenerateTrace (8);