[Orxonox-commit 4163] r8834 - in code/branches/output/src/libraries: core/command util/output

landauf at orxonox.net landauf at orxonox.net
Fri Aug 12 00:27:36 CEST 2011


Author: landauf
Date: 2011-08-12 00:26:40 +0200 (Fri, 12 Aug 2011)
New Revision: 8834

Modified:
   code/branches/output/src/libraries/core/command/Shell.cc
   code/branches/output/src/libraries/util/output/BaseWriter.cc
   code/branches/output/src/libraries/util/output/BaseWriter.h
   code/branches/output/src/libraries/util/output/OutputListener.cc
   code/branches/output/src/libraries/util/output/OutputListener.h
Log:
added flag to disable automatic registration of output listeners. avoids crash during creation of a Shell if some verbose context (object_list?) is activated.
different handling of sub-contexts whose main-context is also explicitly registered (even though that's not the intended way to use)

Modified: code/branches/output/src/libraries/core/command/Shell.cc
===================================================================
--- code/branches/output/src/libraries/core/command/Shell.cc	2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/core/command/Shell.cc	2011-08-11 22:26:40 UTC (rev 8834)
@@ -38,6 +38,7 @@
 #include "util/Math.h"
 #include "util/StringUtils.h"
 #include "util/SubString.h"
+#include "util/output/OutputManager.h"
 #include "util/output/MemoryWriter.h"
 #include "core/CoreIncludes.h"
 #include "core/ConfigFileManager.h"
@@ -70,12 +71,14 @@
         @param bScrollable If true, the user is allowed to scroll through the output-lines
     */
     Shell::Shell(const std::string& consoleName, bool bScrollable)
-        : BaseWriter(consoleName)
+        : BaseWriter(consoleName, false)
         , inputBuffer_(new InputBuffer())
         , bScrollable_(bScrollable)
     {
         RegisterRootObject(Shell);
 
+        OutputManager::getInstance().registerListener(this);
+
         this->scrollPosition_ = 0;
         this->maxHistoryLength_ = 100;
         this->historyPosition_ = 0;
@@ -103,6 +106,8 @@
     Shell::~Shell()
     {
         this->inputBuffer_->destroy();
+
+        OutputManager::getInstance().unregisterListener(this);
     }
 
     /**

Modified: code/branches/output/src/libraries/util/output/BaseWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.cc	2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/BaseWriter.cc	2011-08-11 22:26:40 UTC (rev 8834)
@@ -32,7 +32,7 @@
 
 namespace orxonox
 {
-    BaseWriter::BaseWriter(const std::string& name)
+    BaseWriter::BaseWriter(const std::string& name, bool bRegister) : OutputListener(bRegister)
     {
         this->name_ = name;
 
@@ -41,6 +41,7 @@
         this->configurableAdditionalContexts_.push_back("example");
 
         this->subcontextsCheckMask_ = context::none;
+        this->subcontextsNoCheckMask_ = context::none;
 
         this->changedConfigurableLevel();
         this->changedConfigurableAdditionalContextsLevel();
@@ -53,7 +54,9 @@
 
     void BaseWriter::output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines)
     {
-        if (((this->subcontextsCheckMask_ & context.mask) == 0) || (this->subcontexts_.find(context.sub_id) != this->subcontexts_.end()))
+        if (((this->subcontextsCheckMask_ & context.mask) == 0) ||
+            (this->subcontextsNoCheckMask_ & context.mask) ||
+            (this->subcontexts_.find(context.sub_id) != this->subcontexts_.end()))
         {
             const std::string& prefix = OutputManager::getInstance().getDefaultPrefix(level, context);
             std::string blanks(prefix.length(), ' ');
@@ -89,9 +92,9 @@
     {
         OutputContextMask context_mask = context::none;
         this->subcontextsCheckMask_ = context::none;
+        this->subcontextsNoCheckMask_ = context::none;
 
         this->subcontexts_.clear();
-        this->subcontexts_.insert(context::no_subcontext);
 
         for (size_t i = 0; i < this->configurableAdditionalContexts_.size(); ++i)
         {
@@ -116,6 +119,10 @@
                 this->subcontexts_.insert(container.sub_id);
                 this->subcontextsCheckMask_ |= container.mask;
             }
+            else
+            {
+                this->subcontextsNoCheckMask_ |= container.mask;
+            }
         }
 
         this->setAdditionalContextsMask(context_mask);

Modified: code/branches/output/src/libraries/util/output/BaseWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.h	2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/BaseWriter.h	2011-08-11 22:26:40 UTC (rev 8834)
@@ -41,7 +41,7 @@
     class _UtilExport BaseWriter : public OutputListener
     {
         public:
-            BaseWriter(const std::string& name);
+            BaseWriter(const std::string& name, bool bRegister = true);
             virtual ~BaseWriter();
 
             void setLevelMax(OutputLevel max);
@@ -84,6 +84,7 @@
             std::string name_;
 
             OutputContextMask subcontextsCheckMask_;
+            OutputContextMask subcontextsNoCheckMask_;
             std::set<OutputContextSubID> subcontexts_;
     };
 }

Modified: code/branches/output/src/libraries/util/output/OutputListener.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.cc	2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/OutputListener.cc	2011-08-11 22:26:40 UTC (rev 8834)
@@ -32,13 +32,14 @@
 
 namespace orxonox
 {
-    OutputListener::OutputListener()
+    OutputListener::OutputListener(bool bRegister)
     {
         this->levelMask_ = level::none;
         this->additionalContextsLevelMask_ = level::none;
         this->additionalContextsMask_ = context::none;
 
-        OutputManager::getInstance().registerListener(this);
+        if (bRegister)
+            OutputManager::getInstance().registerListener(this);
     }
 
     OutputListener::~OutputListener()

Modified: code/branches/output/src/libraries/util/output/OutputListener.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.h	2011-08-11 21:20:39 UTC (rev 8833)
+++ code/branches/output/src/libraries/util/output/OutputListener.h	2011-08-11 22:26:40 UTC (rev 8834)
@@ -40,7 +40,7 @@
     class _UtilExport OutputListener
     {
         public:
-            OutputListener();
+            OutputListener(bool bRegister = true);
             virtual ~OutputListener();
 
             void setLevelMax(OutputLevel max);




More information about the Orxonox-commit mailing list