[Orxonox-commit 4106] r8777 - in code/branches/output/src/libraries/util: . output

landauf at orxonox.net landauf at orxonox.net
Mon Jul 25 14:47:50 CEST 2011


Author: landauf
Date: 2011-07-25 14:47:49 +0200 (Mon, 25 Jul 2011)
New Revision: 8777

Modified:
   code/branches/output/src/libraries/util/Output.h
   code/branches/output/src/libraries/util/output/LogWriter.cc
   code/branches/output/src/libraries/util/output/MemoryWriter.cc
   code/branches/output/src/libraries/util/output/OutputDefinitions.h
   code/branches/output/src/libraries/util/output/OutputManager.cc
   code/branches/output/src/libraries/util/output/OutputStream.cc
   code/branches/output/src/libraries/util/output/OutputStream.h
Log:
output contexts are now defined as functions instead of global constants. this should avoid a static initialization fiasco and reduces the amount of context registrations (previosly it was N*M registrations with N = number of contexts and M = number of source files, now they are registered on demand). slightly worse performance though.

Modified: code/branches/output/src/libraries/util/Output.h
===================================================================
--- code/branches/output/src/libraries/util/Output.h	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/Output.h	2011-07-25 12:47:49 UTC (rev 8777)
@@ -39,7 +39,7 @@
 {
     using namespace level;
 
-    inline OutputStream& orxout(OutputLevel level = level::debug_output, OutputContext context = context::undefined)
+    inline OutputStream& orxout(OutputLevel level = level::debug_output, OutputContextFunction context = context::undefined)
     {
         static OutputStream stream;
         stream.setOutputAttributes(level, context);

Modified: code/branches/output/src/libraries/util/output/LogWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/LogWriter.cc	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/LogWriter.cc	2011-07-25 12:47:49 UTC (rev 8777)
@@ -82,14 +82,14 @@
         std::string name = this->path_ + '/' + this->filename_;
 
         if (this->bDefaultPath_)
-            OutputManager::getInstance().pushMessage(level::user_info, context::output, "Opening log file " + name);
+            OutputManager::getInstance().pushMessage(level::user_info, context::output(), "Opening log file " + name);
 
         this->file_.open(name.c_str(), std::fstream::out);
 
         if (this->file_.is_open())
             this->printLine("Log file opened");
         else
-            OutputManager::getInstance().pushMessage(level::user_warning, context::output, "Failed to open log file. File logging disabled.");
+            OutputManager::getInstance().pushMessage(level::user_warning, context::output(), "Failed to open log file. File logging disabled.");
     }
 
     void LogWriter::closeFile()
@@ -103,7 +103,7 @@
 
     void LogWriter::setLogPath(const std::string& path)
     {
-        OutputManager::getInstance().pushMessage(level::internal_info, context::output, "Migrating log file from " + this->path_ + "\nto " + path);
+        OutputManager::getInstance().pushMessage(level::internal_info, context::output(), "Migrating log file from " + this->path_ + "\nto " + path);
 
         this->closeFile();
         this->path_ = path;

Modified: code/branches/output/src/libraries/util/output/MemoryWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/MemoryWriter.cc	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/MemoryWriter.cc	2011-07-25 12:47:49 UTC (rev 8777)
@@ -66,7 +66,7 @@
     void MemoryWriter::disable()
     {
         OutputManager::getInstance().unregisterListener(this);
-        this->output(level::debug_output, context::undefined, std::vector<std::string>(1, "MemoryWriter disabled, further messages may be lost"));
+        this->output(level::debug_output, context::undefined(), std::vector<std::string>(1, "MemoryWriter disabled, further messages may be lost"));
     }
 }
 }

Modified: code/branches/output/src/libraries/util/output/OutputDefinitions.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputDefinitions.h	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/OutputDefinitions.h	2011-07-25 12:47:49 UTC (rev 8777)
@@ -57,6 +57,7 @@
     }
 
     typedef uint64_t OutputContext;
+    typedef OutputContext (OutputContextFunction)();
 
     extern _UtilExport OutputContext registerContext(const std::string& name);
 
@@ -64,11 +65,15 @@
     {
         static const OutputContext all       = 0xFFFFFFFFFFFFFFFF;
         static const OutputContext none      = 0x0000000000000000;
-        static const OutputContext undefined = registerContext("undefined");
 
-        static const OutputContext test1     = registerContext("test1");
-        static const OutputContext test2     = registerContext("test2");
-        static const OutputContext output    = registerContext("output");
+        namespace
+        {
+            OutputContext undefined()   { static OutputContext value = registerContext("undefined");    return value; }
+
+            OutputContext test1()       { static OutputContext value = registerContext("test1");        return value; }
+            OutputContext test2()       { static OutputContext value = registerContext("test2");        return value; }
+            OutputContext output()      { static OutputContext value = registerContext("output");       return value; }
+        }
     }
 }
 }

Modified: code/branches/output/src/libraries/util/output/OutputManager.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputManager.cc	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/OutputManager.cc	2011-07-25 12:47:49 UTC (rev 8777)
@@ -179,7 +179,7 @@
 
     const std::string& OutputManager::getContextName(OutputContext context) const
     {
-        if (context != context::undefined)
+        if (context != context::undefined())
         {
             boost::bimap<OutputContext, std::string>::left_map::const_iterator it = this->contexts_.left.find(context);
             if (it != this->contexts_.left.end())
@@ -213,7 +213,7 @@
     std::string OutputManager::getDefaultPrefix(OutputLevel level, OutputContext context) const
     {
         std::string prefix = this->getLevelName(level) + ": ";
-        if (context != context::undefined)
+        if (context != context::undefined())
         {
             std::string context_name = this->getContextName(context);
             if (context_name == "")

Modified: code/branches/output/src/libraries/util/output/OutputStream.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputStream.cc	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/OutputStream.cc	2011-07-25 12:47:49 UTC (rev 8777)
@@ -47,12 +47,12 @@
         this->str("");
     }
 
-    void OutputStream::setOutputAttributes(OutputLevel level, OutputContext context)
+    void OutputStream::setOutputAttributes(OutputLevel level, OutputContextFunction context)
     {
         this->level_ = level;
-        this->context_ = context;
+        this->context_ = context();
 
-        this->bAcceptsOutput_ = OutputManager::getInstanceAndCreateListeners().acceptsOutput(level, context);
+        this->bAcceptsOutput_ = OutputManager::getInstanceAndCreateListeners().acceptsOutput(this->level_, this->context_);
     }
 }
 }

Modified: code/branches/output/src/libraries/util/output/OutputStream.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputStream.h	2011-07-25 11:05:04 UTC (rev 8776)
+++ code/branches/output/src/libraries/util/output/OutputStream.h	2011-07-25 12:47:49 UTC (rev 8777)
@@ -46,7 +46,7 @@
         public:
             _UtilExport OutputStream();
 
-            void _UtilExport setOutputAttributes(OutputLevel level, OutputContext context);
+            void _UtilExport setOutputAttributes(OutputLevel level, OutputContextFunction context);
 
             template <class T>
             inline OutputStream& operator<<(const T& val) { return this->output(val); }




More information about the Orxonox-commit mailing list