dev: Make serialization in Sinic constant

This changeset transitions the Sinic device to the new serialization
framework that requires the serialization method to be constant.
This commit is contained in:
Andreas Sandberg 2015-08-07 09:59:14 +01:00
parent 53e777d683
commit af6b51925c
3 changed files with 13 additions and 9 deletions

View file

@ -80,6 +80,7 @@ class PacketFifo
typedef std::list<PacketFifoEntry> fifo_list;
typedef fifo_list::iterator iterator;
typedef fifo_list::const_iterator const_iterator;
protected:
std::list<PacketFifoEntry> fifo;
@ -112,6 +113,9 @@ class PacketFifo
iterator begin() { return fifo.begin(); }
iterator end() { return fifo.end(); }
const_iterator begin() const { return fifo.begin(); }
const_iterator end() const { return fifo.end(); }
EthPacketPtr front() { return fifo.begin()->packet; }
bool push(EthPacketPtr ptr)
@ -171,25 +175,25 @@ class PacketFifo
bool copyout(void *dest, unsigned offset, unsigned len);
int countPacketsBefore(iterator i)
int countPacketsBefore(const_iterator i) const
{
if (i == fifo.end())
return 0;
return i->number - fifo.begin()->number;
}
int countPacketsAfter(iterator i)
int countPacketsAfter(const_iterator i) const
{
iterator end = fifo.end();
auto end = fifo.end();
if (i == end)
return 0;
return (--end)->number - i->number;
}
void check()
void check() const
{
unsigned total = 0;
for (iterator i = begin(); i != end(); ++i)
for (auto i = begin(); i != end(); ++i)
total += i->packet->length + i->slack;
if (total != _size)

View file

@ -1303,7 +1303,7 @@ Base::unserialize(CheckpointIn &cp)
}
void
Device::serializeOld(CheckpointOut &cp)
Device::serialize(CheckpointOut &cp) const
{
int count;
@ -1345,7 +1345,7 @@ Device::serializeOld(CheckpointOut &cp)
paramOut(cp, reg + ".rxPacketExists", rxPacketExists);
if (rxPacketExists) {
int rxPacket = 0;
PacketFifo::iterator i = rxFifo.begin();
auto i = rxFifo.begin();
while (i != vnic->rxIndex) {
assert(i != rxFifo.end());
++i;
@ -1369,7 +1369,7 @@ Device::serializeOld(CheckpointOut &cp)
SERIALIZE_SCALAR(rxDirtyCount);
SERIALIZE_SCALAR(rxMappedCount);
VirtualList::iterator i, end;
VirtualList::const_iterator i, end;
for (count = 0, i = rxList.begin(), end = rxList.end(); i != end; ++i)
paramOut(cp, csprintf("rxList%d", count++), *i);
int rxListSize = count;

View file

@ -297,7 +297,7 @@ class Device : public Base
* Serialization stuff
*/
public:
void serializeOld(CheckpointOut &cp) M5_ATTR_OVERRIDE;
void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE;
void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE;
public: