add the ability to insert into the middle of the timing port send list

--HG--
extra : convert_revision : 5422025f74ba7013f98d1d1dcbd1070f580aae61
This commit is contained in:
Ali Saidi 2006-10-31 13:23:17 -05:00
parent 697b432ba8
commit c68f7feaa8

View file

@ -44,6 +44,7 @@ SimpleTimingPort::recvFunctional(PacketPtr pkt)
if (target->intersect(pkt))
done = fixPacket(pkt, target);
i++;
}
//Then just do an atomic access and throw away the returned latency
@ -98,11 +99,29 @@ SimpleTimingPort::recvRetry()
void
SimpleTimingPort::sendTiming(PacketPtr pkt, Tick time)
{
// Nothing is on the list: add it and schedule an event
if (transmitList.empty()) {
assert(!sendEvent.scheduled());
sendEvent.schedule(curTick+time);
transmitList.push_back(std::pair<Tick,PacketPtr>(time+curTick,pkt));
return;
}
// something is on the list and this belongs at the end
if (time+curTick >= transmitList.back().first) {
transmitList.push_back(std::pair<Tick,PacketPtr>(time+curTick,pkt));
return;
}
// Something is on the list and this belongs somewhere else
std::list<std::pair<Tick,PacketPtr> >::iterator i = transmitList.begin();
std::list<std::pair<Tick,PacketPtr> >::iterator end = transmitList.end();
bool done = false;
while (i != end && !done) {
if (time+curTick < i->first)
transmitList.insert(i,std::pair<Tick,PacketPtr>(time+curTick,pkt));
i++;
}
transmitList.push_back(std::pair<Tick,PacketPtr>(time+curTick,pkt));
}
void