diff --git a/include/sp/common/Templates.h b/include/sp/common/Templates.h new file mode 100644 index 0000000..da12115 --- /dev/null +++ b/include/sp/common/Templates.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace sp { + +/// @brief Concat multiple tuples in one big tuple +/// @tparam ...input_t Multiple std::tuple types to concat +template +using tuple_cat_t = decltype(std::tuple_cat(std::declval()...)); + +} // namespace sp diff --git a/include/sp/protocol/Field.h b/include/sp/protocol/Field.h index 54ed84a..3a6148b 100644 --- a/include/sp/protocol/Field.h +++ b/include/sp/protocol/Field.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include namespace sp { @@ -63,6 +63,8 @@ class FieldWriter { DataBuffer& m_Buffer; }; +namespace details { + template struct FieldsBuilder {}; @@ -71,15 +73,15 @@ struct FieldsBuilder<> { using Type = std::tuple<>; }; -template +template struct FieldsBuilder> { using Type = typename FieldsBuilder::Type; }; - template struct FieldsBuilder { using Type = sp::tuple_cat_t>, typename FieldsBuilder::Type>; }; +} // namespace details } // namespace sp diff --git a/include/sp/protocol/Message.h b/include/sp/protocol/Message.h index 9b5bdf4..4837aea 100644 --- a/include/sp/protocol/Message.h +++ b/include/sp/protocol/Message.h @@ -5,9 +5,9 @@ namespace sp { template -class Message : public option::MessageInterfaceBuilder::Type { +class Message : public details::MessageInterfaceBuilder::Type { public: - using ParsedOptions = typename option::MessageInterfaceBuilder::ParsedOptions; + using ParsedOptions = typename details::MessageInterfaceBuilder::ParsedOptions; }; } // namespace sp \ No newline at end of file diff --git a/include/sp/protocol/MessageBase.h b/include/sp/protocol/MessageBase.h index f0b7576..641c063 100644 --- a/include/sp/protocol/MessageBase.h +++ b/include/sp/protocol/MessageBase.h @@ -1,7 +1,6 @@ #pragma once #include -#include namespace sp { namespace option { @@ -22,6 +21,9 @@ struct FieldsImpl {}; } // namespace option +namespace details { + + @@ -92,9 +94,9 @@ class MessageImplDispatchBase : public TBase { template class MessageImplFieldsBase : public TBase { public: - using AllFields = typename FieldsBuilder::Type; + using AllFields = typename details::FieldsBuilder::Type; - template + template void Construct(Args... args) { m_Fields = std::make_tuple(args...); } @@ -106,7 +108,7 @@ class MessageImplFieldsBase : public TBase { return m_Fields; } - template + template auto& GetField() { return std::get(GetFields()).GetValue(); } @@ -119,7 +121,7 @@ template class MessageImplFieldsReadBase : public TBase { protected: void ReadImpl(DataBuffer& buffer) override { - //TODO: add endianess + // TODO: add endianess auto& allFields = TBase::GetFields(); std::apply(FieldReader{buffer}, allFields); } @@ -129,7 +131,7 @@ template class MessageImplFieldsWriteBase : public TBase { protected: void WriteImpl(DataBuffer& buffer) override { - //TODO: add endianess + write ID + // TODO: add endianess + write ID auto& allFields = TBase::GetFields(); std::apply(FieldWriter{buffer}, allFields); } @@ -274,11 +276,10 @@ struct MessageImplBuilder { using Type = Base6; }; - +} // namespace details template -class MessageBase : public MessageImplBuilder::Type {}; - +class MessageBase : public details::MessageImplBuilder::Type {}; } // namespace sp \ No newline at end of file diff --git a/include/sp/protocol/MessageInterfaceBuilder.h b/include/sp/protocol/MessageInterfaceBuilder.h index a52fedc..e2b4462 100644 --- a/include/sp/protocol/MessageInterfaceBuilder.h +++ b/include/sp/protocol/MessageInterfaceBuilder.h @@ -3,7 +3,7 @@ #include namespace sp { -namespace option { +namespace details { class EmptyBase {}; @@ -34,5 +34,5 @@ struct MessageInterfaceBuilder { using Type = Base6; }; -} // namespace option +} // namespace details } // namespace sp diff --git a/include/sp/protocol/MessageInterfaces.h b/include/sp/protocol/MessageInterfaces.h index bfaa896..6ba36b1 100644 --- a/include/sp/protocol/MessageInterfaces.h +++ b/include/sp/protocol/MessageInterfaces.h @@ -3,7 +3,7 @@ #include namespace sp { -namespace option { +namespace details { template struct MessageInterfaceParsedOptions {}; @@ -23,34 +23,34 @@ struct MessageInterfaceParsedOptions<> { template -struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { static const bool HasMsgIdType = true; using MsgIdType = T; }; template -struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasLittleEndian = true; }; template -struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasReadOperations = true; }; template -struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasWriteOperations = true; }; template -struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { static const bool HasHandler = true; - using HandlerType = Handler; + using HandlerType = option::Handler; }; template -struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { +struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasValid = true; }; @@ -239,5 +239,5 @@ template struct MessageInterfaceProcessValid { using Type = TBase; }; -} // namespace option +} // namespace details } // namespace sp diff --git a/include/sp/protocol/Templates.h b/include/sp/protocol/Templates.h deleted file mode 100644 index 53743d1..0000000 --- a/include/sp/protocol/Templates.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include - -namespace sp { - -/// @brief Default case, see field_index specialization for implementation details -template typename U, typename = void> -static constexpr size_t field_index = 0; - -/// @brief A templated size_t that counts the number of existing classes U with a "field_name" member -/// @tparam N Current counter for recursion (user should always call it with 0) -/// @tparam T Can be any type, must be different for each field we want to be counted later (used because we can't have a empty -/// template<> specialization nested in a class) -/// @tparam U The templated class that will be searched for match -template typename U> -static constexpr size_t field_index::field_name)>> = 1 + field_index; - -/// @brief Concat multiple tuples in one big tuple -/// @tparam ...input_t Multiple std::tuple types to concat -template -using tuple_cat_t = decltype(std::tuple_cat(std::declval()...)); - -template -constexpr bool tuple_contains_type = false; -template -constexpr bool tuple_contains_type> = std::disjunction_v...>; - -template -constexpr int get_tuple_index = 0; -template -constexpr int get_tuple_index> = 0; -template -constexpr int get_tuple_index> = 1 + get_tuple_index>; - - -} // namespace sp