diff options
-rw-r--r-- | icetray/icetray/Jamfile.jam | 1 | ||||
-rw-r--r-- | icetray/icetray/abstractDatabaseClient.cpp | 2 | ||||
-rw-r--r-- | icetray/icetray/logWriter.ice | 3 | ||||
-rw-r--r-- | icetray/icetray/logWriterConsole.cpp | 4 | ||||
-rw-r--r-- | icetray/icetray/logWriterConsole.h | 4 | ||||
-rw-r--r-- | icetray/icetray/string_view_support.h | 45 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayLogger.cpp | 4 |
7 files changed, 56 insertions, 7 deletions
diff --git a/icetray/icetray/Jamfile.jam b/icetray/icetray/Jamfile.jam index a54d613..3796fa8 100644 --- a/icetray/icetray/Jamfile.jam +++ b/icetray/icetray/Jamfile.jam @@ -15,6 +15,7 @@ lib icetray : <library>../..//glibmm <library>boost_program_options <slicer>yes + <include>. : : <include>. <library>..//dbppcore diff --git a/icetray/icetray/abstractDatabaseClient.cpp b/icetray/icetray/abstractDatabaseClient.cpp index bdef7ac..4c9ea32 100644 --- a/icetray/icetray/abstractDatabaseClient.cpp +++ b/icetray/icetray/abstractDatabaseClient.cpp @@ -16,6 +16,8 @@ namespace IceTray { { \ cmd->bindFunc(o, p); \ } + PARAMBINDER(Glib::ustring, bindParamS); + PARAMBINDER(std::string_view, bindParamS); PARAMBINDER(std::string, bindParamS); PARAMBINDER(Ice::Byte, bindParamI); PARAMBINDER(Ice::Short, bindParamI); diff --git a/icetray/icetray/logWriter.ice b/icetray/icetray/logWriter.ice index 0b2c062..9b766b0 100644 --- a/icetray/icetray/logWriter.ice +++ b/icetray/icetray/logWriter.ice @@ -2,6 +2,7 @@ #define ICETRAY_LOGWRITER [["ice-prefix"]] +[["cpp:include:string_view_support.h"]] module IceTray { module Logging { enum LogLevel { @@ -21,7 +22,7 @@ module IceTray { interface LogWriter { optional(0) LogLevel lowestLevel(); optional(0) LogLevel level(Domain domain); - void message(LogLevel level, Domain domain, string message); + void message(LogLevel level, Domain domain, ["cpp:view-type:std::string_view"] string message); }; }; }; diff --git a/icetray/icetray/logWriterConsole.cpp b/icetray/icetray/logWriterConsole.cpp index feb8789..23c1279 100644 --- a/icetray/icetray/logWriterConsole.cpp +++ b/icetray/icetray/logWriterConsole.cpp @@ -65,7 +65,7 @@ namespace IceTray { } void - ConsoleLogWriter::message(LogLevel priority, Domain domain, std::string message, const Ice::Current &) + ConsoleLogWriter::message(LogLevel priority, Domain domain, const std::string_view message, const Ice::Current &) { writeStream(priority < LogLevel::WARNING ? std::cerr : std::cout, width, priority, domain, message); @@ -73,7 +73,7 @@ namespace IceTray { } std::ostream & - ConsoleLogWriter::writeStream(std::ostream & s, int width, LogLevel priority, const Domain & domain, const std::string & message) + ConsoleLogWriter::writeStream(std::ostream & s, int width, LogLevel priority, const Domain & domain, const std::string_view & message) { return LogMsg::write(s, Slicer::ModelPartForEnum<LogLevel>::lookup(priority), width, domain, message); diff --git a/icetray/icetray/logWriterConsole.h b/icetray/icetray/logWriterConsole.h index a841f6b..0136235 100644 --- a/icetray/icetray/logWriterConsole.h +++ b/icetray/icetray/logWriterConsole.h @@ -9,9 +9,9 @@ namespace IceTray { public: ConsoleLogWriter(const Ice::PropertiesPtr & p); - void message(LogLevel priority, Domain domain, std::string message, const Ice::Current &) override; + void message(LogLevel priority, Domain domain, std::string_view message, const Ice::Current &) override; - static DLL_PUBLIC std::ostream & writeStream(std::ostream &, int width, LogLevel priority, const Domain & domain, const std::string & message); + static DLL_PUBLIC std::ostream & writeStream(std::ostream &, int width, LogLevel priority, const Domain & domain, const std::string_view & message); const int width; }; diff --git a/icetray/icetray/string_view_support.h b/icetray/icetray/string_view_support.h new file mode 100644 index 0000000..ef9fb94 --- /dev/null +++ b/icetray/icetray/string_view_support.h @@ -0,0 +1,45 @@ +#ifndef ICETRAY_STRING_VIEW_SUPPORT_H +#define ICETRAY_STRING_VIEW_SUPPORT_H + +#include <string_view> +#include <Ice/OutputStream.h> +#include <Ice/StreamHelpers.h> + +namespace Ice +{ + template<> + struct StreamableTraits<std::string_view> + { + static const StreamHelperCategory helper = StreamHelperCategoryBuiltin; + static const int minWireSize = 1; + static const bool fixedLength = false; + }; + + template<> + struct StreamHelper<std::string_view, StreamHelperCategoryBuiltin> { + template<class S> static inline void + write(S * stream, const std::string_view& v) + { + stream->write(v.data(), v.size()); + } + + template<class S> static inline void + read(S * stream, std::string_view& v) + { + const char* vdata = 0; + size_t vsize = 0; + + stream->read(vdata, vsize); + + if (vsize > 0) { + v = std::string_view(vdata, vsize); + } + else { + v = {}; + } + } + }; +} + +#endif + diff --git a/icetray/unittests/testIceTrayLogger.cpp b/icetray/unittests/testIceTrayLogger.cpp index 393a6f2..b8c9d5c 100644 --- a/icetray/unittests/testIceTrayLogger.cpp +++ b/icetray/unittests/testIceTrayLogger.cpp @@ -34,9 +34,9 @@ class TestLogWriter : public AbstractLogWriter { { } - void message(LogLevel priority, Domain domain, std::string message, const Ice::Current &) override + void message(LogLevel priority, Domain domain, const std::string_view message, const Ice::Current &) override { - msgs.push_back({priority, domain, message}); + msgs.push_back({priority, domain, std::string(message)}); } std::vector<LogEntry> msgs; |