Mercurial > hg > orthanc
changeset 3489:e7723a39adf8
Fixed alignment issue in Toolbox::DetectEndianness() + made the internal logger
use an std::stringstream so that manipulators like "std::hex" are supported
(when using ORTHANC_ENABLE_LOGGING_PLUGIN or ORTHANC_ENABLE_LOGGING_STDIO)
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Sat, 10 Aug 2019 13:40:08 +0200 |
parents | ce29644acd19 |
children | 786fce009be8 |
files | Core/Logging.cpp Core/Logging.h Core/Toolbox.cpp |
diffstat | 3 files changed, 20 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/Core/Logging.cpp Mon Aug 05 13:57:54 2019 +0200 +++ b/Core/Logging.cpp Sat Aug 10 13:40:08 2019 +0200 @@ -92,6 +92,7 @@ *********************************************************/ #include <boost/lexical_cast.hpp> +#include <sstream> namespace Orthanc { @@ -113,20 +114,21 @@ InternalLogger::~InternalLogger() { + std::string message = messageStream_.str(); if (context_ != NULL) { switch (level_) { case InternalLevel_ERROR: - OrthancPluginLogError(context_, message_.c_str()); + OrthancPluginLogError(context_, message.c_str()); break; case InternalLevel_WARNING: - OrthancPluginLogWarning(context_, message_.c_str()); + OrthancPluginLogWarning(context_, message.c_str()); break; case InternalLevel_INFO: - OrthancPluginLogInfo(context_, message_.c_str()); + OrthancPluginLogInfo(context_, message.c_str()); break; case InternalLevel_TRACE: @@ -136,7 +138,7 @@ default: { std::string s = ("Unknown log level (" + boost::lexical_cast<std::string>(level_) + - ") for message: " + message_); + ") for message: " + message); OrthancPluginLogError(context_, s.c_str()); break; } @@ -239,20 +241,22 @@ InternalLogger::~InternalLogger() { + std::string message = messageStream_.str(); + switch (level_) { case InternalLevel_ERROR: - globalErrorLogFunc(message_.c_str()); + globalErrorLogFunc(message.c_str()); break; case InternalLevel_WARNING: - globalWarningLogFunc(message_.c_str()); + globalWarningLogFunc(message.c_str()); break; case InternalLevel_INFO: if (globalVerbose_) { - globalInfoLogFunc(message_.c_str()); + globalInfoLogFunc(message.c_str()); // TODO: stone_console_info(message_.c_str()); } break; @@ -260,14 +264,14 @@ case InternalLevel_TRACE: if (globalTrace_) { - globalTraceLogFunc(message_.c_str()); + globalTraceLogFunc(message.c_str()); } break; default: { std::stringstream ss; - ss << "Unknown log level (" << level_ << ") for message: " << message_; + ss << "Unknown log level (" << level_ << ") for message: " << message; auto s = ss.str(); globalErrorLogFunc(s.c_str()); }
--- a/Core/Logging.h Mon Aug 05 13:57:54 2019 +0200 +++ b/Core/Logging.h Sat Aug 10 13:40:08 2019 +0200 @@ -143,8 +143,8 @@ class InternalLogger : public boost::noncopyable { private: - InternalLevel level_; - std::string message_; + InternalLevel level_; + std::stringstream messageStream_; public: InternalLogger(InternalLevel level, @@ -156,7 +156,7 @@ template <typename T> InternalLogger& operator<< (const T& message) { - message_ += boost::lexical_cast<std::string>(message); + messageStream_ << message; return *this; } };
--- a/Core/Toolbox.cpp Mon Aug 05 13:57:54 2019 +0200 +++ b/Core/Toolbox.cpp Sat Aug 10 13:40:08 2019 +0200 @@ -923,14 +923,16 @@ { // http://sourceforge.net/p/predef/wiki/Endianness/ - uint8_t buffer[4]; + uint32_t bufferView; + + uint8_t* buffer = reinterpret_cast<uint8_t*>(&bufferView); buffer[0] = 0x00; buffer[1] = 0x01; buffer[2] = 0x02; buffer[3] = 0x03; - switch (*((uint32_t *)buffer)) + switch (bufferView) { case 0x00010203: return Endianness_Big; @@ -943,7 +945,6 @@ } } - std::string Toolbox::WildcardToRegularExpression(const std::string& source) { // TODO - Speed up this with a regular expression