36 } |
36 } |
37 m_items.clear (); |
37 m_items.clear (); |
38 } |
38 } |
39 |
39 |
40 void |
40 void |
41 CompositeTraceResolver::AddItem (CompositeItem *item) |
41 CompositeTraceResolver::AddItem (ResolveItem *item) |
42 { |
42 { |
43 m_items.push_back (item); |
43 m_items.push_back (item); |
44 } |
44 } |
45 |
45 |
46 void |
46 void |
47 CompositeTraceResolver::Add (std::string name, |
47 CompositeTraceResolver::Add (std::string name, |
48 Callback<Ptr<TraceResolver> > createResolver) |
48 Callback<Ptr<TraceResolver> > createResolver) |
49 { |
49 { |
50 class MakerCompositeItem : public CompositeItem |
50 class MakerResolveItem : public ResolveItem |
51 { |
51 { |
52 public: |
52 public: |
53 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
53 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
54 {maker ()->Connect (subpath, cb, context);} |
54 {maker ()->Connect (subpath, cb, context);} |
55 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
55 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
62 TraceContext ctx = context; |
62 TraceContext ctx = context; |
63 ctx.Union (this->context); |
63 ctx.Union (this->context); |
64 this->maker ()->CollectSources (path, ctx, collection); |
64 this->maker ()->CollectSources (path, ctx, collection); |
65 } |
65 } |
66 Callback<Ptr<TraceResolver> > maker; |
66 Callback<Ptr<TraceResolver> > maker; |
67 } *item = new MakerCompositeItem (); |
67 } *item = new MakerResolveItem (); |
68 item->name = name; |
68 item->name = name; |
69 item->context = TraceContext (); |
69 item->context = TraceContext (); |
70 item->maker = createResolver; |
70 item->maker = createResolver; |
71 AddItem (item); |
71 AddItem (item); |
72 } |
72 } |
83 CompositeTraceResolver::DoAddSource (std::string name, |
83 CompositeTraceResolver::DoAddSource (std::string name, |
84 const TraceDoc &doc, |
84 const TraceDoc &doc, |
85 const TraceSource &trace, |
85 const TraceSource &trace, |
86 const TraceContext &context) |
86 const TraceContext &context) |
87 { |
87 { |
88 class SourceCompositeItem : public CompositeItem |
88 class SourceResolveItem : public ResolveItem |
89 { |
89 { |
90 public: |
90 public: |
91 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
91 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
92 {if (subpath == "") {trace->AddCallback (cb, context);}} |
92 {if (subpath == "") {trace->AddCallback (cb, context);}} |
93 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
93 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
101 ctx.Union (this->context); |
101 ctx.Union (this->context); |
102 collection->AddUnique (path, ctx, this->doc); |
102 collection->AddUnique (path, ctx, this->doc); |
103 } |
103 } |
104 TraceSource *trace; |
104 TraceSource *trace; |
105 TraceDoc doc; |
105 TraceDoc doc; |
106 } *item = new SourceCompositeItem (); |
106 } *item = new SourceResolveItem (); |
107 item->name = name; |
107 item->name = name; |
108 item->context = context; |
108 item->context = context; |
109 item->trace = const_cast<TraceSource *> (&trace); |
109 item->trace = const_cast<TraceSource *> (&trace); |
110 item->doc = doc; |
110 item->doc = doc; |
111 AddItem (item); |
111 AddItem (item); |
113 |
113 |
114 |
114 |
115 |
115 |
116 |
116 |
117 void |
117 void |
118 CompositeTraceResolver::AddChild (std::string name, Ptr<Object> child) |
118 CompositeTraceResolver::AddComposite (std::string name, Ptr<Object> composite) |
119 { |
119 { |
120 DoAddChild (name, child, TraceContext ()); |
120 DoAddComposite (name, composite, TraceContext ()); |
121 } |
121 } |
122 void |
122 void |
123 CompositeTraceResolver::DoAddChild (std::string name, Ptr<Object> child, const TraceContext &context) |
123 CompositeTraceResolver::DoAddComposite (std::string name, Ptr<Object> composite, const TraceContext &context) |
124 { |
124 { |
125 class ChildCompositeItem : public CompositeItem |
125 class CompositeResolveItem : public ResolveItem |
126 { |
126 { |
127 public: |
127 public: |
128 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
128 virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) |
129 {child->GetTraceResolver ()->Connect (subpath, cb, context);} |
129 {composite->GetTraceResolver ()->Connect (subpath, cb, context);} |
130 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
130 virtual void Disconnect (std::string subpath, const CallbackBase &cb) |
131 {child->TraceDisconnect (subpath, cb);} |
131 {composite->TraceDisconnect (subpath, cb);} |
132 virtual void CollectSources (std::string path, const TraceContext &context, |
132 virtual void CollectSources (std::string path, const TraceContext &context, |
133 SourceCollection *collection) |
133 SourceCollection *collection) |
134 { |
134 { |
135 path.append ("/"); |
135 path.append ("/"); |
136 path.append (this->name); |
136 path.append (this->name); |
137 TraceContext ctx = context; |
137 TraceContext ctx = context; |
138 ctx.Union (this->context); |
138 ctx.Union (this->context); |
139 this->child->GetTraceResolver ()->CollectSources (path, ctx, collection); |
139 this->composite->GetTraceResolver ()->CollectSources (path, ctx, collection); |
140 } |
140 } |
141 |
141 |
142 Ptr<Object> child; |
142 Ptr<Object> composite; |
143 } *item = new ChildCompositeItem (); |
143 } *item = new CompositeResolveItem (); |
144 item->name = name; |
144 item->name = name; |
145 item->context = context; |
145 item->context = context; |
146 item->child = child; |
146 item->composite = composite; |
147 AddItem (item); |
147 AddItem (item); |
148 } |
148 } |
149 |
149 |
150 void |
150 void |
151 CompositeTraceResolver::SetParent (Ptr<TraceResolver> resolver) |
151 CompositeTraceResolver::SetParentResolver (Ptr<TraceResolver> resolver) |
152 { |
152 { |
153 m_parent = resolver; |
153 m_parent = resolver; |
154 } |
154 } |
155 |
155 |
156 void |
156 void |
161 { |
161 { |
162 public: |
162 public: |
163 ConnectOperation (const CallbackBase &cb, const TraceContext &context) |
163 ConnectOperation (const CallbackBase &cb, const TraceContext &context) |
164 : m_cb (cb), m_context (context) |
164 : m_cb (cb), m_context (context) |
165 {} |
165 {} |
166 virtual void Do (std::string subpath, CompositeItem *item) const |
166 virtual void Do (std::string subpath, ResolveItem *item) const |
167 { |
167 { |
168 NS_DEBUG ("connect to path="<<subpath<<" name="<<item->name); |
168 NS_DEBUG ("connect to path="<<subpath<<" name="<<item->name); |
169 TraceContext context = m_context; |
169 TraceContext context = m_context; |
170 context.Union (item->context); |
170 context.Union (item->context); |
171 item->Connect (subpath, m_cb, context); |
171 item->Connect (subpath, m_cb, context); |
259 { |
259 { |
260 public: |
260 public: |
261 DisconnectOperation (const CallbackBase &cb) |
261 DisconnectOperation (const CallbackBase &cb) |
262 : m_cb (cb) |
262 : m_cb (cb) |
263 {} |
263 {} |
264 virtual void Do (std::string subpath, CompositeItem *item) const |
264 virtual void Do (std::string subpath, ResolveItem *item) const |
265 { |
265 { |
266 NS_DEBUG ("disconnect from path="<<subpath<<" name="<<item->name); |
266 NS_DEBUG ("disconnect from path="<<subpath<<" name="<<item->name); |
267 item->Disconnect (subpath, m_cb); |
267 item->Disconnect (subpath, m_cb); |
268 } |
268 } |
269 virtual void DoParent (std::string path, Ptr<TraceResolver> parent) const |
269 virtual void DoParent (std::string path, Ptr<TraceResolver> parent) const |