Move std::ostream << CaptureLog logic into CaptureLog::streamto().

That lets us reliably declare the operator<<() free function inline, which
permits multiple translation units in the same executable to #include
"wrapllerrs.h".
meow-7.2.2
Nat Goodspeed 2012-03-05 13:03:23 -05:00
parent 30e8e23d7c
commit b3b51f012f
1 changed files with 18 additions and 12 deletions

View File

@ -136,25 +136,31 @@ public:
<< *this));
}
std::ostream& streamto(std::ostream& out) const
{
MessageList::const_iterator mi(mMessages.begin()), mend(mMessages.end());
if (mi != mend)
{
// handle first message separately: it doesn't get a newline
out << *mi++;
for ( ; mi != mend; ++mi)
{
// every subsequent message gets a newline
out << '\n' << *mi;
}
}
return out;
}
typedef std::list<std::string> MessageList;
MessageList mMessages;
LLError::Settings* mOldSettings;
};
inline
std::ostream& operator<<(std::ostream& out, const CaptureLog& log)
{
CaptureLog::MessageList::const_iterator mi(log.mMessages.begin()), mend(log.mMessages.end());
if (mi != mend)
{
// handle first message separately: it doesn't get a newline
out << *mi++;
for ( ; mi != mend; ++mi)
{
// every subsequent message gets a newline
out << '\n' << *mi;
}
}
return out;
return log.streamto(out);
}
#endif /* ! defined(LL_WRAPLLERRS_H) */