Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 12, 2013, 11:13:03 PM (11 years ago)
Author:
landauf
Message:

merged testing branch back to trunk. unbelievable it took me 13 months to finish this chore…

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/libraries/util/output/OutputManager.cc

    r8858 r9550  
    3333
    3434#include "OutputManager.h"
     35
     36#include <iostream>
    3537
    3638#include "MemoryWriter.h"
     
    3941#include "util/Output.h"
    4042#include "util/StringUtils.h"
     43#include "util/SharedPtr.h"
    4144
    4245namespace orxonox
     
    5255
    5356        this->subcontextCounter_ = 0;
     57
     58        this->isInitialized_ = false;
     59        this->memoryWriterInstance_ = 0;
     60        this->consoleWriterInstance_ = 0;
     61        this->logWriterInstance_ = 0;
     62
     63        // register 'undefined' context in order to give it always the first context-ID
     64        this->registerContext("undefined");
    5465    }
    5566
     
    5970    OutputManager::~OutputManager()
    6071    {
     72        while (!this->listeners_.empty())
     73            this->unregisterListener(this->listeners_[0]);
     74
     75        if (this->memoryWriterInstance_)
     76            delete this->memoryWriterInstance_;
     77        if (this->consoleWriterInstance_)
     78            delete this->consoleWriterInstance_;
     79        if (this->logWriterInstance_)
     80            delete this->logWriterInstance_;
     81    }
     82
     83    /*static*/ SharedPtr<OutputManager>& OutputManager::Testing::getInstancePointer()
     84    {
     85        static SharedPtr<OutputManager> instance(new OutputManager());
     86        return instance;
    6187    }
    6288
     
    6692    /*static*/ OutputManager& OutputManager::getInstance()
    6793    {
    68         static OutputManager instance;
    69         return instance;
     94        return *OutputManager::Testing::getInstancePointer();
    7095    }
    7196
     
    80105    /*static*/ OutputManager& OutputManager::getInstanceAndCreateListeners()
    81106    {
    82         static OutputManager& instance = OutputManager::getInstance();
    83 
    84         static MemoryWriter& memoryWriterInstance = MemoryWriter::getInstance(); (void)memoryWriterInstance;
    85         static ConsoleWriter& consoleWriterInstance = ConsoleWriter::getInstance(); (void)consoleWriterInstance;
    86         static LogWriter& logWriterInstance = LogWriter::getInstance(); (void)logWriterInstance;
     107        OutputManager& instance = *OutputManager::Testing::getInstancePointer();
     108
     109        if (!instance.isInitialized_) {
     110            instance.isInitialized_ = true;
     111            instance.memoryWriterInstance_ = new MemoryWriter();
     112            instance.consoleWriterInstance_ = new ConsoleWriter(std::cout);
     113            instance.logWriterInstance_ = new LogWriter();
     114        }
    87115
    88116        return instance;
     
    113141    void OutputManager::registerListener(OutputListener* listener)
    114142    {
     143        listener->registerListener(this);
    115144        this->listeners_.push_back(listener);
    116145        this->updateMasks();
     
    122151    void OutputManager::unregisterListener(OutputListener* listener)
    123152    {
     153        listener->unregisterListener(this);
    124154        for (std::vector<OutputListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
    125155        {
     
    267297    {
    268298        // "undefined" context is ignored because it's used implicitly if no explicit context is defined
    269         static OutputContextMask undefined_mask = context::undefined().mask;
     299        OutputContextMask undefined_mask = context::undefined().mask;
    270300
    271301        std::string prefix = this->getLevelName(level) + ": ";
Note: See TracChangeset for help on using the changeset viewer.