summaryrefslogtreecommitdiff
path: root/base/cprintf.cc
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-01-29 17:44:08 -0500
committerNathan Binkert <binkertn@umich.edu>2004-01-29 17:44:08 -0500
commitcb35f819c5326b37899695345ad78e032e8d7cdf (patch)
treed48522853b774be3c4a39e93ee63eb60448ddda7 /base/cprintf.cc
parentfe4d9f124f6234a1b431dc33433a88ee18d61db9 (diff)
downloadgem5-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.cc26
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;
}
}