119 { |
119 { |
120 NS_LOG_FUNCTION; |
120 NS_LOG_FUNCTION; |
121 Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> (); |
121 Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> (); |
122 resolver->AddSource ("enqueue", |
122 resolver->AddSource ("enqueue", |
123 TraceDoc ("store packet in queue", |
123 TraceDoc ("store packet in queue", |
124 "const Packet &", "packet queued"), |
124 "Ptr<const Packet>", "packet queued"), |
125 m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE)); |
125 m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE)); |
126 resolver->AddSource ("dequeue", |
126 resolver->AddSource ("dequeue", |
127 TraceDoc ("remove packet from queue", |
127 TraceDoc ("remove packet from queue", |
128 "const Packet &", "packet dequeued"), |
128 "Ptr<const Packet>", "packet dequeued"), |
129 m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE)); |
129 m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE)); |
130 resolver->AddSource ("drop", |
130 resolver->AddSource ("drop", |
131 TraceDoc ("drop packet from queue", |
131 TraceDoc ("drop packet from queue", |
132 "const Packet &", "packet dropped"), |
132 "Ptr<const Packet>", "packet dropped"), |
133 m_traceDrop, QueueTraceType (QueueTraceType::DROP)); |
133 m_traceDrop, QueueTraceType (QueueTraceType::DROP)); |
134 resolver->SetParentResolver (Object::GetTraceResolver ()); |
134 resolver->SetParentResolver (Object::GetTraceResolver ()); |
135 return resolver; |
135 return resolver; |
136 } |
136 } |
137 |
137 |
138 bool |
138 bool |
139 Queue::Enqueue (const Packet& p) |
139 Queue::Enqueue (Ptr<Packet> p) |
140 { |
140 { |
141 NS_LOG_FUNCTION; |
141 NS_LOG_FUNCTION; |
142 NS_LOG_PARAM ("(" << &p << ")"); |
142 NS_LOG_PARAM ("(" << p << ")"); |
143 NS_LOG_LOGIC ("m_traceEnqueue (p)"); |
143 NS_LOG_LOGIC ("m_traceEnqueue (p)"); |
144 |
144 |
145 m_traceEnqueue (p); |
145 m_traceEnqueue (p); |
146 |
146 |
147 bool retval = DoEnqueue (p); |
147 bool retval = DoEnqueue (p); |
148 if (retval) |
148 if (retval) |
149 { |
149 { |
150 m_nBytes += p.GetSize (); |
150 m_nBytes += p->GetSize (); |
151 m_nPackets++; |
151 m_nPackets++; |
152 } |
152 } |
153 return retval; |
153 return retval; |
154 } |
154 } |
155 |
155 |
156 bool |
156 Ptr<Packet> |
157 Queue::Dequeue (Packet &p) |
157 Queue::Dequeue (void) |
158 { |
158 { |
159 NS_LOG_FUNCTION; |
159 NS_LOG_FUNCTION; |
160 NS_LOG_PARAM ("(" << &p << ")"); |
160 |
161 |
161 Ptr<Packet> packet = DoDequeue (); |
162 bool retval = DoDequeue (p); |
162 |
163 |
163 if (packet != 0) |
164 if (retval) |
|
165 { |
164 { |
166 m_nBytes -= p.GetSize (); |
165 m_nBytes -= packet->GetSize (); |
167 m_nPackets--; |
166 m_nPackets--; |
168 |
167 |
169 NS_ASSERT (m_nBytes >= 0); |
168 NS_ASSERT (m_nBytes >= 0); |
170 NS_ASSERT (m_nPackets >= 0); |
169 NS_ASSERT (m_nPackets >= 0); |
171 |
170 |
172 NS_LOG_LOGIC("m_traceDequeue (p)"); |
171 NS_LOG_LOGIC("m_traceDequeue (p)"); |
173 |
172 |
174 const Packet packet = p; |
|
175 m_traceDequeue (packet); |
173 m_traceDequeue (packet); |
176 } |
174 } |
177 |
175 return packet; |
178 return retval; |
|
179 } |
176 } |
180 |
177 |
181 void |
178 void |
182 Queue::DequeueAll (void) |
179 Queue::DequeueAll (void) |
183 { |
180 { |
184 NS_LOG_FUNCTION; |
181 NS_LOG_FUNCTION; |
185 NS_ASSERT_MSG (0, "Don't know what to do with dequeued packets!"); |
182 NS_ASSERT_MSG (0, "Don't know what to do with dequeued packets!"); |
186 } |
183 } |
187 |
184 |
188 bool |
185 Ptr<Packet> |
189 Queue::Peek (Packet &p) |
186 Queue::Peek (void) |
190 { |
187 { |
191 NS_LOG_FUNCTION; |
188 NS_LOG_FUNCTION; |
192 NS_LOG_PARAM ("(" << &p << ")"); |
189 return DoPeek (); |
193 return DoPeek (p); |
|
194 } |
190 } |
195 |
191 |
196 |
192 |
197 uint32_t |
193 uint32_t |
198 Queue::GetNPackets (void) |
194 Queue::GetNPackets (void) |