cc_tools_qt
Common Environment for Protocol Analysis.
Loading...
Searching...
No Matches
ToolsMsgFactoryBase.h
1//
2// Copyright 2024 - 2025 (C). Alex Robenko. All rights reserved.
3//
4
5// This file is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18
19#pragma once
20
21#include "cc_tools_qt/ToolsMsgFactory.h"
22
23#include "comms/util/Tuple.h"
24
25#include <tuple>
26
27namespace cc_tools_qt
28{
29
30namespace details
31{
32
33class TupleMsgFactoryHelper
34{
35public:
36 using MessagesListInternal = std::vector<ToolsMessagePtr>;
37 TupleMsgFactoryHelper(MessagesListInternal& msgs) : m_msgs(msgs) {}
38
39 template <typename TMsg>
40 void operator()()
41 {
42 m_msgs.push_back(cc_tools_qt::ToolsMessagePtr(new TMsg));
43 }
44
45 MessagesListInternal& msgs()
46 {
47 return m_msgs;
48 }
49
50private:
51 MessagesListInternal& m_msgs;
52};
53
54} // namespace details
55
56template <typename TAllMessages>
57class ToolsMsgFactoryBase : public ToolsMsgFactory
58{
59public:
60 using AllMessages = TAllMessages;
61
62protected:
63 virtual MessagesListInternal createAllMessagesImpl() override
64 {
65 MessagesListInternal result;
66 static_assert(comms::util::IsTuple<TAllMessages>::Value, "TAllMessages must be std::tuple");
67 result.reserve(std::tuple_size<TAllMessages>::value);
68 comms::util::tupleForEachType<TAllMessages>(details::TupleMsgFactoryHelper(result));
69 return result;
70 }
71};
72
73} // namespace cc_tools_qt
74
75
Main namespace for all classes / functions of the shared library.
std::shared_ptr< ToolsMessage > ToolsMessagePtr
Smart pointer to ToolsMessage.
Definition ToolsMessage.h:163