[Orxonox-commit 4101] r8772 - code/branches/output/src/libraries/util/output
landauf at orxonox.net
landauf at orxonox.net
Sun Jul 24 16:09:41 CEST 2011
Author: landauf
Date: 2011-07-24 16:09:41 +0200 (Sun, 24 Jul 2011)
New Revision: 8772
Modified:
code/branches/output/src/libraries/util/output/OutputListener.h
code/branches/output/src/libraries/util/output/OutputManager.cc
code/branches/output/src/libraries/util/output/OutputManager.h
Log:
send the lines of a message as a vector to the output listeners
Modified: code/branches/output/src/libraries/util/output/OutputListener.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.h 2011-07-23 23:22:11 UTC (rev 8771)
+++ code/branches/output/src/libraries/util/output/OutputListener.h 2011-07-24 14:09:41 UTC (rev 8772)
@@ -30,6 +30,9 @@
#define _OutputListener_H__
#include "util/UtilPrereqs.h"
+
+#include <vector>
+
#include "OutputDefinitions.h"
namespace orxonox
@@ -59,8 +62,7 @@
inline bool acceptsOutput(OutputLevel level, OutputContext context) const
{ return ((this->levelMask_ & level) && (this->contextMask_ & context)); }
- protected:
- virtual void output(OutputLevel level, OutputContext context, const std::string& message) = 0;
+ virtual void output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines) = 0;
private:
OutputLevel levelMask_;
Modified: code/branches/output/src/libraries/util/output/OutputManager.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputManager.cc 2011-07-23 23:22:11 UTC (rev 8771)
+++ code/branches/output/src/libraries/util/output/OutputManager.cc 2011-07-24 14:09:41 UTC (rev 8772)
@@ -43,10 +43,20 @@
this->setLevelMax(level::user_info);
}
- protected:
- virtual void output(OutputLevel level, OutputContext context, const std::string& message)
+ virtual void output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines)
{
- COUT(0) << OutputManager::getInstance().getLevelName(level) << " / " << OutputManager::getInstance().getContextName(context) << " : " << message << endl;
+ std::string prefix = OutputManager::getInstance().getLevelName(level) + ": ";
+ if (context != context::undefined)
+ {
+ std::string context_name = OutputManager::getInstance().getContextName(context);
+ if (context_name == "")
+ context_name = OutputManager::getInstance().getComposedContextName(context);
+ prefix += "[" + context_name + "] ";
+ }
+ std::string blanks(prefix.length(), ' ');
+
+ for (size_t i = 0; i < lines.size(); ++i)
+ COUT(0) << (i == 0 ? prefix : blanks) << lines[i] << endl;
}
};
@@ -75,9 +85,16 @@
void OutputManager::pushMessage(OutputLevel level, OutputContext context, const std::string& message)
{
+ std::vector<std::string> lines;
+ for (size_t start = 0, end = 0; end != std::string::npos; start = end + 1)
+ {
+ end = message.find_first_of('\n', start);
+ lines.push_back(message.substr(start, end));
+ }
+
for (size_t i = 0; i < this->listeners_.size(); ++i)
if (this->listeners_[i]->acceptsOutput(level, context))
- this->listeners_[i]->output(level, context, message);
+ this->listeners_[i]->output(level, context, lines);
}
void OutputManager::registerListener(OutputListener* listener)
@@ -167,33 +184,31 @@
{
boost::bimap<OutputContext, std::string>::left_map::const_iterator it = this->contexts_.left.find(context);
if (it != this->contexts_.left.end())
- {
return it->second;
- }
- else
+ }
+ return BLANKSTRING;
+ }
+
+ std::string OutputManager::getComposedContextName(OutputContext context) const
+ {
+ std::string name;
+ size_t counter = 0;
+ for (OutputContext context_test = 0x1; context_test != 0x0; context_test = context_test << 1)
+ {
+ if (context & context_test)
{
- static std::string composed_context;
- composed_context = "";
- size_t counter = 0;
- for (OutputContext context_test = 0x1; context_test != 0x0; context_test = context_test << 1)
+ boost::bimap<OutputContext, std::string>::left_map::const_iterator it = this->contexts_.left.find(context_test);
+ if (it != this->contexts_.left.end())
{
- if (context & context_test)
- {
- it = this->contexts_.left.find(context_test);
- if (it != this->contexts_.left.end())
- {
- if (counter)
- composed_context += ", ";
+ if (counter)
+ name += ", ";
- composed_context += it->second;
- ++counter;
- }
- }
+ name += it->second;
+ ++counter;
}
- return composed_context;
}
}
- return BLANKSTRING;
+ return name;
}
}
}
Modified: code/branches/output/src/libraries/util/output/OutputManager.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputManager.h 2011-07-23 23:22:11 UTC (rev 8771)
+++ code/branches/output/src/libraries/util/output/OutputManager.h 2011-07-24 14:09:41 UTC (rev 8772)
@@ -71,6 +71,7 @@
const std::string& getLevelName(OutputLevel level) const;
const std::string& getContextName(OutputContext context) const;
+ std::string getComposedContextName(OutputContext context) const;
private:
OutputManager();
More information about the Orxonox-commit
mailing list