DBC Framework
DBC parsing and CAN signal decoding framework
Loading...
Searching...
No Matches
dbc_statement_handler.h
1// SPDX-License-Identifier: MIT
2#ifndef DBC_STATEMENT_HANDLER_H
3#define DBC_STATEMENT_HANDLER_H
4
5#include "dbc_database.h"
6#include "typefactory.h"
7#include <string>
8#include <unordered_map>
9
11 std::uint32_t canId;
12 bool isExtended;
13 std::string signalName;
14 ValueDescriptions descriptions;
15 std::size_t lineNumber;
16};
17
20 DbcDatabase &database;
21 FrameInfo *currentFrame = nullptr;
22 std::size_t lineNumber = 0U;
23 std::vector<PendingValueDescriptions> pendingValues = {};
24
25 std::vector<std::vector<std::size_t>> signalLines = {};
26 void ValidateMultiplexing(const std::string &filePath) const;
27
28 void ResolveValueDescriptions(const std::string &filePath);
29};
30
32public:
33 virtual ~DbcStatementHandler() = default;
34 virtual void Handle(const std::string &line, DbcParseContext &context) const = 0;
35};
36
38public:
39 void Handle(const std::string &line, DbcParseContext &context) const override;
40
41private:
42 static FrameInfo ParseFrameLine(const std::string &line);
43};
44
46public:
47 void Handle(const std::string &line, DbcParseContext &context) const override;
48
49private:
50 static SignalInfo ParseSignalLine(const std::string &line);
51};
52
54public:
55 void Handle(const std::string &line, DbcParseContext &context) const override;
56
57private:
58 static void ParseCommentLine(const std::string &line, DbcDatabase &database);
59};
60
62public:
63 void Handle(const std::string &line, DbcParseContext &context) const override;
64};
65
67public:
68 void Handle(const std::string &line, DbcParseContext &context) const override;
69};
70
73public:
75
76 template<class Handler>
77 void RegisterType(const std::string &keyword) {
78 m_factory.registerType<Handler>(keyword);
79 m_handlers.insert_or_assign(keyword, m_factory.create(keyword));
80 }
81
83 bool Dispatch(const std::string &line, DbcParseContext &context) const;
84
85private:
86 using HandlerMap = std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>>;
88 HandlerMap m_handlers;
89};
90
91#endif /* DBC_STATEMENT_HANDLER_H */
bool Dispatch(const std::string &line, DbcParseContext &context) const
Registry-based factory for creating objects by runtime identifier.
Definition typefactory.h:59
BasePtr create(const ClassId &id, Args... args) const
Creates an instance for the given id using provided arguments.
Definition typefactory.h:97
void registerType(const ClassId &id)
Registers a Derived type under the given id.
Definition typefactory.h:76
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
Parsed DBC content stored in a simple internal form.
Describes one CAN frame from a DBC file.
Definition frame_info.h:24
Describes one signal inside a DBC frame.
Definition signal_info.h:24