diff -r 2a729c1b2e68 -r ebe61d20a7ae src/core/array-trace-resolver.h --- a/src/core/array-trace-resolver.h Sat Dec 22 18:46:43 2007 +0000 +++ b/src/core/array-trace-resolver.h Tue Dec 25 11:09:15 2007 +0100 @@ -23,6 +23,7 @@ #include #include +#include #include "callback.h" #include "trace-resolver.h" #include "object.h" @@ -78,6 +79,17 @@ }; IteratorBase *m_iter; }; + +class ArrayTraceResolverMatcher +{ +public: + ArrayTraceResolverMatcher (std::string element); + bool Matches (uint32_t i) const; + bool StringToUint32 (std::string str, uint32_t *value) const; +private: + std::string m_element; +}; + }//namespace ns3 @@ -133,19 +145,20 @@ } std::string id = GetElement (path); std::string subpath = GetSubpath (path); - if (id == "*") - { - uint32_t j = 0; - for (m_iter->Rewind (); m_iter->HasNext (); m_iter->Next ()) - { - TraceContext tmp = context; - INDEX index = j; - tmp.AddElement (index); - Ptr obj = m_iter->Get (); - obj->GetTraceResolver ()->Connect (subpath, cb, tmp); - j++; - } - } + ArrayTraceResolverMatcher matcher = ArrayTraceResolverMatcher (id); + uint32_t i = 0; + for (m_iter->Rewind (); m_iter->HasNext (); m_iter->Next ()) + { + if (matcher.Matches (i)) + { + TraceContext tmp = context; + INDEX index = i; + tmp.AddElement (index); + Ptr obj = m_iter->Get (); + obj->GetTraceResolver ()->Connect (subpath, cb, tmp); + } + i++; + } } template void @@ -157,14 +170,17 @@ } std::string id = GetElement (path); std::string subpath = GetSubpath (path); - if (id == "*") - { - for (m_iter->Rewind (); m_iter->HasNext (); m_iter->Next ()) - { - Ptr obj = m_iter->Get (); - obj->TraceDisconnect (subpath, cb); - } - } + ArrayTraceResolverMatcher matcher = ArrayTraceResolverMatcher (id); + uint32_t i = 0; + for (m_iter->Rewind (); m_iter->HasNext (); m_iter->Next ()) + { + if (matcher.Matches (i)) + { + Ptr obj = m_iter->Get (); + obj->TraceDisconnect (subpath, cb); + } + i++; + } } template void