From e55ff3919242cb83ca5665fa6842426ea931308a Mon Sep 17 00:00:00 2001 From: Claudius Holeksa Date: Sat, 18 Dec 2021 20:54:51 +0100 Subject: [PATCH] fixing typo bugs --- source/kelgin/message.h | 28 ++++++++++++++-------------- source/kelgin/message_container.h | 29 +++++++++++++++++++++-------- source/kelgin/string_literal.h | 9 +++++++++ 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/source/kelgin/message.h b/source/kelgin/message.h index 1a77e54..53c3e3b 100644 --- a/source/kelgin/message.h +++ b/source/kelgin/message.h @@ -65,14 +65,14 @@ public: public: Builder(MessageType &msg) : message{msg} {} - Reader asReader() { return Reader{MessageType & message}; } + Reader asReader() { return Reader{message}; } /* * Initialize a member by index */ template typename Container::ElementType::Builder init() { return typename Container::ElementType::Builder{ - message.container.get()}; + message.container.template get()}; } /* @@ -81,10 +81,10 @@ public: */ template typename Container::ElementType< - MessageParameterKeyIndex::Value>::Builder + MessageParameterKeyPackIndex::Value>::Builder init() { constexpr size_t i = - MessageParameterKeyIndex::Value; + MessageParameterKeyPackIndex::Value; return init(); } @@ -104,7 +104,7 @@ public: */ template typename Container::ElementType::Reader get() { return typename Container::ElementType::Reader{ - message.container.get()}; + message.container.template get()}; } /* @@ -113,11 +113,11 @@ public: */ template typename Container::ElementType< - MessageParameterKeyIndex::Value>::Reader + MessageParameterKeyPackIndex::Value>::Reader get() { // The index of the first match constexpr size_t i = - MessageParameterKeyIndex::Value; + MessageParameterKeyPackIndex::Value; return get(); } @@ -159,7 +159,7 @@ public: template typename Container::ElementType::Builder init() { return typename Container::ElementType::Builder{ - message.container.get()}; + message.container.template get()}; } }; @@ -174,12 +174,12 @@ public: template typename Container::ElementType::Reader get() { return typename Container::ElementType::Reader{ - message.container.get()}; + message.container.template get()}; } template constexpr size_t index() const noexcept { - return MessageParameterPackIndex::Value; + return MessageParameterKeyPackIndex::Value; } }; }; @@ -241,7 +241,7 @@ Container::MessageType::Reader{message.container.get()}; /* * Tuple message class. Wrapper around a tuple schema */ -template +template class Message, Container> final : public MessageBase { private: using SchemaType = schema::Tuple; @@ -267,7 +267,7 @@ public: template typename Container::MessageType::Builder init() { return typename Container::MessageType::Builder{ - message.container.get()}; + message.container.template get()}; } }; class Reader { @@ -281,7 +281,7 @@ public: template typename Container::MessageType::Reader get() { return typename Container::MessageType::Reader{ - message.container.get()}; + message.container.template get()}; } }; }; @@ -369,7 +369,7 @@ public: Builder asBuilder() { return Builder{message}; } std::string_view get() { return message.container.get(); } - } + }; }; template > diff --git a/source/kelgin/message_container.h b/source/kelgin/message_container.h index 6eaf463..2c6c39a 100644 --- a/source/kelgin/message_container.h +++ b/source/kelgin/message_container.h @@ -30,17 +30,30 @@ struct MessageParameterPackIndex { 1u + MessageParameterPackIndex::Value; }; -template struct MessageParameterKeyIndex; - -template -struct MessageParameterKeyIndex { - static constexpr size_t Value = 0u; +/* + * Nightmare inducing compiler problems found here. Somehow non-type + * StringLiterals cannot be resolved as non-type primitive template values can. + * This is the workaround + */ +template +struct MessageParameterKeyPackIndexHelper { + static constexpr size_t Value = + (V == Key0) + ? (0u) + : (1u + MessageParameterKeyPackIndexHelper::Value); }; -template -struct MessageParameterKeyIndex { +template +struct MessageParameterKeyPackIndexHelper { + static constexpr size_t Value = (V == Key0) ? (0u) : (1u); +}; + +template +struct MessageParameterKeyPackIndex { static constexpr size_t Value = - 1u + MessageParameterKeyIndex::Value; + MessageParameterKeyPackIndexHelper::Value; + static_assert(Value < sizeof...(Keys), + "Provided StringLiteral doesn't exist in searched list"); }; template diff --git a/source/kelgin/string_literal.h b/source/kelgin/string_literal.h index 2deaf2c..3382dd0 100644 --- a/source/kelgin/string_literal.h +++ b/source/kelgin/string_literal.h @@ -22,6 +22,15 @@ public: constexpr std::string_view view() const noexcept { return std::string_view{data.data()}; } + + constexpr bool operator==(const StringLiteral &) const + noexcept = default; + + template + constexpr bool operator==(const StringLiteral &) const + noexcept { + return false; + } }; template