From cb9fdc66e3493db9de4b7e85cca6f323b2dd493b Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Fri, 10 Aug 2007 14:14:29 +0200 Subject: [PATCH] override Connect and Disconnect in Composite and Terminal Trace resolvers --- src/common/composite-trace-resolver.cc | 86 ++++++++++++++++++++------ src/common/composite-trace-resolver.h | 32 +++++++--- src/common/terminal-trace-resolver.h | 20 ++++-- 3 files changed, 106 insertions(+), 32 deletions(-) diff --git a/src/common/composite-trace-resolver.cc b/src/common/composite-trace-resolver.cc index e9f461959..a789a9b51 100644 --- a/src/common/composite-trace-resolver.cc +++ b/src/common/composite-trace-resolver.cc @@ -19,6 +19,9 @@ * Author: Mathieu Lacage */ #include "composite-trace-resolver.h" +#include "ns3/debug.h" + +NS_DEBUG_COMPONENT_DEFINE ("CompositeTraceResolver"); namespace ns3 { @@ -47,17 +50,39 @@ CompositeTraceResolver::DoAdd (std::string name, m_items.push_back (item); } -TraceResolver::TraceResolverList -CompositeTraceResolver::DoLookup (std::string id) const +void +CompositeTraceResolver::Connect (std::string path, CallbackBase const &cb, const TraceContext &context) { + NS_DEBUG ("connect path="<createResolver (), i->context)); - } - return list; + OperationOne (subpath, i, cb, context, op); + } + return; } std::string::size_type start, end; start = id.find_first_of ("(", 0); @@ -68,30 +93,29 @@ CompositeTraceResolver::DoLookup (std::string id) const { if (i->name == id) { - TraceResolver::TraceResolverList list; - list.push_back (std::make_pair (i->createResolver (), i->context)); - return list; + OperationOne (subpath, i, cb, context, op); + return; } } } std::list names; std::string alternatives = std::string (id, start+1, end-1); - std::string::size_type next, cur; - next = 0; - cur = 0; + std::string::size_type next_pos, cur_pos; + next_pos = 0; + cur_pos = 0; while (true) { std::string element; - next = alternatives.find ("|", cur); - if (next == std::string::npos) + next_pos = alternatives.find ("|", cur_pos); + if (next_pos == std::string::npos) { - element = std::string (alternatives, cur, alternatives.size ()); + element = std::string (alternatives, cur_pos, alternatives.size ()); names.push_back (element); break; } - element = std::string (alternatives, cur, next); + element = std::string (alternatives, cur_pos, next_pos); names.push_back (element); - cur = next + 1; + cur_pos = next_pos + 1; } TraceResolver::TraceResolverList list; for (std::list::const_iterator i = names.begin (); i != names.end (); i++) @@ -100,12 +124,38 @@ CompositeTraceResolver::DoLookup (std::string id) const { if (j->name == *i) { - list.push_back (std::make_pair (j->createResolver (), j->context)); + OperationOne (subpath, j, cb, context, op); break; } } } - return list; +} + +void +CompositeTraceResolver::OperationOne (std::string subpath, + TraceItems::const_iterator i, + const CallbackBase &cb, + const TraceContext &context, + enum Operation op) +{ + TraceResolver *resolver = i->createResolver (); + switch (op) { + case CONNECT: { + NS_DEBUG ("connect to path="<::TerminalTraceResolver (T &traceSource) {} template void -TerminalTraceResolver::DoConnect (CallbackBase const &cb, const TraceContext &context) +TerminalTraceResolver::Connect (std::string path, CallbackBase const &cb, const TraceContext &context) { - m_traceSource.AddCallback (cb, context); + if (path == "") + { + m_traceSource.AddCallback (cb, context); + } } template void -TerminalTraceResolver::DoDisconnect (CallbackBase const &cb) +TerminalTraceResolver::Disconnect (std::string path, CallbackBase const &cb) { - m_traceSource.RemoveCallback (cb); + if (path == "") + { + m_traceSource.RemoveCallback (cb); + } } }//namespace ns3