# HG changeset patch # User Mathieu Lacage # Date 1186936093 -7200 # Node ID 47de68729c862c93143c2b5be66bee5df65ab8b7 # Parent eb06ae6eb1801e157ea796dece24a8af5710b138 an untested interface id trace resolver diff -r eb06ae6eb180 -r 47de68729c86 src/core/object.cc --- a/src/core/object.cc Sun Aug 12 18:27:52 2007 +0200 +++ b/src/core/object.cc Sun Aug 12 18:28:13 2007 +0200 @@ -35,6 +35,7 @@ public: void SetParent (uint16_t child, const uint16_t *parent); uint16_t LookupParent (uint16_t child); + private: std::vector m_parents; }; @@ -56,6 +57,54 @@ namespace ns3 { +class InterfaceIdTraceResolver : public TraceResolver +{ +public: + InterfaceIdTraceResolver (Ptr aggregate); + virtual void Connect (std::string path, CallbackBase const &cb, const TraceContext &context); + virtual void Disconnect (std::string path, CallbackBase const &cb); +private: + Ptr ParseForInterface (std::string path); + Ptr m_aggregate; +}; + +InterfaceIdTraceResolver::InterfaceIdTraceResolver (Ptr aggregate) + : m_aggregate (aggregate) +{} +Ptr +InterfaceIdTraceResolver::ParseForInterface (std::string path) +{ + std::string element = GetElement (path); + std::string::size_type dollar_pos = element.find ("$"); + if (dollar_pos != 0) + { + return 0; + } + std::string interfaceName = element.substr (1, std::string::npos); + InterfaceId interfaceId = InterfaceId::LookupByName (interfaceName); + Ptr interface = m_aggregate->QueryInterface (interfaceId); + return interface; +} +void +InterfaceIdTraceResolver::Connect (std::string path, CallbackBase const &cb, const TraceContext &context) +{ + Ptr interface = ParseForInterface (path); + if (interface != 0) + { + interface->TraceConnect (GetSubpath (path), cb, context); + } +} +void +InterfaceIdTraceResolver::Disconnect (std::string path, CallbackBase const &cb) +{ + Ptr interface = ParseForInterface (path); + if (interface != 0) + { + interface->TraceDisconnect (GetSubpath (path), cb); + } +} + + InterfaceId::InterfaceId (uint16_t iid) : m_iid (iid) {} @@ -197,7 +246,9 @@ Ptr Object::GetTraceResolver (void) { - return Create (); + Ptr resolver = + Create (this); + return resolver; } bool