scheduleEventAbsolute(m_receiver->clockEdge(m_recycle_latency));
}
+void
+MessageBuffer::reanalyzeList(list<MsgPtr> <, Tick nextTick)
+{
+ while(!lt.empty()) {
+ m_msg_counter++;
+ MessageBufferNode msgNode(nextTick, m_msg_counter, lt.front());
+
+ m_prio_heap.push_back(msgNode);
+ push_heap(m_prio_heap.begin(), m_prio_heap.end(),
+ greater<MessageBufferNode>());
+
+ m_consumer->scheduleEventAbsolute(nextTick);
+ lt.pop_front();
+ }
+}
+
void
MessageBuffer::reanalyzeMessages(const Address& addr)
{
// Put all stalled messages associated with this address back on the
// prio heap
//
- while(!m_stall_msg_map[addr].empty()) {
- m_msg_counter++;
- MessageBufferNode msgNode(nextTick, m_msg_counter,
- m_stall_msg_map[addr].front());
-
- m_prio_heap.push_back(msgNode);
- push_heap(m_prio_heap.begin(), m_prio_heap.end(),
- greater<MessageBufferNode>());
-
- m_consumer->scheduleEventAbsolute(nextTick);
- m_stall_msg_map[addr].pop_front();
- }
+ reanalyzeList(m_stall_msg_map[addr], nextTick);
m_stall_msg_map.erase(addr);
}
// prio heap
//
for (StallMsgMapType::iterator map_iter = m_stall_msg_map.begin();
- map_iter != m_stall_msg_map.end();
- ++map_iter) {
-
- while(!(map_iter->second).empty()) {
- m_msg_counter++;
- MessageBufferNode msgNode(nextTick, m_msg_counter,
- (map_iter->second).front());
-
- m_prio_heap.push_back(msgNode);
- push_heap(m_prio_heap.begin(), m_prio_heap.end(),
- greater<MessageBufferNode>());
-
- m_consumer->scheduleEventAbsolute(nextTick);
- (map_iter->second).pop_front();
- }
+ map_iter != m_stall_msg_map.end(); ++map_iter) {
+ reanalyzeList(map_iter->second, nextTick);
}
m_stall_msg_map.clear();
}
// This required for debugging the code.
uint32_t functionalWrite(Packet *pkt);
+ private:
+ void reanalyzeList(std::list<MsgPtr> &, Tick);
+
private:
//added by SS
Cycles m_recycle_latency;
// use a std::map for the stalled messages as this container is
// sorted and ensures a well-defined iteration order
typedef std::map< Address, std::list<MsgPtr> > StallMsgMapType;
- typedef std::vector<MsgPtr>::iterator MsgListIter;
StallMsgMapType m_stall_msg_map;
std::string m_name;