diff options
author | Nathan Binkert <binkertn@umich.edu> | 2004-01-29 17:44:08 -0500 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2004-01-29 17:44:08 -0500 |
commit | cb35f819c5326b37899695345ad78e032e8d7cdf (patch) | |
tree | d48522853b774be3c4a39e93ee63eb60448ddda7 /base/cprintf.cc | |
parent | fe4d9f124f6234a1b431dc33433a88ee18d61db9 (diff) | |
download | gem5-cb35f819c5326b37899695345ad78e032e8d7cdf.tar.xz |
delete the data in the arglist when the list is destroyed,
not while printing out the data. This allows the data
to be dumped more than once.
base/cprintf.hh:
need a destructor
--HG--
extra : convert_revision : 235e9fe24488ac4c0ae1b562ef9fa6e0bd1e899c
Diffstat (limited to 'base/cprintf.cc')
-rw-r--r-- | base/cprintf.cc | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/base/cprintf.cc b/base/cprintf.cc index 5796a712b..5cbf0c057 100644 --- a/base/cprintf.cc +++ b/base/cprintf.cc @@ -37,9 +37,20 @@ using namespace std; namespace cp { +ArgList::~ArgList() +{ + while (!objects.empty()) { + delete objects.front(); + objects.pop_front(); + } +} + void ArgList::dump(const string &format) { + list_t::iterator iter = objects.begin(); + list_t::iterator end = objects.end(); + const char *p = format.c_str(); stream->fill(' '); @@ -198,22 +209,19 @@ ArgList::dump(const string &format) } } - if (!objects.empty()) + if (iter != end) { - Base *data = objects.front(); - objects.pop_front(); - ios::fmtflags saved_flags = stream->flags(); char old_fill = stream->fill(); int old_precision = stream->precision(); - data->process(*stream, fmt); + (*iter)->process(*stream, fmt); stream->flags(saved_flags); stream->fill(old_fill); stream->precision(old_precision); - delete data; + ++iter; } else { *stream << "<missing arg for format>"; } @@ -241,11 +249,9 @@ ArgList::dump(const string &format) } } - while (!objects.empty()) { + while (iter != end) { *stream << "<extra arg>"; - Base *data = objects.front(); - objects.pop_front(); - delete data; + ++iter; } } |