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
12 DbcDatabase &database;
13 FrameInfo *currentFrame = nullptr;
14};
15
17public:
18 virtual ~DbcStatementHandler() = default;
19 virtual void Handle(const std::string &line, DbcParseContext &context) const = 0;
20};
21
23public:
24 void Handle(const std::string &line, DbcParseContext &context) const override;
25
26private:
27 static FrameInfo ParseFrameLine(const std::string &line);
28};
29
31public:
32 void Handle(const std::string &line, DbcParseContext &context) const override;
33
34private:
35 static SignalInfo ParseSignalLine(const std::string &line);
36};
37
39public:
40 void Handle(const std::string &line, DbcParseContext &context) const override;
41
42private:
43 static void ParseCommentLine(const std::string &line, DbcDatabase &database);
44};
45
48public:
50
51 template<class Handler>
52 void RegisterType(const std::string &keyword) {
53 m_factory.registerType<Handler>(keyword);
54 m_handlers.insert_or_assign(keyword, m_factory.create(keyword));
55 }
56
58 bool Dispatch(const std::string &line, DbcParseContext &context) const;
59
60private:
62 std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>> m_handlers;
63};
64
65#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:22