Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 24, 2011, 1:22:11 AM (13 years ago)
Author:
landauf
Message:

added function to register new output contexts.
OutputManager owns helper functions to return names of output levels and contexts.
OutputStream now also seems to compile and link with msvc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/output/src/libraries/util/output/OutputManager.cc

    r8765 r8771  
    4747            virtual void output(OutputLevel level, OutputContext context, const std::string& message)
    4848            {
    49                 COUT(0) << (int)level << " / " << context << " : " << message << endl;
     49                COUT(0) << OutputManager::getInstance().getLevelName(level) << " / " << OutputManager::getInstance().getContextName(context) << " : " << message << endl;
    5050            }
    5151    };
     
    119119            this->combinedContextMask_ |= this->listeners_[i]->getContextMask();
    120120    }
     121
     122    OutputContext OutputManager::registerContext(const std::string& name)
     123    {
     124        boost::bimap<OutputContext, std::string>::right_map::iterator it = this->contexts_.right.find(name);
     125        if (it == this->contexts_.right.end())
     126        {
     127            OutputContext context = 0x1 << this->contexts_.size();
     128            this->contexts_.insert(boost::bimap<OutputContext, std::string>::value_type(context, name));
     129            return context;
     130        }
     131        else
     132        {
     133            return it->second;
     134        }
     135    }
     136
     137    OutputContext registerContext(const std::string& name)
     138    {
     139        COUT(0) << "### register context " << name << std::endl;
     140        return OutputManager::getInstance().registerContext(name);
     141    }
     142
     143    const std::string& OutputManager::getLevelName(OutputLevel level) const
     144    {
     145        switch (level)
     146        {
     147            case level::none:               { static std::string name = "None"; return name; }
     148            case level::debug_output:       { static std::string name = "Debug"; return name; }
     149            case level::user_error:         { static std::string name = "Error"; return name; }
     150            case level::user_warning:       { static std::string name = "Warning"; return name; }
     151            case level::user_status:        { static std::string name = "Status"; return name; }
     152            case level::user_info:          { static std::string name = "Info"; return name; }
     153            case level::internal_error:     { static std::string name = "Error (internal)"; return name; }
     154            case level::internal_warning:   { static std::string name = "Warning (internal)"; return name; }
     155            case level::internal_status:    { static std::string name = "Status (internal)"; return name; }
     156            case level::internal_info:      { static std::string name = "Info (internal)"; return name; }
     157            case level::verbose:            { static std::string name = "Verbose"; return name; }
     158            case level::verbose_more:       { static std::string name = "Verbose (more)"; return name; }
     159            case level::verbose_ultra:      { static std::string name = "Verbose (ultra)"; return name; }
     160            default:                        { static std::string name = ""; return name; }
     161        }
     162    }
     163
     164    const std::string& OutputManager::getContextName(OutputContext context) const
     165    {
     166        if (context != context::undefined)
     167        {
     168            boost::bimap<OutputContext, std::string>::left_map::const_iterator it = this->contexts_.left.find(context);
     169            if (it != this->contexts_.left.end())
     170            {
     171                return it->second;
     172            }
     173            else
     174            {
     175                static std::string composed_context;
     176                composed_context = "";
     177                size_t counter = 0;
     178                for (OutputContext context_test = 0x1; context_test != 0x0; context_test = context_test << 1)
     179                {
     180                    if (context & context_test)
     181                    {
     182                        it = this->contexts_.left.find(context_test);
     183                        if (it != this->contexts_.left.end())
     184                        {
     185                            if (counter)
     186                                composed_context += ", ";
     187
     188                            composed_context += it->second;
     189                            ++counter;
     190                        }
     191                    }
     192                }
     193                return composed_context;
     194            }
     195        }
     196        return BLANKSTRING;
     197    }
    121198}
    122199}
Note: See TracChangeset for help on using the changeset viewer.