[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