From bb95900827001984226f71d416b0043a9fa379cd Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 8 Feb 2019 00:07:56 +0000 Subject: Switch to string_view Includes helper to support std::string_view in ICE interfaces. --- icetray/icetray/Jamfile.jam | 1 + icetray/icetray/abstractDatabaseClient.cpp | 2 ++ icetray/icetray/logWriter.ice | 3 +- icetray/icetray/logWriterConsole.cpp | 4 +-- icetray/icetray/logWriterConsole.h | 4 +-- icetray/icetray/string_view_support.h | 45 ++++++++++++++++++++++++++++++ icetray/unittests/testIceTrayLogger.cpp | 4 +-- 7 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 icetray/icetray/string_view_support.h 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 : ../..//glibmm boost_program_options yes + . : : . ..//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::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 +#include +#include + +namespace Ice +{ + template<> + struct StreamableTraits + { + static const StreamHelperCategory helper = StreamHelperCategoryBuiltin; + static const int minWireSize = 1; + static const bool fixedLength = false; + }; + + template<> + struct StreamHelper { + template static inline void + write(S * stream, const std::string_view& v) + { + stream->write(v.data(), v.size()); + } + + template 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 msgs; -- cgit v1.2.3