[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