2#ifndef DBC_STATEMENT_HANDLER_H
3#define DBC_STATEMENT_HANDLER_H
6#include "dbc_diagnostic.h"
7#include "typefactory.h"
10#include <unordered_map>
15 std::string signalName;
16 ValueDescriptions descriptions;
17 std::size_t lineNumber;
24 std::size_t lineNumber,
const std::string &message)
25 : std::runtime_error(filePath +
":" + std::to_string(lineNumber) +
": " + message),
26 diagnostic{DbcDiagnosticSeverity::Error, code, filePath, lineNumber, message} {}
35 std::size_t lineNumber = 0U;
36 std::vector<PendingValueDescriptions> pendingValues = {};
38 std::vector<std::vector<std::size_t>> signalLines = {};
39 void ValidateMultiplexing(
const std::string &filePath)
const;
41 void ResolveValueDescriptions(
const std::string &filePath);
47 virtual void Handle(
const std::string &line,
DbcParseContext &context)
const = 0;
52 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
55 static FrameInfo ParseFrameLine(
const std::string &line);
60 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
63 static SignalInfo ParseSignalLine(
const std::string &line);
68 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
71 static void ParseCommentLine(
const std::string &line,
DbcDatabase &database);
76 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
81 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
87 void Handle(
const std::string &line,
DbcParseContext &context)
const override;
95 template<
class Handler>
96 void RegisterType(
const std::string &keyword) {
98 m_handlers.insert_or_assign(keyword, m_factory.
create(keyword));
105 using HandlerMap = std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>>;
107 HandlerMap m_handlers;
bool Dispatch(const std::string &line, DbcParseContext &context) const
Registry-based factory for creating objects by runtime identifier.
BasePtr create(const ClassId &id, Args... args) const
Creates an instance for the given id using provided arguments.
void registerType(const ClassId &id)
Registers a Derived type under the given id.
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.
Describes one signal inside a DBC frame.