Compare commits

...
32 Commits
Author SHA1 Message Date
deeaitch a202ba12ba update gitignore 2026-10-14 11:12:36 -04:00
deeaitch 4ae4e527b8 Closes #19 2026-10-14 10:41:17 -04:00
deeaitch d87c100398 #18 2026-10-14 10:32:44 -04:00
deeaitch 0b05152bcf Closes #17 2026-10-14 09:38:14 -04:00
deeaitch 6d6ace4315 Closes #16 2026-10-14 09:04:11 -04:00
deeaitch c3d3bd51fb Closes #16 2026-10-13 08:17:49 -04:00
deeaitch 7022c84941 Closes #15 2026-10-13 08:05:40 -04:00
deeaitch 0708316a37 Closes #14 2026-10-11 06:30:18 -04:00
deeaitch 51fcdb88ac Closes #13 2026-10-11 06:19:42 -04:00
deeaitch bce707daf6 Update documentation 2026-10-07 20:24:35 -04:00
deeaitch a6016248f8 Tests 2026-10-07 20:18:37 -04:00
deeaitch ef8e21db2e update documentation 2026-10-07 20:17:59 -04:00
deeaitch 21d6f12163 update documentation 2026-10-07 20:14:24 -04:00
deeaitch 1d56a37090 Additional tests 2026-10-07 19:52:28 -04:00
deeaitch 344beaf58c Adding some more tests 2026-10-07 19:43:17 -04:00
deeaitch 8bf5dcff30 Closes #12 2026-10-07 18:59:18 -04:00
deeaitch 3dd9230fca Closes #28 2026-10-07 18:50:11 -04:00
deeaitch a0938cb29c Closes #10 2026-10-07 18:32:51 -04:00
deeaitch a533d9aa00 Closes #9 2026-10-06 17:14:50 -04:00
deeaitch e5d818d9b2 Closes 2026-10-06 17:04:13 -04:00
deeaitch 65142fdfe3 Closes #27 2026-10-06 16:54:02 -04:00
deeaitch f17ddb6aad Closes #11 2026-10-05 21:41:19 -04:00
deeaitch 0067cb4ddd update doxygen with last cahnges 2026-10-05 19:08:54 -04:00
deeaitch 03dc8f2a13 avoid lambda to simplify source code 2026-10-05 18:59:04 -04:00
deeaitch 6cd99768ae update doxygen with last cahnges 2026-10-05 18:50:00 -04:00
deeaitch 1163277b17 clean up 2026-10-05 18:49:25 -04:00
deeaitch b91cf4aae5 Closes #7 2026-10-05 18:37:20 -04:00
deeaitch 8d82b13dad Closes #6 2026-10-05 18:33:19 -04:00
deeaitch 88b5883dda closes #4 Refactor DBC parsing into TypeFactory statement handlers 2026-10-01 14:01:31 -04:00
deeaitch 3bd9339baf Closes #3 Validate DBC frame definitions and report error locations 2026-10-01 13:23:01 -04:00
deeaitch 69074e3321 Fix #2 Preserve unsigned 64-bit decoded values 2026-10-01 13:09:57 -04:00
deeaitch 2c057b631d Ref #1 Fix motorola data format 2026-10-01 12:57:12 -04:00
469 changed files with 32570 additions and 5641 deletions

No files matched your search

+65
View File
@@ -0,0 +1,65 @@
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: None
AlignOperands: Align
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Always
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterReturnType: None
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: true
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeColon
BreakInheritanceList: BeforeColon
ColumnLimit: 0
CompactNamespaces: false
ContinuationIndentWidth: 8
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
KeepEmptyLinesAtTheStartOfBlocks: true
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PointerAlignment: Right
ReflowComments: false
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 0
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
TabWidth: 4
UseTab: Never
+3
View File
@@ -1 +1,4 @@
*.user
.project_rules
AGENTS.md
build
+939 -127
View File
File diff suppressed because it is too large. Load diff
+288
View File
@@ -0,0 +1,288 @@
# Changelog
This changelog summarizes release and development history. Entries are listed
newest first. Historical dates follow the commit author dates. `v1.0` is the
existing Git tag; subsequent changes are listed as unreleased.
## Unreleased
### 2026-10-14
#### Fixed
- Issue #19: parse signal factor, offset, minimum, and maximum independently of
C/C++ application locales with `std::from_chars`, retaining signed decimals,
scientific notation, complete-token validation, and range/finite checks.
- Added custom C++ and named C comma-decimal locale regressions for valid physical
values and invalid syntax, grouping, overflow/underflow, and reversed ranges.
Documented portable test coverage and Linux locale generation. Verified with
`qmake6`, `make -j4`, and `LOCPATH=/tmp/dbc-issue19-locales make check`: all six
suites passed without skips. The named C locale regression fails with the old
`std::stod` converter.
- Issue #18: frame/signal comments share frame-definition CAN ID validation and
resolve after definitions are read. Support tabs, escaped quotes/backslashes,
and multiline text while preserving whitespace and starting source locations.
- Report malformed comments and missing references as `InvalidStatement` errors;
keep statement-order overwrites, including empty comments. Added regression
coverage and updated parser/test documentation. Verified with `qmake6`,
`make -j4`, and `make check`: all six regression suites passed.
#### Changed
- Validate duplicate frame keys before building the runtime lookup index, alongside
CAN IDs, signal layouts, numeric parameters, and multiplexing metadata.
#### Added
- Root `AGENTS.md` with project coding rules, build/test commands, and
documentation requirements, based on the existing `.project_rules`.
- End-to-end DBC fixture tests for parsed metadata, runtime frame/signal lookup,
raw and physical decoding, value descriptions, and tree nodes. Both builders
preserve supported metadata across same-numeric standard/extended IDs, comments,
empty databases, and database replacement.
- Exhaustive layout checks for both byte orders at representative payload sizes
(0, 1, 8, 64, and 255 bytes), including invalid lengths and uint32 overflow inputs.
- Regression coverage for builder input mutation/destruction and failed replacement
with duplicate frame or signal keys, preserving existing lookups.
### 2026-10-13
#### Added
- Issue #16: construction-time validation for both manual runtime definitions and
`DbcDecodeBuilder` input: normalized CAN IDs, duplicate keys, signal lengths and
positions, enums, finite numeric parameters, ordered ranges, selectors, branch
ranges, and overlaps.
- Regression tests for both construction paths, numeric and bit boundaries,
mixed byte orders, exclusive overlaps, mutable input aliases, and failed reloads.
- `FrameDecodeStatus` distinguishes unknown frames, insufficient payloads,
signal errors, and successful decoding; frame `valid` still means matched.
- `SignalDecodeStatus::PhysicalConversionFailed` reports NaN/Inf results,
retaining exact raw values and the non-finite physical result.
- Regression tests for payload-length policy, partial results, invalid runtime
metadata, physical overflow/non-finite parameters, and raw branch selection
when selector physical conversion fails.
#### Changed
- Runtime construction rejects invalid definitions with `std::invalid_argument`
before publishing a snapshot. Decoder tests now expect construction failures
for malformed definitions; finite arithmetic overflow remains a decode status.
- Shared overflow-safe layout validation across parsing, construction, and
decoding. Intel extraction also widens bit coordinates before arithmetic.
- `DecodeDatabase` now accepts definitions by const reference and copies them,
even for rvalues, preventing retained
mutable aliases from modifying the frozen snapshot or invalidating its index.
- Short payloads decode available signals without padding; longer payloads
ignore bytes beyond the declared DLC. Short frame status takes precedence
over signal errors, with per-signal causes retained in definition order.
- Runtime signal validation checks enum values and bit layouts against declared
DLC using overflow-safe coordinates. Extra bytes cannot rescue invalid layouts.
- Documented frame/signal status meanings, value availability, and payload policy.
### 2026-10-11
#### Added
- Stable application identifiers: `FrameKey` (normalized CAN ID and frame type)
and `SignalKey` (frame key and signal name), with equality and hashers.
- Runtime `FindSignal`, frame `GetKey`, and keys on decoded frame/signal results.
- Reload/lifetime tests for retained frames and independent signals, lookup
handles, copies/moves, snapshot release, stable keys, removed/renamed definitions,
failed/empty reloads, duplicate keys, and insufficient payloads.
- `ParseFileWithDiagnostics` and `DbcParseResult` with severity, stable error
code, supplied file path, physical line number, and message for each diagnostic.
- Warnings for unregistered statements, including floating-point signal types,
attributes, signal type references, environment variables, and vendor extensions.
- Quiet common DBC header handlers registered through TypeFactory; `NS_` symbol
declarations do not produce unsupported-statement warnings.
- Regression tests for warning locations, header handling, immediate/deferred
errors, file errors, empty results on failure, and legacy exception compatibility.
#### Changed
- **API change:** `DecodeDatabase` is an immutable shared snapshot. Use
`GetFrames()` for reads or construct a new snapshot from a vector; its frame
index is private and built automatically, with duplicate-key validation.
- **API change:** decoded `definition` fields and `DbcDecoder::FindFrame` return
`shared_ptr<const ...>` ownership. Stored results retain old definitions across
reload/clear/destruction, including separately copied signals and `VAL_` strings.
Decoding shares metadata without per-result definition copies.
- Documented borrowed views, owning handles, snapshot retention, identifier scope,
reload behavior, application migration, and synchronization requirements.
- Kept `ParseFile` compatible while sharing parsing with the diagnostic API.
Parsing stops at the first error and never returns a partial database.
- Deferred value-description and multiplexing errors carry structured source
locations without extracting them from exception messages.
- Documented supported syntax, warning behavior, diagnostic codes, and limitations.
- Audited diagnostic coverage and added unsupported-statement variants, namespace
termination, formatting/path handling, first-error stopping, deferred diagnostic
order, duplicate/overlap errors, and supported decoding preservation tests.
Linux file-read errors and legacy file-error messages are checked explicitly.
### 2026-10-07
#### Added
- Added regression coverage for signed bit-length boundaries, deterministic
Intel/Motorola extraction, lookup failures, runtime validation, PGN, comments,
file formatting, metadata copying/lifetime, and TypeFactory behavior.
- Added direct-handler and resolver tests for unsupported comments and ambiguous
`VAL_` references in manually constructed databases.
- Documented GCC/gcov/LCOV instrumentation, Qt Creator setup, and HTML reports.
Coverage after the added tests: 98.4% of lines and 71.4% of branches with
GCC 14.2 and Qt 6.8.2, including the standalone tree test.
- Added a reusable post-build coverage report script and step-by-step Qt Creator
configurations for model tests, strict warning checks, coverage, core-only,
standalone tree tests, and the demo. Machine-specific `.user` settings stay
outside version control.
- Basic `M` / `mN` multiplexing metadata in parsed, tree, and runtime definitions.
- Deferred selector and overlap validation with source locations: one unsigned
selector, representable branch values, and overlaps only between exclusive branches.
- Selector-first decoding using exact raw values, preserving definition order and
unconditional signals. Explicit statuses distinguish inactive branches, missing
selector data, insufficient payloads, and malformed runtime metadata.
- Registered `SG_MUL_VAL_` rejection through TypeFactory; extended and nested
multiplexing remain unsupported. Added parser/decoder regression coverage and
documented supported syntax and consumer behavior.
#### Changed
- Qt-dependent targets now require the installed Qt 6.8.2 through a shared qmake
version check; removed Qt 5 compatibility instructions. Core remains Qt-free.
- Used explicit local types in the additional coverage and model tests. Functions
retain explicit return types, and runtime handler selection uses TypeFactory
without lambdas or extra factory layers for concrete objects.
- Coverage documentation now describes the selected open GCC/LCOV toolchain.
- Overlapping unconditional signals are now rejected during parsing.
#### Fixed
- Linked QtGui only in the optional model tests and used QGuiApplication with an
offscreen default, resolving the QAbstractItemModelTester invalid QPixmap
metatype warning without adding QtGui to the adapter library.
- Accepted tabs after `CM_` by using the comment parser's keyword extraction
instead of requiring a literal-space prefix.
- Removed test compiler warnings by using `QVERIFY_THROWS_EXCEPTION` and
explicitly discarding `nodiscard` return values in exception checks.
- Reject duplicate frames by normalized CAN ID and frame type, including
equivalent extended ID encodings, and duplicate signal names within a frame.
Errors report the file path and line of the repeated definition. Standard and
extended frames may share a numeric ID; separate frames may reuse signal names.
Added regression coverage and updated parser documentation.
### 2026-10-06
#### Added
- Added non-owning TreeNode parent navigation and stable sibling positions;
disabled node moves to preserve links while retaining unique_ptr ownership.
- Added optional read-only Qt Core DbcTreeModel with documented columns and
metadata roles, exact VAL_ entries, exclusive tree ownership, and reset-based
reload/clear support. Core remains independent of Qt.
- Added QAbstractItemModelTester coverage, navigation/metadata/reset tests,
a standalone Qt-free tree test, and adapter build and usage documentation.
- Added `VAL_` signal value descriptions through the statement dispatcher and
factory, with complete syntax validation, exact signed/unsigned 64-bit keys,
deferred reference resolution, duplicate detection, and source error locations.
Distinct keys from multiple statements merge; standard and extended frames
remain distinct under existing CAN ID normalization.
- Preserved descriptions in parsed metadata, runtime decode definitions, and UI
tree metadata. Added `DecodedSignalValue::GetValueDescription()` and
`FindValueDescription()` for raw integer lookup before physical scaling.
Unknown values retain normal numeric decoding.
- Added regression coverage for syntax, quoting, whitespace, integer boundaries,
declaration order, invalid references, duplicates, scaling, and both builders;
documented syntax, lookup behavior, and limitations in README.
### 2026-10-05
#### Changed
- Split the qmake project into a reusable static library in `core/`, a demo in
`examples/`, and a combined regression test executable in `tests/`. Added
shared `.pri` files and updated build instructions. (`f17ddb6`, #11)
- Added `.clang-format` and applied consistent formatting to the source code
and tests. (`b91cf4a`, #7)
- Replaced lambdas with explicit functions and simpler code in statement
handlers, the decoder, the demo, and regression tests. (`03dc8f2`)
#### Fixed
- Added complete validation of `SG_` signal statements, including syntax,
receivers, numeric fields, lengths of 1–64 bits, physical ranges, and signal
bounds within the declared frame payload for Intel and Motorola bit order.
Invalid definitions report the file path and line number. Multiplexing
markers are explicitly rejected. Added regression tests and documentation.
(`8d82b13`, #6)
#### Documentation and maintenance
- Regenerated Doxygen documentation after code changes and the project
restructuring. (`6cd9976`, `0067cb4`, `f17ddb6`)
- Removed the temporary signal-validation issue document. (`1163277`)
### 2026-10-01
#### Changed
- Moved DBC statement parsing into `TypeFactory`-registered handlers for
`BO_`, `SG_`, and `CM_`, with a shared parse context and keyword dispatcher.
Added tests for dispatch and handler replacement, and documented how to
register additional handlers. (`88b5883`, #4)
- **API change:** `DecodedSignalValue::rawValue` now uses
`std::variant<std::int64_t, std::uint64_t>` instead of `int64_t`. Consumers
must handle the appropriate variant alternative. Physical values remain
`double` and may lose precision for large integers. (`69074e3`, #2)
#### Fixed
- Corrected Motorola signal extraction within bytes and across byte
boundaries using DBC sawtooth bit numbering. Added decoder regression
tests and build instructions; introduced the `TypeFactory` utility.
(`2c057b6`)
- Preserved the full unsigned 64-bit raw-value range, including values above
`INT64_MAX`, and updated physical conversion and demo output. Added tests
for signed and unsigned boundaries and numeric output. (`69074e3`, #2)
- Validated `BO_` frame syntax, CAN identifiers, payload lengths, numeric
overflow, and unexpected trailing fields. Parsing errors now include the
file path and physical line number. Added parser regression tests.
(`3bd9339`, #3)
## v1.0 — 2026-06-14
Tag `v1.0` points to `38ce043` and includes the initial implementation below.
### Documentation
- Added source-file headers with author information and MIT license
references. (`e2ffa97`)
- Added and subsequently simplified the Doxygen configuration.
(`e2c07dd`, `4c8af9f`)
- Generated API documentation and refreshed the generated documentation.
(`dfec39d`, `38ce043`)
### Initial implementation — 2026-03-13
#### Added
- Initialized the repository with a README and MIT license. (`4270459`)
- Added the DBC parser, frame and signal metadata, a tree representation and
builder, a demonstration program, and a qmake project. (`2a90b2d`)
- Added runtime decoding through `DbcDecodeBuilder`, `DecodeDatabase`, and
`DbcDecoder`, including CAN-frame lookup, Intel and Motorola extraction,
signed and unsigned signals, and factor/offset conversion. Updated parser
metadata and the demo to support decoding. (`a53a5df`)
#### Documentation and maintenance
- Added `.gitignore` and expanded the README with architecture, data
structures, parsing behavior, decoding examples, and usage documentation.
(`efc57d6`, `f2aa10c`, `cb20f5f`, `f0e7065`)
+8
View File
@@ -0,0 +1,8 @@
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
# Consumers can override this when building separately from the root project.
isEmpty(DBC_CORE_BUILD_DIR): DBC_CORE_BUILD_DIR = $$clean_path($$OUT_PWD/../core)
LIBS += -L$$DBC_CORE_BUILD_DIR -ldbc_core
win32-msvc*: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/dbc_core.lib
else: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/libdbc_core.a
PRE_TARGETDEPS += $$DBC_CORE_LIBRARY
+6
View File
@@ -0,0 +1,6 @@
TEMPLATE = lib
TARGET = dbc_core
CONFIG += staticlib c++17
CONFIG -= qt
include(core_files.pri)
CONFIG -= debug_and_release debug_and_release_target
+27
View File
@@ -0,0 +1,27 @@
SOURCES += \
$$PWD/decode_database.cpp \
$$PWD/dbc_decode_builder.cpp \
$$PWD/dbc_decoder.cpp \
$$PWD/dbc_parser.cpp \
$$PWD/dbc_statement_handler.cpp \
$$PWD/dbc_tree_builder.cpp \
$$PWD/tree_node.cpp
HEADERS += \
$$PWD/signal_layout.h \
$$PWD/definition_key.h \
$$PWD/dbc_diagnostic.h \
$$PWD/multiplexing.h \
$$PWD/dbc_database.h \
$$PWD/dbc_decode_builder.h \
$$PWD/dbc_decoder.h \
$$PWD/dbc_parser.h \
$$PWD/dbc_statement_handler.h \
$$PWD/dbc_tree_builder.h \
$$PWD/decode_database.h \
$$PWD/frame_info.h \
$$PWD/signal_info.h \
$$PWD/value_descriptions.h \
$$PWD/tree_node.h \
$$PWD/text_utils.h \
$$PWD/typefactory.h
+1 -1
View File
@@ -20,7 +20,7 @@
* @brief Parsed DBC content stored in a simple internal form.
*/
struct DbcDatabase {
std::vector<FrameInfo> frames; /**< All frames found in the DBC file. */
std::vector<FrameInfo> frames; /**< All frames found in the DBC file. */
};
#endif /* DBC_DATABASE_H */
+57
View File
@@ -0,0 +1,57 @@
/**
* @file dbc_decode_builder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_decode_builder.h"
#include <utility>
DecodeDatabase DbcDecodeBuilder::Build(const DbcDatabase &source) const {
std::vector<DecodeFrame> frames;
frames.reserve(source.frames.size());
for (const FrameInfo &sourceFrame: source.frames) {
DecodeFrame targetFrame;
targetFrame.name = sourceFrame.name;
targetFrame.canId = sourceFrame.canId;
targetFrame.isExtended = sourceFrame.isExtended;
targetFrame.dlc = sourceFrame.dlc;
targetFrame.pgn = sourceFrame.pgn;
targetFrame.hasPgn = sourceFrame.hasPgn;
targetFrame.transmitter = sourceFrame.transmitter;
targetFrame.comment = sourceFrame.comment;
targetFrame.signals.reserve(sourceFrame.signals.size());
for (const SignalInfo &sourceSignal: sourceFrame.signals) {
DecodeSignal targetSignal;
targetSignal.multiplexing = sourceSignal.multiplexing;
targetSignal.name = sourceSignal.name;
targetSignal.startBit = sourceSignal.startBit;
targetSignal.length = sourceSignal.length;
targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
targetSignal.factor = sourceSignal.factor;
targetSignal.offset = sourceSignal.offset;
targetSignal.minimum = sourceSignal.minimum;
targetSignal.maximum = sourceSignal.maximum;
targetSignal.unit = sourceSignal.unit;
targetSignal.receivers = sourceSignal.receivers;
targetSignal.comment = sourceSignal.comment;
targetSignal.valueDescriptions = sourceSignal.valueDescriptions;
targetFrame.signals.push_back(std::move(targetSignal));
}
frames.push_back(std::move(targetFrame));
}
return DecodeDatabase(frames);
}
@@ -19,13 +19,14 @@
* @brief Converts parsed DBC data into runtime decode database.
*/
class DbcDecodeBuilder {
public:
public:
/**
* @brief Build runtime decode database.
* @param source Parsed DBC database.
* @return Runtime-ready decode database.
* @return Immutable runtime snapshot independent of source lifetime.
* @throws std::invalid_argument for invalid metadata or duplicate keys.
*/
DecodeDatabase Build (const DbcDatabase &source) const;
DecodeDatabase Build(const DbcDatabase &source) const;
};
#endif /* DBC_DECODE_BUILDER_H */
+220
View File
@@ -0,0 +1,220 @@
/**
* @file dbc_decoder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_decoder.h"
#include "signal_layout.h"
#include <cmath>
#include <utility>
std::shared_ptr<const DecodeFrame> DbcDecoder::FindFrame(const DecodeDatabase &database,
std::uint32_t canId,
bool isExtended) const {
return database.FindFrame(FrameKey(canId, isExtended));
}
DecodedFrameValue DbcDecoder::Decode(const DecodeDatabase &database,
const RawCanFrame &frame) const {
DecodedFrameValue result;
result.key = FrameKey(frame.canId, frame.isExtended);
const std::shared_ptr<const DecodeFrame> definition = FindFrame(database, frame.canId, frame.isExtended);
if (definition == nullptr)
return result;
result.definition = definition;
result.valid = true;
result.status = frame.data.size() < definition->dlc
? FrameDecodeStatus::InsufficientPayload
: FrameDecodeStatus::Valid;
const SelectorState selector = ReadSelector(*definition, frame);
result.signals.reserve(definition->signals.size());
for (const DecodeSignal &signal: definition->signals) {
DecodedSignalValue decoded = DecodeOneSignal(signal, definition->dlc, frame, selector);
if (!decoded.valid && decoded.status != SignalDecodeStatus::Inactive &&
result.status == FrameDecodeStatus::Valid)
result.status = FrameDecodeStatus::SignalErrors;
decoded.definition = std::shared_ptr<const DecodeSignal>(definition, &signal);
decoded.key = SignalKey(result.key, signal.name);
result.signals.push_back(std::move(decoded));
}
return result;
}
bool DbcDecoder::IsValidDefinition(const DecodeSignal &signal, std::uint8_t dlc) {
if (signal.length == 0U || signal.length > 64U ||
(signal.byteOrder != ByteOrder::Intel && signal.byteOrder != ByteOrder::Motorola) ||
(signal.valueType != ValueType::Unsigned && signal.valueType != ValueType::Signed) ||
(signal.multiplexing.role != MultiplexRole::Unconditional &&
signal.multiplexing.role != MultiplexRole::Selector &&
signal.multiplexing.role != MultiplexRole::Branch))
return false;
return IsValidSignalLayout(signal.startBit, signal.length,
signal.byteOrder == ByteOrder::Intel, dlc);
}
DbcDecoder::SelectorState DbcDecoder::ReadSelector(const DecodeFrame &definition,
const RawCanFrame &frame) {
SelectorState selector;
std::size_t count = 0U;
for (const DecodeSignal &signal: definition.signals) {
if (signal.multiplexing.role == MultiplexRole::Selector) {
selector.definition = &signal;
++count;
}
}
if (count != 1U)
return selector;
const DecodeSignal &signal = *selector.definition;
selector.valid = signal.valueType == ValueType::Unsigned &&
IsValidDefinition(signal, definition.dlc);
selector.available = selector.valid && ExtractUnsigned(frame.data, signal, selector.value);
return selector;
}
DecodedSignalValue DbcDecoder::DecodeOneSignal(const DecodeSignal &signal,
std::uint8_t dlc,
const RawCanFrame &frame,
const SelectorState &selector) {
DecodedSignalValue decoded;
std::uint64_t unsignedValue = 0U;
if (!IsValidDefinition(signal, dlc) ||
(signal.multiplexing.role != MultiplexRole::Unconditional && !selector.valid)) {
return decoded;
}
if (signal.multiplexing.role == MultiplexRole::Branch) {
if (selector.definition->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector.definition->length)) {
return decoded;
}
if (!selector.available) {
decoded.status = SignalDecodeStatus::SelectorUnavailable;
return decoded;
}
if (signal.multiplexing.value != selector.value) {
decoded.status = SignalDecodeStatus::Inactive;
return decoded;
}
}
if (!ExtractUnsigned(frame.data, signal, unsignedValue)) {
decoded.status = SignalDecodeStatus::InsufficientPayload;
return decoded;
}
if (signal.valueType == ValueType::Signed)
decoded.rawValue = SignExtend(unsignedValue, signal.length);
else
decoded.rawValue = unsignedValue;
double numericValue;
if (const std::int64_t *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))
numericValue = static_cast<double>(*signedValue);
else
numericValue = static_cast<double>(std::get<std::uint64_t>(decoded.rawValue));
decoded.physicalValue = numericValue * signal.factor + signal.offset;
if (!std::isfinite(decoded.physicalValue)) {
decoded.status = SignalDecodeStatus::PhysicalConversionFailed;
return decoded;
}
decoded.valid = true;
decoded.status = SignalDecodeStatus::Valid;
return decoded;
}
bool DbcDecoder::ExtractUnsigned(const std::vector<std::uint8_t> &data,
const DecodeSignal &signal,
std::uint64_t &value) {
if ((signal.length == 0U) || (signal.length > 64U))
return false;
if (signal.byteOrder == ByteOrder::Intel)
return ExtractIntel(data, signal.startBit, signal.length, value);
return ExtractMotorola(data, signal.startBit, signal.length, value);
}
bool DbcDecoder::ExtractIntel(const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value) {
value = 0U;
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
const std::uint64_t absoluteBit = std::uint64_t(startBit) + bitIndex;
const std::uint64_t byteIndex = absoluteBit / 8U;
const std::uint32_t bitInByte = absoluteBit % 8U;
if (byteIndex >= data.size())
return false;
const std::uint64_t bitValue =
(static_cast<std::uint64_t>((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);
value |= bitValue;
}
return true;
}
bool DbcDecoder::ExtractMotorola(const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value) {
/*
* DBC Motorola bit numbering:
* - startBit points to the most significant bit of the signal
* - inside a byte, bit numbering goes 7..0
* - crossing byte boundary moves to the next byte, bit 7
* Example: a signal starting at 7 follows 7..0, 15..8, 23..16.
*/
value = 0U;
std::size_t byteIndex = startBit / 8U;
std::uint32_t bitInByte = startBit % 8U;
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
if (byteIndex >= data.size())
return false;
value <<= 1U;
value |= static_cast<std::uint64_t>((data[byteIndex] >> bitInByte) & 0x01U);
if (bitInByte == 0U) {
++byteIndex;
bitInByte = 7U;
} else
--bitInByte;
}
return true;
}
std::int64_t DbcDecoder::SignExtend(std::uint64_t value, std::uint32_t bitLength) {
if ((bitLength == 0U) || (bitLength > 64U))
return 0;
const std::uint64_t signMask = std::uint64_t(1U) << (bitLength - 1U);
const std::uint64_t valueMask = (bitLength == 64U)
? ~std::uint64_t(0U)
: (std::uint64_t(1U) << bitLength) - 1U;
value &= valueMask;
if ((value & signMask) == 0U)
return static_cast<std::int64_t>(value);
// The complemented magnitude fits int64_t, including for INT64_MIN.
return -1 - static_cast<std::int64_t>((~value) & valueMask);
}
+140
View File
@@ -0,0 +1,140 @@
/**
* @file dbc_decoder.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DBC_DECODER_H
#define DBC_DECODER_H
#include <cstdint>
#include <variant>
#include <vector>
#include "decode_database.h"
/**
* @brief Raw CAN frame used for runtime or trace decoding.
*/
struct RawCanFrame {
std::uint32_t canId = 0U; /**< Normalized CAN ID. */
bool isExtended = false; /**< true for extended frame. */
std::vector<std::uint8_t> data; /**< Payload bytes. */
RawCanFrame() = default;
};
enum class SignalDecodeStatus {
InvalidDefinition,
InsufficientPayload,
SelectorUnavailable,
Inactive,
Valid,
PhysicalConversionFailed
};
/** Frame summary: short payload takes precedence over individual signal errors. */
enum class FrameDecodeStatus {
UnknownFrame,
InsufficientPayload,
SignalErrors,
Valid
};
/**
* @brief One decoded signal value.
*/
struct DecodedSignalValue {
std::shared_ptr<const DecodeSignal> definition; /**< Owning immutable definition. */
SignalKey key; /**< Stable application identifier. */
RawSignalValue rawValue = std::uint64_t(0U); /**< Exact raw value for Valid or PhysicalConversionFailed. */
double physicalValue = 0.0; /**< Conversion result, possibly NaN/Inf on failure. */
bool valid = false; /**< true if decoding succeeded. */
SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition;
/** Lookup using the raw integer; nullptr for invalid or unmapped values. */
const std::string *GetValueDescription() const {
return valid && definition ? FindValueDescription(definition->valueDescriptions, rawValue) : nullptr;
}
DecodedSignalValue() = default;
};
/**
* @brief Fully decoded frame.
*/
struct DecodedFrameValue {
std::shared_ptr<const DecodeFrame> definition; /**< Owning immutable definition. */
FrameKey key; /**< Stable application identifier. */
std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
bool valid = false; /**< true if frame was matched. */
FrameDecodeStatus status = FrameDecodeStatus::UnknownFrame; /**< Inspect signals for individual failures. */
DecodedFrameValue() = default;
};
/**
* @brief Runtime CAN decoder using prebuilt decode database.
*/
class DbcDecoder {
public:
/**
* @brief Find frame definition by CAN ID.
* @param database Runtime decode database.
* @param canId Normalized CAN ID.
* @param isExtended true for extended frame.
* @return Owning immutable frame handle or nullptr. Safe across reload.
*/
std::shared_ptr<const DecodeFrame> FindFrame(const DecodeDatabase &database,
std::uint32_t canId,
bool isExtended) const;
/**
* @brief Decode one raw CAN frame.
* @param database Runtime decode database.
* @param frame Raw CAN frame.
* Short payloads decode available signals; bytes beyond declared DLC are ignored.
* @return Decoded frame value.
*/
DecodedFrameValue Decode(const DecodeDatabase &database,
const RawCanFrame &frame) const;
private:
static bool IsValidDefinition(const DecodeSignal &signal, std::uint8_t dlc);
struct SelectorState {
const DecodeSignal *definition = nullptr;
bool valid = false;
bool available = false;
std::uint64_t value = 0U;
};
static SelectorState ReadSelector(const DecodeFrame &definition, const RawCanFrame &frame);
static DecodedSignalValue DecodeOneSignal(const DecodeSignal &signal,
std::uint8_t dlc,
const RawCanFrame &frame,
const SelectorState &selector);
static bool ExtractUnsigned(const std::vector<std::uint8_t> &data,
const DecodeSignal &signal,
std::uint64_t &value);
static bool ExtractIntel(const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value);
static bool ExtractMotorola(const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value);
static std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);
};
#endif /* DBC_DECODER_H */
+46
View File
@@ -0,0 +1,46 @@
// SPDX-License-Identifier: MIT
#ifndef DBC_DIAGNOSTIC_H
#define DBC_DIAGNOSTIC_H
#include "dbc_database.h"
#include <cstddef>
#include <string>
#include <vector>
enum class DbcDiagnosticSeverity {
Warning,
Error
};
/** Stable categories; messages provide the details. */
enum class DbcDiagnosticCode {
FileOpenError,
FileReadError,
InvalidStatement,
InvalidValueDescription,
InvalidMultiplexing,
UnsupportedStatement
};
struct DbcDiagnostic {
DbcDiagnosticSeverity severity;
DbcDiagnosticCode code;
std::string filePath;
std::size_t lineNumber; // One-based physical line; zero for file-level errors.
std::string message;
};
struct DbcParseResult {
DbcDatabase database;
std::vector<DbcDiagnostic> diagnostics;
bool HasErrors() const {
for (const DbcDiagnostic &diagnostic : diagnostics) {
if (diagnostic.severity == DbcDiagnosticSeverity::Error)
return true;
}
return false;
}
};
#endif /* DBC_DIAGNOSTIC_H */
+150
View File
@@ -0,0 +1,150 @@
/**
* @file dbc_parser.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_parser.h"
#include "dbc_statement_handler.h"
#include "text_utils.h"
#include <fstream>
#include <sstream>
#include <stdexcept>
#include <utility>
namespace {
// Read through the closing unescaped quote, preserving comment whitespace.
void ReadCommentLines(std::ifstream &input, std::string &statement,
std::size_t &lineNumber) {
bool inQuote = false;
bool escaped = false;
std::string part = statement;
for (;;) {
for (const char character: part) {
if (escaped) {
escaped = false;
} else if (inQuote && character == '\\') {
escaped = true;
} else if (character == '"') {
if (inQuote)
return;
inQuote = true;
}
}
if (!inQuote || !std::getline(input, part))
return;
++lineNumber;
if (!part.empty() && part.back() == '\r')
part.pop_back();
statement += '\n';
statement += part;
// A physical newline cannot escape the next line's first character.
escaped = false;
}
}
DbcDiagnosticCode StatementErrorCode(const std::string &keyword) {
if (keyword == "SG_MUL_VAL_")
return DbcDiagnosticCode::UnsupportedStatement;
if (keyword == "VAL_")
return DbcDiagnosticCode::InvalidValueDescription;
return DbcDiagnosticCode::InvalidStatement;
}
}
DbcDatabase DbcParser::ParseFile(const std::string &filePath) const {
DbcParseResult result = ParseFileWithDiagnostics(filePath);
for (const DbcDiagnostic &diagnostic : result.diagnostics) {
if (diagnostic.severity == DbcDiagnosticSeverity::Error) {
if (diagnostic.lineNumber == 0U)
throw std::runtime_error(diagnostic.message);
throw std::runtime_error(diagnostic.filePath + ":" +
std::to_string(diagnostic.lineNumber) + ": " + diagnostic.message);
}
}
return std::move(result.database);
}
DbcParseResult DbcParser::ParseFileWithDiagnostics(const std::string &filePath) const {
DbcParseResult result;
std::ifstream input(filePath.c_str());
if (!input.is_open()) {
result.diagnostics.push_back({DbcDiagnosticSeverity::Error,
DbcDiagnosticCode::FileOpenError, filePath, 0U,
"Failed to open DBC file: " + filePath});
return result;
}
DbcDatabase database;
DbcParseContext context{database, nullptr};
const DbcStatementDispatcher dispatcher;
bool inNamespace = false;
std::size_t lineNumber = 0U;
std::string line;
while (std::getline(input, line)) {
++lineNumber;
if (!line.empty() && line.back() == '\r')
line.pop_back();
const std::string rawLine = line;
const std::size_t statementLine = lineNumber;
line = dbc_detail::TrimText(line);
if (line.empty())
continue;
std::istringstream tokens(line);
std::string keyword;
std::string argument;
tokens >> keyword;
const bool hasArgument = static_cast<bool>(tokens >> argument);
if (inNamespace && !hasArgument && keyword != "BO_" && keyword != "SG_" &&
keyword != "BS_" && keyword != "BS_:" &&
keyword != "BU_" && keyword != "BU_:")
continue; // NS_ lists syntax symbols; BO_, SG_, BS_ and BU_ end the list.
inNamespace = keyword == "NS_" || keyword == "NS_:";
if (keyword == "CM_") {
line = rawLine;
ReadCommentLines(input, line, lineNumber);
}
try {
context.lineNumber = statementLine;
if (!dispatcher.Dispatch(line, context)) {
result.diagnostics.push_back({DbcDiagnosticSeverity::Warning,
DbcDiagnosticCode::UnsupportedStatement,
filePath, statementLine,
"Unsupported statement '" + keyword +
"' is ignored; decoding or metadata may be incomplete."});
}
} catch (const std::exception &error) {
result.diagnostics.push_back({DbcDiagnosticSeverity::Error,
StatementErrorCode(keyword), filePath,
statementLine, error.what()});
return result;
}
}
if (input.bad() || !input.eof()) {
result.diagnostics.push_back({DbcDiagnosticSeverity::Error,
DbcDiagnosticCode::FileReadError, filePath, 0U,
"Failed to read DBC file: " + filePath});
return result;
}
try {
context.ResolveComments(filePath);
context.ResolveValueDescriptions(filePath);
context.ValidateMultiplexing(filePath);
} catch (const DbcDiagnosticError &error) {
result.diagnostics.push_back(error.diagnostic);
return result;
}
result.database = std::move(database);
return result;
}
+58
View File
@@ -0,0 +1,58 @@
/**
* @file dbc_parser.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DBC_PARSER_H
#define DBC_PARSER_H
#include <string>
#include "dbc_diagnostic.h"
/**
* @brief Minimal DBC parser.
*
* Supports:
* - BO_
* - SG_
* - CM_ BO_
* - CM_ SG_
* - basic M / mN multiplexing
* - VAL_ signal value descriptions
*
* Frame/signal comments support multiline quoted text and deferred references.
*
* Reports unsupported statements as warnings, except SG_MUL_VAL_ which is
* an error. VERSION, NS_, BS_, BU_ and NS_ symbol declarations stay quiet.
*/
class DbcParser {
public:
/**
* @brief Parse DBC file.
* @param filePath Path to input file.
* @return Parsed database.
* @throws std::runtime_error on file or parse errors.
* Line parse errors include the file path and one-based line number.
* Duplicate normalized CAN IDs of the same frame type and duplicate signal
* names within a frame are rejected at the repeated definition's line.
*/
DbcDatabase ParseFile(const std::string &filePath) const;
/**
* @brief Parse with warnings and a structured first error instead of throwing.
* @return Valid database with diagnostics; empty database on error.
* File errors use line zero; statement errors use physical one-based lines.
* Warnings indicate ignored syntax and possible incomplete decoding.
*/
DbcParseResult ParseFileWithDiagnostics(const std::string &filePath) const;
};
#endif /* DBC_PARSER_H */
+552
View File
@@ -0,0 +1,552 @@
// SPDX-License-Identifier: MIT
#include "dbc_statement_handler.h"
#include "text_utils.h"
#include "signal_layout.h"
#include <charconv>
#include <cmath>
#include <limits>
#include <regex>
#include <sstream>
#include <stdexcept>
namespace {
std::uint32_t ParseDecimal(const std::string &text,
std::uint32_t maximum,
const char *field) {
std::uint32_t value = 0U;
const std::from_chars_result parsed = std::from_chars(text.data(), text.data() + text.size(), value);
if (text.empty() || parsed.ec != std::errc() ||
parsed.ptr != text.data() + text.size() || value > maximum)
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
return value;
}
std::uint32_t ParseCanId(const std::string &text) {
const std::uint32_t rawId = ParseDecimal(
text, std::numeric_limits<std::uint32_t>::max(), "CAN ID");
// Only bit 31 may accompany the actual 29-bit identifier.
if ((rawId & 0x60000000U) != 0U)
throw std::runtime_error("CAN ID exceeds the 29-bit identifier range.");
return rawId;
}
double ParsePhysicalValue(const std::string &text, const char *field) {
static const std::regex number(
R"(^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$)");
if (!std::regex_match(text, number))
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
// Floating-point from_chars is locale-independent and does not accept
// a leading '+', which the DBC numeric grammar permits.
const char *begin = text.data();
const char *end = begin + text.size();
if (*begin == '+')
++begin;
double value = 0.0;
const std::from_chars_result parsed =
std::from_chars(begin, end, value, std::chars_format::general);
// Keep the existing rejection of conversion underflow into subnormal values.
if (parsed.ec != std::errc() || parsed.ptr != end || !std::isfinite(value) ||
std::fpclassify(value) == FP_SUBNORMAL)
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
return value;
}
Multiplexing ParseMultiplexingMarker(const std::string &marker) {
Multiplexing result;
if (marker == "M")
result.role = MultiplexRole::Selector;
else if (!marker.empty()) {
if (marker[0] != 'm')
throw std::runtime_error("Unsupported multiplexing marker.");
const std::string value = marker.substr(1U);
const std::from_chars_result parsed =
std::from_chars(value.data(), value.data() + value.size(), result.value);
if (value.empty() || parsed.ec != std::errc() || parsed.ptr != value.data() + value.size())
throw std::runtime_error("Invalid or unsupported multiplexing marker.");
result.role = MultiplexRole::Branch;
}
return result;
}
RawSignalValue ParseValueKey(const std::string &number) {
RawSignalValue key;
if (!number.empty() && number[0] == '-') {
std::int64_t value = 0;
const std::from_chars_result parsed =
std::from_chars(number.data(), number.data() + number.size(), value);
if (parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())
throw std::runtime_error("Invalid VAL_ integer: " + number);
key = NormalizeValueKey(RawSignalValue(value));
} else {
std::uint64_t value = 0;
const std::from_chars_result parsed =
std::from_chars(number.data(), number.data() + number.size(), value);
if (number.empty() || parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())
throw std::runtime_error("Invalid VAL_ integer: " + number);
key = value;
}
return key;
}
std::string UnescapeDescription(const std::string &quoted) {
std::string description;
for (std::size_t i = 0; i < quoted.size(); ++i) {
if (quoted[i] == '\\')
++i;
description += quoted[i];
}
return description;
}
FrameInfo *FindUniqueFrame(DbcDatabase &database, std::uint32_t canId, bool isExtended) {
FrameInfo *frame = nullptr;
for (FrameInfo &candidate : database.frames) {
if (candidate.canId == canId && candidate.isExtended == isExtended) {
if (frame)
throw std::runtime_error("Ambiguous VAL_ frame reference.");
frame = &candidate;
}
}
if (!frame)
throw std::runtime_error("Unresolved VAL_ frame reference.");
return frame;
}
SignalInfo *FindUniqueSignal(FrameInfo &frame, const std::string &signalName) {
SignalInfo *signal = nullptr;
for (SignalInfo &candidate : frame.signals) {
if (candidate.name == signalName) {
if (signal)
throw std::runtime_error("Ambiguous VAL_ signal reference: " + signalName);
signal = &candidate;
}
}
if (!signal)
throw std::runtime_error("Unresolved VAL_ signal reference: " + signalName);
return signal;
}
std::uint64_t NextSignalBit(std::uint64_t bit, bool isLittleEndian) {
if (isLittleEndian)
return bit + 1U;
// From bit 0, Motorola continues at bit 7 of the next byte (0 -> 15).
return bit % 8U == 0U ? bit + 15U : bit - 1U;
}
FrameInfo *FindFrameById(DbcDatabase &, std::uint32_t, bool);
SignalInfo *FindSignalByName(FrameInfo &, const std::string &);
} // namespace
namespace {
std::vector<std::string> SplitReceivers(const std::string &text) {
std::vector<std::string> receivers;
std::string token;
std::istringstream stream(text);
while (std::getline(stream, token, ',')) {
token = dbc_detail::TrimText(token);
if (!token.empty())
receivers.push_back(token);
}
return receivers;
}
void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended) {
/*
* DBC commonly stores extended identifiers with bit 31 set.
* Example:
* raw id = 0x80000000 | actual_29_bit_id
*/
if ((rawCanId & 0x80000000U) != 0U) {
isExtended = true;
normalizedCanId = (rawCanId & 0x1FFFFFFFU);
} else {
isExtended = (rawCanId > 0x7FFU);
normalizedCanId = rawCanId;
}
}
std::uint32_t TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn) {
hasPgn = false;
if (!isExtended)
return 0U;
if ((canId & 0x1FFFFFFFU) != canId)
return 0U;
const std::uint32_t pf = (canId >> 16U) & 0xFFU;
const std::uint32_t ps = (canId >> 8U) & 0xFFU;
const std::uint32_t dp = (canId >> 24U) & 0x01U;
std::uint32_t pgn = 0U;
if (pf < 240U)
pgn = (dp << 16U) | (pf << 8U);
else
pgn = (dp << 16U) | (pf << 8U) | ps;
hasPgn = true;
return pgn;
}
} // namespace
FrameInfo DbcFrameHandler::ParseFrameLine(const std::string &line) {
/*
* Example:
* BO_ 256 EngineData: 8 EEC1
*/
std::istringstream stream(line);
std::string keyword;
std::string idText;
if (!(stream >> keyword >> idText) || keyword != "BO_")
throw std::runtime_error("Missing CAN ID in frame definition.");
const std::uint32_t rawCanId = ParseCanId(idText);
std::string nameText;
if (!std::getline(stream, nameText, ':') || stream.eof())
throw std::runtime_error("Missing ':' in frame definition.");
std::istringstream nameStream(nameText);
FrameInfo frame;
std::string extra;
if (!(nameStream >> frame.name) || (nameStream >> extra))
throw std::runtime_error("Missing or invalid frame name.");
std::string lengthText;
if (!(stream >> lengthText))
throw std::runtime_error("Missing payload length in frame definition.");
frame.dlc = static_cast<std::uint8_t>(ParseDecimal(
lengthText, std::numeric_limits<std::uint8_t>::max(), "payload length"));
if (!(stream >> frame.transmitter))
throw std::runtime_error("Missing transmitter in frame definition.");
if (stream >> extra)
throw std::runtime_error("Unexpected trailing field in frame definition: " + extra);
NormalizeCanId(rawCanId, frame.canId, frame.isExtended);
frame.pgn = TryExtractPgn(frame.canId, frame.isExtended, frame.hasPgn);
return frame;
}
SignalInfo DbcSignalHandler::ParseSignalLine(const std::string &line) {
// Match the complete statement before converting any numeric fields.
enum Field {
NameAndMarker = 1, StartBit, BitLength, ByteOrder, Signedness,
Factor, Offset, Minimum, Maximum, Unit, Receivers
};
static const std::regex syntax(
// Name and optional multiplexing marker.
R"dbc(^SG_[ \t]+([^:]+):[ \t]*)dbc"
// Bit position, length, byte order and signedness.
R"dbc(([^| \t]+)[ \t]*\|[ \t]*([^@ \t]+)[ \t]*@[ \t]*([01])([+-])[ \t]*)dbc"
// Scaling factor and offset.
R"dbc(\([ \t]*([^, \t]+)[ \t]*,[ \t]*([^ )\t]+)[ \t]*\)[ \t]*)dbc"
// Physical range.
R"dbc(\[[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^\] \t]+)[ \t]*\][ \t]*)dbc"
// Unit and receivers.
R"dbc("([^"\r\n]*)"[ \t]+([^ \t,]+(?:[ \t]*,[ \t]*[^ \t,]+)*)[ \t]*$)dbc");
std::smatch fields;
if (!std::regex_match(line, fields, syntax))
throw std::runtime_error("Malformed or unsupported SG_ signal definition.");
SignalInfo signal;
std::istringstream nameFields(fields[NameAndMarker].str());
std::string marker;
std::string extra;
nameFields >> signal.name >> marker;
if (signal.name.empty() || (nameFields >> extra))
throw std::runtime_error("Invalid signal name or multiplexing marker.");
signal.multiplexing = ParseMultiplexingMarker(marker);
signal.startBit = ParseDecimal(fields[StartBit].str(),
std::numeric_limits<std::uint32_t>::max(), "signal start bit");
signal.length = ParseDecimal(fields[BitLength].str(), 64U, "signal length");
if (signal.length == 0U)
throw std::runtime_error("Signal length must be within 1..64 bits.");
signal.isLittleEndian = fields[ByteOrder].str() == "1";
signal.isSigned = fields[Signedness].str() == "-";
signal.factor = ParsePhysicalValue(fields[Factor].str(), "signal factor");
signal.offset = ParsePhysicalValue(fields[Offset].str(), "signal offset");
signal.minimum = ParsePhysicalValue(fields[Minimum].str(), "signal minimum");
signal.maximum = ParsePhysicalValue(fields[Maximum].str(), "signal maximum");
if (signal.minimum > signal.maximum)
throw std::runtime_error("Signal minimum exceeds maximum.");
signal.unit = fields[Unit].str();
signal.receivers = SplitReceivers(fields[Receivers].str());
return signal;
}
namespace {
FrameInfo *FindFrameById(DbcDatabase &database,
std::uint32_t canId,
bool isExtended) {
for (FrameInfo &frame : database.frames) {
if (frame.canId == canId && frame.isExtended == isExtended)
return &frame;
}
return nullptr;
}
SignalInfo *FindSignalByName(FrameInfo &frame, const std::string &signalName) {
for (SignalInfo &signal : frame.signals) {
if (signal.name == signalName)
return &signal;
}
return nullptr;
}
}// namespace
void DbcFrameHandler::Handle(const std::string &line, DbcParseContext &context) const {
FrameInfo frame = ParseFrameLine(line);
if (FindFrameById(context.database, frame.canId, frame.isExtended) != nullptr)
throw std::runtime_error("Duplicate " + std::string(frame.isExtended ? "extended" : "standard") +
" frame CAN ID: " + std::to_string(frame.canId));
context.database.frames.push_back(std::move(frame));
context.currentFrame = &context.database.frames.back();
context.signalLines.emplace_back();
}
void DbcSignalHandler::Handle(const std::string &line, DbcParseContext &context) const {
if (context.currentFrame == nullptr)
throw std::runtime_error("Signal found before any frame definition.");
SignalInfo signal = ParseSignalLine(line);
if (FindSignalByName(*context.currentFrame, signal.name) != nullptr)
throw std::runtime_error("Duplicate signal name '" + signal.name +
"' in frame '" + context.currentFrame->name + "'.");
if (!IsValidSignalLayout(signal.startBit, signal.length, signal.isLittleEndian,
context.currentFrame->dlc))
throw std::runtime_error("Signal exceeds the frame payload length.");
context.currentFrame->signals.push_back(std::move(signal));
context.signalLines.back().push_back(context.lineNumber);
}
void DbcCommentHandler::Handle(const std::string &line, DbcParseContext &context) const {
std::istringstream stream(line);
std::string keyword;
std::string target;
stream >> keyword >> target;
if (keyword != "CM_" || (target != "BO_" && target != "SG_"))
return;
PendingComment pending;
pending.isSignal = target == "SG_";
pending.lineNumber = context.lineNumber;
std::string idText;
if (!(stream >> idText))
throw std::runtime_error("Missing CAN ID in CM_ statement.");
NormalizeCanId(ParseCanId(idText), pending.canId, pending.isExtended);
if (pending.isSignal && (!(stream >> pending.signalName) ||
pending.signalName.find_first_of("\";") != std::string::npos))
throw std::runtime_error("Missing or invalid signal name in CM_ statement.");
stream >> std::ws;
if (stream.get() != '"')
throw std::runtime_error("Missing opening quote in CM_ statement.");
bool closed = false;
char character;
while (stream.get(character)) {
if (character == '"') {
closed = true;
break;
}
if (character == '\\') {
if (!stream.get(character) || (character != '"' && character != '\\'))
throw std::runtime_error("Invalid escape in CM_ statement.");
}
pending.comment += character;
}
if (!closed)
throw std::runtime_error("Unterminated CM_ comment.");
stream >> std::ws;
if (stream.get() != ';')
throw std::runtime_error("Missing semicolon in CM_ statement.");
stream >> std::ws;
if (!stream.eof())
throw std::runtime_error("Unexpected trailing text in CM_ statement.");
context.pendingComments.push_back(std::move(pending));
}
void DbcParseContext::ResolveComments(const std::string &filePath) {
for (const PendingComment &pending: pendingComments) {
FrameInfo *frame = FindFrameById(database, pending.canId, pending.isExtended);
if (!frame)
throw DbcDiagnosticError(DbcDiagnosticCode::InvalidStatement, filePath,
pending.lineNumber, "Unresolved CM_ frame reference.");
if (pending.isSignal) {
SignalInfo *signal = FindSignalByName(*frame, pending.signalName);
if (!signal)
throw DbcDiagnosticError(DbcDiagnosticCode::InvalidStatement, filePath,
pending.lineNumber, "Unresolved CM_ signal reference: " + pending.signalName);
signal->comment = pending.comment;
} else {
frame->comment = pending.comment;
}
}
}
DbcStatementDispatcher::DbcStatementDispatcher() {
RegisterType<DbcHeaderHandler>("VERSION");
RegisterType<DbcHeaderHandler>("NS_");
RegisterType<DbcHeaderHandler>("NS_:");
RegisterType<DbcHeaderHandler>("BS_");
RegisterType<DbcHeaderHandler>("BS_:");
RegisterType<DbcHeaderHandler>("BU_");
RegisterType<DbcHeaderHandler>("BU_:");
RegisterType<DbcUnsupportedMultiplexingHandler>("SG_MUL_VAL_");
RegisterType<DbcFrameHandler>("BO_");
RegisterType<DbcSignalHandler>("SG_");
RegisterType<DbcCommentHandler>("CM_");
RegisterType<DbcValueDescriptionHandler>("VAL_");
}
void DbcHeaderHandler::Handle(const std::string &, DbcParseContext &) const {}
bool DbcStatementDispatcher::Dispatch(const std::string &line,
DbcParseContext &context) const {
std::istringstream stream(line);
std::string keyword;
stream >> keyword;
const HandlerMap::const_iterator handler = m_handlers.find(keyword);
if (handler == m_handlers.end())
return false;
handler->second->Handle(line, context);
return true;
}
void DbcValueDescriptionHandler::Handle(const std::string &line, DbcParseContext &context) const {
static const std::regex header(R"(^VAL_[ \t]+([^ \t]+)[ \t]+([^ \t;]+)[ \t]+(.*)$)");
static const std::regex pair(R"dbc(^([^ \t]+)[ \t]+"((?:[^"\\]|\\["\\])*)")dbc");
std::smatch fields;
if (!std::regex_match(line, fields, header))
throw std::runtime_error("Malformed or unsupported VAL_ statement.");
const std::uint32_t rawId = ParseDecimal(fields[1].str(), std::numeric_limits<std::uint32_t>::max(), "VAL_ CAN ID");
if ((rawId & 0x60000000U) != 0U)
throw std::runtime_error("VAL_ CAN ID exceeds the 29-bit identifier range.");
PendingValueDescriptions pending;
NormalizeCanId(rawId, pending.canId, pending.isExtended);
pending.signalName = fields[2].str();
pending.lineNumber = context.lineNumber;
std::string rest = fields[3].str();
while (rest != ";") {
if (!std::regex_search(rest, fields, pair))
throw std::runtime_error("Malformed VAL_ value/description pair or missing semicolon.");
const std::string number = fields[1].str();
const RawSignalValue key = ParseValueKey(number);
const std::string description = UnescapeDescription(fields[2].str());
if (!pending.descriptions.emplace(key, description).second)
throw std::runtime_error("Duplicate VAL_ value key: " + number);
const std::size_t consumed = static_cast<std::size_t>(fields.length());
rest.erase(0, consumed);
if (!rest.empty() && rest[0] != ';' && rest[0] != ' ' && rest[0] != '\t')
throw std::runtime_error("Missing whitespace between VAL_ pairs.");
rest = dbc_detail::TrimText(rest);
}
if (pending.descriptions.empty())
throw std::runtime_error("VAL_ requires at least one value/description pair.");
context.pendingValues.push_back(std::move(pending));
}
void DbcParseContext::ResolveValueDescriptions(const std::string &filePath) {
for (const PendingValueDescriptions &pending: pendingValues) {
try {
FrameInfo *frame = FindUniqueFrame(database, pending.canId, pending.isExtended);
SignalInfo *signal = FindUniqueSignal(*frame, pending.signalName);
for (const ValueDescriptions::value_type &entry: pending.descriptions) {
if (!signal->valueDescriptions.insert(entry).second)
throw std::runtime_error("Duplicate VAL_ value key for signal: " + pending.signalName);
}
} catch (const std::exception &error) {
throw DbcDiagnosticError(DbcDiagnosticCode::InvalidValueDescription,
filePath, pending.lineNumber, error.what());
}
}
}
void DbcUnsupportedMultiplexingHandler::Handle(const std::string &, DbcParseContext &) const {
throw std::runtime_error("Extended and nested multiplexing are unsupported.");
}
namespace {
std::vector<std::uint64_t> SignalBits(const SignalInfo &signal) {
std::vector<std::uint64_t> bits;
std::uint64_t bit = signal.startBit;
for (std::uint32_t index = 0U; index < signal.length; ++index) {
bits.push_back(bit);
bit = NextSignalBit(bit, signal.isLittleEndian);
}
return bits;
}
bool AreMutuallyExclusive(const SignalInfo &first, const SignalInfo &second) {
return first.multiplexing.role == MultiplexRole::Branch &&
second.multiplexing.role == MultiplexRole::Branch &&
first.multiplexing.value != second.multiplexing.value;
}
std::string ValidateBranch(const SignalInfo &signal, const SignalInfo *selector) {
if (signal.multiplexing.role != MultiplexRole::Branch)
return {};
if (selector == nullptr)
return "Multiplexed branch has no selector.";
if (selector->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector->length))
return "Branch value exceeds selector raw range.";
return {};
}
const SignalInfo *FindSelector(const FrameInfo &frame,
const std::vector<std::size_t> &lines,
const std::string &filePath) {
const SignalInfo *selector = nullptr;
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
const SignalInfo &signal = frame.signals[index];
if (signal.multiplexing.role != MultiplexRole::Selector)
continue;
if (selector != nullptr || signal.isSigned)
throw DbcDiagnosticError(DbcDiagnosticCode::InvalidMultiplexing,
filePath, lines[index],
"Multiplexing requires one unsigned selector per frame.");
selector = &signal;
}
return selector;
}
bool SignalsOverlap(const SignalInfo &first, const SignalInfo &second) {
const std::vector<std::uint64_t> firstBits = SignalBits(first);
const std::vector<std::uint64_t> secondBits = SignalBits(second);
for (const std::uint64_t firstBit : firstBits) {
for (const std::uint64_t secondBit : secondBits) {
if (firstBit == secondBit)
return true;
}
}
return false;
}
}
void DbcParseContext::ValidateMultiplexing(const std::string &filePath) const {
for (std::size_t frameIndex = 0U; frameIndex < database.frames.size(); ++frameIndex) {
const FrameInfo &frame = database.frames[frameIndex];
const SignalInfo *selector = FindSelector(frame, signalLines[frameIndex], filePath);
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
const SignalInfo &signal = frame.signals[index];
std::string error = ValidateBranch(signal, selector);
for (std::size_t previous = 0U; previous < index && error.empty(); ++previous) {
const SignalInfo &other = frame.signals[previous];
if (!AreMutuallyExclusive(signal, other) && SignalsOverlap(signal, other))
error = "Signals overlap without mutually exclusive multiplexing conditions.";
}
if (!error.empty())
throw DbcDiagnosticError(DbcDiagnosticCode::InvalidMultiplexing,
filePath, signalLines[frameIndex][index], error);
}
}
}
+120
View File
@@ -0,0 +1,120 @@
// SPDX-License-Identifier: MIT
#ifndef DBC_STATEMENT_HANDLER_H
#define DBC_STATEMENT_HANDLER_H
#include "dbc_database.h"
#include "dbc_diagnostic.h"
#include "typefactory.h"
#include <stdexcept>
#include <string>
#include <unordered_map>
struct PendingValueDescriptions {
std::uint32_t canId;
bool isExtended;
std::string signalName;
ValueDescriptions descriptions;
std::size_t lineNumber;
};
struct PendingComment {
std::uint32_t canId;
bool isExtended;
bool isSignal;
std::string signalName;
std::string comment;
std::size_t lineNumber;
};
/** Carries deferred validation locations without parsing exception text. */
class DbcDiagnosticError : public std::runtime_error {
public:
DbcDiagnosticError(DbcDiagnosticCode code, const std::string &filePath,
std::size_t lineNumber, const std::string &message)
: std::runtime_error(filePath + ":" + std::to_string(lineNumber) + ": " + message),
diagnostic{DbcDiagnosticSeverity::Error, code, filePath, lineNumber, message} {}
DbcDiagnostic diagnostic;
};
/** Mutable state belonging to one file parse. Handlers do not retain it. */
struct DbcParseContext {
DbcDatabase &database;
FrameInfo *currentFrame = nullptr;
std::size_t lineNumber = 0U;
std::vector<PendingValueDescriptions> pendingValues = {};
std::vector<std::vector<std::size_t>> signalLines = {};
void ValidateMultiplexing(const std::string &filePath) const;
std::vector<PendingComment> pendingComments = {};
void ResolveComments(const std::string &filePath);
void ResolveValueDescriptions(const std::string &filePath);
};
class DbcStatementHandler {
public:
virtual ~DbcStatementHandler() = default;
virtual void Handle(const std::string &line, DbcParseContext &context) const = 0;
};
class DbcFrameHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
private:
static FrameInfo ParseFrameLine(const std::string &line);
};
class DbcSignalHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
private:
static SignalInfo ParseSignalLine(const std::string &line);
};
class DbcCommentHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
};
class DbcValueDescriptionHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
};
class DbcUnsupportedMultiplexingHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
};
/** Common header metadata does not change the supported decode definitions. */
class DbcHeaderHandler : public DbcStatementHandler {
public:
void Handle(const std::string &line, DbcParseContext &context) const override;
};
/** Exact-key dispatch to handlers created once per registration via TypeFactory. */
class DbcStatementDispatcher {
public:
DbcStatementDispatcher();
template<class Handler>
void RegisterType(const std::string &keyword) {
m_factory.registerType<Handler>(keyword);
m_handlers.insert_or_assign(keyword, m_factory.create(keyword));
}
/** Returns false for an unregistered keyword; input must be trimmed. */
bool Dispatch(const std::string &line, DbcParseContext &context) const;
private:
using HandlerMap = std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>>;
TypeFactory<std::string, DbcStatementHandler> m_factory;
HandlerMap m_handlers;
};
#endif /* DBC_STATEMENT_HANDLER_H */
+29
View File
@@ -0,0 +1,29 @@
/**
* @file dbc_tree_builder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_tree_builder.h"
std::unique_ptr<TreeNode> DbcTreeBuilder::Build(const DbcDatabase &database) const {
std::unique_ptr<TreeNode> root = std::make_unique<TreeNode>();
for (const FrameInfo &frame : database.frames) {
std::unique_ptr<TreeNode> frameNode = std::make_unique<TreeNode>(frame);
for (const SignalInfo &signal : frame.signals) {
std::unique_ptr<TreeNode> signalNode = std::make_unique<TreeNode>(signal);
frameNode->AddChild(std::move(signalNode));
}
root->AddChild(std::move(frameNode));
}
return root;
}
@@ -21,13 +21,13 @@
* @brief Builds a simple tree from parsed DBC database.
*/
class DbcTreeBuilder {
public:
public:
/**
* @brief Build tree representation of parsed DBC data.
* @param database Parsed database.
* @return Root node of the tree.
*/
std::unique_ptr<TreeNode> Build (const DbcDatabase &database) const;
std::unique_ptr<TreeNode> Build(const DbcDatabase &database) const;
};
#endif /* DBC_TREE_BUILDER_H */
+133
View File
@@ -0,0 +1,133 @@
// SPDX-License-Identifier: MIT
// Copyright (c) 2026 Dim Himro
#include "decode_database.h"
#include "signal_layout.h"
#include <bitset>
#include <cmath>
#include <limits>
#include <stdexcept>
#include <unordered_set>
namespace {
constexpr std::size_t MaximumPayloadBits = std::numeric_limits<std::uint8_t>::max() * 8U;
using SignalBits = std::bitset<MaximumPayloadBits>;
void ValidateSignal(const DecodeSignal &signal, std::uint8_t dlc) {
if (signal.byteOrder != ByteOrder::Intel && signal.byteOrder != ByteOrder::Motorola)
throw std::invalid_argument("Invalid signal byte order: " + signal.name);
if (signal.valueType != ValueType::Unsigned && signal.valueType != ValueType::Signed)
throw std::invalid_argument("Invalid signal value type: " + signal.name);
if (signal.multiplexing.role != MultiplexRole::Unconditional &&
signal.multiplexing.role != MultiplexRole::Selector &&
signal.multiplexing.role != MultiplexRole::Branch)
throw std::invalid_argument("Invalid multiplexing role: " + signal.name);
if (!IsValidSignalLayout(signal.startBit, signal.length,
signal.byteOrder == ByteOrder::Intel, dlc))
throw std::invalid_argument("Invalid signal length or payload position: " + signal.name);
if (!std::isfinite(signal.factor) || !std::isfinite(signal.offset) ||
!std::isfinite(signal.minimum) || !std::isfinite(signal.maximum) ||
signal.minimum > signal.maximum)
throw std::invalid_argument("Invalid signal numeric parameters: " + signal.name);
}
SignalBits GetSignalBits(const DecodeSignal &signal) {
SignalBits bits;
const bool littleEndian = signal.byteOrder == ByteOrder::Intel;
const std::uint64_t start = SignalStartCoordinate(signal.startBit, littleEndian);
for (std::uint32_t index = 0U; index < signal.length; ++index) {
const std::uint64_t coordinate = start + index;
const std::uint64_t bit = littleEndian ? coordinate
: coordinate / 8U * 8U + 7U - coordinate % 8U;
bits.set(static_cast<std::size_t>(bit));
}
return bits;
}
bool AreMutuallyExclusive(const DecodeSignal &first, const DecodeSignal &second) {
return first.multiplexing.role == MultiplexRole::Branch &&
second.multiplexing.role == MultiplexRole::Branch &&
first.multiplexing.value != second.multiplexing.value;
}
void ValidateFrame(const DecodeFrame &frame) {
const std::uint32_t maximumId = frame.isExtended ? 0x1FFFFFFFU : 0x7FFU;
if (frame.canId > maximumId)
throw std::invalid_argument("Invalid normalized CAN ID: " + std::to_string(frame.canId));
std::unordered_set<std::string> names;
const DecodeSignal *selector = nullptr;
for (const DecodeSignal &signal: frame.signals) {
if (!names.insert(signal.name).second)
throw std::invalid_argument("Duplicate runtime signal key: " + signal.name);
ValidateSignal(signal, frame.dlc);
if (signal.multiplexing.role == MultiplexRole::Selector) {
if (selector != nullptr || signal.valueType != ValueType::Unsigned)
throw std::invalid_argument("Multiplexing requires one unsigned selector per frame");
selector = &signal;
}
}
std::vector<SignalBits> layouts;
layouts.reserve(frame.signals.size());
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
const DecodeSignal &signal = frame.signals[index];
if (signal.multiplexing.role == MultiplexRole::Branch &&
(selector == nullptr ||
(selector->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector->length))))
throw std::invalid_argument("Missing selector or branch value outside selector range: " + signal.name);
const SignalBits bits = GetSignalBits(signal);
for (std::size_t previous = 0U; previous < index; ++previous) {
if (!AreMutuallyExclusive(signal, frame.signals[previous]) && (bits & layouts[previous]).any())
throw std::invalid_argument("Overlapping signals: " + signal.name);
}
layouts.push_back(bits);
}
}
}// namespace
DecodeDatabase::Storage::Storage(const std::vector<DecodeFrame> &definitions)
: frames(definitions) {
// Validate the complete snapshot before creating its lookup index.
std::unordered_set<FrameKey, FrameKeyHasher> keys;
keys.reserve(frames.size());
for (const DecodeFrame &frame: frames) {
ValidateFrame(frame);
if (!keys.insert(frame.GetKey()).second)
throw std::invalid_argument("Duplicate runtime frame key");
}
frameIndexByKey.reserve(frames.size());
for (std::size_t index = 0U; index < frames.size(); ++index) {
frameIndexByKey.emplace(frames[index].GetKey(), index);
}
}
DecodeDatabase::DecodeDatabase(const std::vector<DecodeFrame> &frames)
: storage(std::make_shared<const Storage>(frames)) {
}
const std::vector<DecodeFrame> &DecodeDatabase::GetFrames() const {
static const std::vector<DecodeFrame> empty;
return storage ? storage->frames : empty;
}
std::shared_ptr<const DecodeFrame> DecodeDatabase::FindFrame(const FrameKey &key) const {
if (!storage)
return nullptr;
const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =
storage->frameIndexByKey.find(key);
if (it == storage->frameIndexByKey.end())
return nullptr;
return std::shared_ptr<const DecodeFrame>(storage, &storage->frames[it->second]);
}
std::shared_ptr<const DecodeSignal> DecodeDatabase::FindSignal(const SignalKey &key) const {
const std::shared_ptr<const DecodeFrame> frame = FindFrame(key.frame);
if (!frame)
return nullptr;
for (const DecodeSignal &signal: frame->signals) {
if (signal.name == key.name)
return std::shared_ptr<const DecodeSignal>(frame, &signal);
}
return nullptr;
}
+114
View File
@@ -0,0 +1,114 @@
/**
* @file decode_database.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DECODE_DATABASE_H
#define DECODE_DATABASE_H
#include "definition_key.h"
#include "multiplexing.h"
#include "value_descriptions.h"
#include <cstdint>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
/**
* @brief Signal byte order used for runtime decoding.
*/
enum class ByteOrder {
Intel,
Motorola
};
/**
* @brief Signal numeric type.
*/
enum class ValueType {
Unsigned,
Signed
};
/**
* @brief Runtime-ready signal definition.
*/
struct DecodeSignal {
Multiplexing multiplexing;
std::string name; /**< Signal name. */
std::uint32_t startBit = 0U; /**< DBC start bit. */
std::uint32_t length = 0U; /**< Signal length in bits. */
ByteOrder byteOrder = ByteOrder::Intel; /**< Intel or Motorola. */
ValueType valueType = ValueType::Unsigned; /**< Signed or unsigned. */
double factor = 1.0; /**< Scaling factor. */
double offset = 0.0; /**< Physical offset. */
double minimum = 0.0; /**< Minimum physical value. */
double maximum = 0.0; /**< Maximum physical value. */
std::string unit; /**< Physical unit. */
std::vector<std::string> receivers; /**< Receivers. */
ValueDescriptions valueDescriptions; /**< Raw integer state descriptions. */
std::string comment; /**< Comment. */
DecodeSignal() = default;
};
/**
* @brief Runtime-ready frame definition.
*/
struct DecodeFrame {
std::string name; /**< Frame name. */
std::uint32_t canId = 0U; /**< Normalized CAN ID. */
bool isExtended = false; /**< true for extended frame. */
std::uint8_t dlc = 0U; /**< Payload length. */
std::uint32_t pgn = 0U; /**< PGN if available. */
bool hasPgn = false; /**< true if PGN is valid. */
std::string transmitter; /**< Transmitter ECU. */
std::string comment; /**< Frame comment. */
std::vector<DecodeSignal> signals; /**< Signal definitions. */
DecodeFrame() = default;
FrameKey GetKey() const {
return FrameKey(canId, isExtended);
}
};
/**
* @brief Immutable runtime snapshot. Copies share storage; reload replaces a snapshot.
* Owning lookup handles and decoded results keep old definitions alive.
*/
class DecodeDatabase {
public:
DecodeDatabase() = default;
/**
* Copy and validate definitions before building the frame index.
* Input aliases cannot modify the snapshot, even for rvalue input.
* @throws std::invalid_argument for invalid metadata or duplicate keys.
*/
explicit DecodeDatabase(const std::vector<DecodeFrame> &frames);
/** Borrowed view, valid while this snapshot remains alive and unchanged. */
const std::vector<DecodeFrame> &GetFrames() const;
/** Owning handles retain the entire snapshot across reload or destruction. */
std::shared_ptr<const DecodeFrame> FindFrame(const FrameKey &key) const;
std::shared_ptr<const DecodeSignal> FindSignal(const SignalKey &key) const;
private:
struct Storage {
std::vector<DecodeFrame> frames;
std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
explicit Storage(const std::vector<DecodeFrame> &definitions);
};
std::shared_ptr<const Storage> storage;
};
#endif /* DECODE_DATABASE_H */
+62
View File
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: MIT
// Copyright (c) 2026 Dim Himro
#ifndef DEFINITION_KEY_H
#define DEFINITION_KEY_H
#include <cstdint>
#include <functional>
#include <string>
#include <utility>
/**
* @brief Stable frame identifier: normalized CAN ID and frame type.
*/
struct FrameKey {
std::uint32_t canId = 0U;
bool isExtended = false;
FrameKey() = default;
FrameKey(std::uint32_t id, bool extended)
: canId(id), isExtended(extended) {
}
bool operator==(const FrameKey &other) const {
return (canId == other.canId) && (isExtended == other.isExtended);
}
};
/**
* @brief Hasher for frame key.
*/
struct FrameKeyHasher {
std::size_t operator()(const FrameKey &key) const {
const std::size_t a = static_cast<std::size_t>(key.canId);
const std::size_t b = key.isExtended ? 1U : 0U;
return (a * 1315423911U) ^ b;
}
};
/** Stable signal identifier within one logical DBC database. */
struct SignalKey {
FrameKey frame;
std::string name;
SignalKey() = default;
SignalKey(FrameKey frameKey, std::string signalName)
: frame(frameKey), name(std::move(signalName)) {
}
bool operator==(const SignalKey &other) const {
return frame == other.frame && name == other.name;
}
};
struct SignalKeyHasher {
std::size_t operator()(const SignalKey &key) const {
return FrameKeyHasher()(key.frame) ^ (std::hash<std::string>()(key.name) << 1U);
}
};
#endif /* DEFINITION_KEY_H */
+38
View File
@@ -0,0 +1,38 @@
/**
* @file frame_info.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef FRAME_INFO_H
#define FRAME_INFO_H
#include <cstdint>
#include <string>
#include <vector>
#include "signal_info.h"
/**
* @brief Describes one CAN frame from a DBC file.
*/
struct FrameInfo {
std::string name; /**< Frame name. */
std::uint32_t canId = 0U; /**< Normalized CAN identifier. */
bool isExtended = false; /**< true for extended frame. */
std::uint32_t pgn = 0U; /**< J1939 PGN if applicable. */
bool hasPgn = false; /**< true if PGN was derived. */
std::uint8_t dlc = 0U; /**< Frame payload length. */
std::string transmitter; /**< Transmitter ECU name. */
std::string comment; /**< Optional frame comment. */
std::vector<SignalInfo> signals; /**< Signals contained in the frame. */
FrameInfo() = default;
};
#endif /* FRAME_INFO_H */
+19
View File
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: MIT
#ifndef MULTIPLEXING_H
#define MULTIPLEXING_H
#include <cstdint>
enum class MultiplexRole {
Unconditional,
Selector,
Branch
};
/** Basic multiplexing: one unsigned selector per frame, one raw value per branch. */
struct Multiplexing {
MultiplexRole role = MultiplexRole::Unconditional;
std::uint64_t value = 0U;
};
#endif
+43
View File
@@ -0,0 +1,43 @@
/**
* @file signal_info.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef SIGNAL_INFO_H
#define SIGNAL_INFO_H
#include "value_descriptions.h"
#include "multiplexing.h"
#include <cstdint>
#include <string>
#include <vector>
/**
* @brief Describes one signal inside a DBC frame.
*/
struct SignalInfo {
Multiplexing multiplexing;
std::string name; /**< Signal name. */
std::uint32_t startBit = 0U; /**< Start bit in DBC notation. */
std::uint32_t length = 0U; /**< Signal length in bits. */
bool isLittleEndian = true; /**< true for Intel, false for Motorola. */
bool isSigned = false; /**< true if signal is signed. */
double factor = 1.0; /**< Scaling factor. */
double offset = 0.0; /**< Physical offset. */
double minimum = 0.0; /**< Minimum physical value. */
double maximum = 0.0; /**< Maximum physical value. */
std::string unit; /**< Physical unit. */
std::vector<std::string> receivers; /**< Signal receivers. */
ValueDescriptions valueDescriptions; /**< Raw integer state descriptions. */
std::string comment; /**< Optional signal comment. */
SignalInfo() = default;
};
#endif /* SIGNAL_INFO_H */
+19
View File
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: MIT
#ifndef SIGNAL_LAYOUT_H
#define SIGNAL_LAYOUT_H
#include <cstdint>
/** Linear coordinate in the signal's bit order, widened before arithmetic. */
inline std::uint64_t SignalStartCoordinate(std::uint32_t startBit, bool littleEndian) {
return littleEndian ? std::uint64_t(startBit)
: std::uint64_t(startBit / 8U) * 8U + 7U - startBit % 8U;
}
inline bool IsValidSignalLayout(std::uint32_t startBit, std::uint32_t length,
bool littleEndian, std::uint8_t dlc) {
return length >= 1U && length <= 64U &&
SignalStartCoordinate(startBit, littleEndian) + length <= std::uint64_t(dlc) * 8U;
}
#endif
+23
View File
@@ -0,0 +1,23 @@
#ifndef DBC_TEXT_UTILS_H
#define DBC_TEXT_UTILS_H
#include <cctype>
#include <string>
namespace dbc_detail {
inline std::string TrimText(const std::string &text) {
std::string::size_type begin = 0U;
while ((begin < text.size()) &&
std::isspace(static_cast<unsigned char>(text[begin])))
++begin;
std::string::size_type end = text.size();
while ((end > begin) &&
std::isspace(static_cast<unsigned char>(text[end - 1U])))
--end;
return text.substr(begin, end - begin);
}
}
#endif
+74
View File
@@ -0,0 +1,74 @@
/**
* @file tree_node.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "tree_node.h"
TreeNode::TreeNode()
: m_type(NodeType::Root), m_name("dbc") {
}
TreeNode::TreeNode(const FrameInfo &frame)
: m_type(NodeType::Frame), m_name(frame.name), m_frame(std::make_unique<FrameInfo>(frame)) {
}
TreeNode::TreeNode(const SignalInfo &signal)
: m_type(NodeType::Signal), m_name(signal.name), m_signal(std::make_unique<SignalInfo>(signal)) {
}
void TreeNode::AddChild(std::unique_ptr<TreeNode> child) {
if (child) {
m_children.push_back(std::move(child));
m_children.back()->m_parent = this;
m_children.back()->m_row = m_children.size() - 1U;
}
}
std::size_t TreeNode::GetChildCount() const {
return m_children.size();
}
const TreeNode *TreeNode::GetChild(std::size_t index) const {
if (index >= m_children.size())
return nullptr;
return m_children[index].get();
}
TreeNode *TreeNode::GetChild(std::size_t index) {
if (index >= m_children.size())
return nullptr;
return m_children[index].get();
}
NodeType TreeNode::GetType() const {
return m_type;
}
const std::string &TreeNode::GetName() const {
return m_name;
}
const FrameInfo *TreeNode::GetFrame() const {
return m_frame.get();
}
const SignalInfo *TreeNode::GetSignal() const {
return m_signal.get();
}
const TreeNode *TreeNode::GetParent() const {
return m_parent;
}
std::size_t TreeNode::GetRow() const {
return m_row;
}
+25 -17
View File
@@ -12,10 +12,10 @@
#ifndef TREE_NODE_H
#define TREE_NODE_H
#include <cstddef>
#include <memory>
#include <string>
#include <vector>
#include <memory>
#include <cstddef>
#include "frame_info.h"
#include "signal_info.h"
@@ -24,16 +24,16 @@
* @brief Type of a tree node.
*/
enum class NodeType {
Root,
Frame,
Signal
Root,
Frame,
Signal
};
/**
* @brief Tree node for later use in model/view or other hierarchy consumers.
*/
class TreeNode {
public:
public:
/**
* @brief Create root node.
*/
@@ -43,27 +43,33 @@ class TreeNode {
* @brief Create frame node.
* @param frame Frame payload.
*/
explicit TreeNode (const FrameInfo &frame);
explicit TreeNode(const FrameInfo &frame);
/**
* @brief Create signal node.
* @param signal Signal payload.
*/
explicit TreeNode (const SignalInfo &signal);
explicit TreeNode(const SignalInfo &signal);
~TreeNode() = default;
TreeNode (const TreeNode &) = delete;
TreeNode &operator= (const TreeNode &) = delete;
TreeNode(const TreeNode &) = delete;
TreeNode &operator=(const TreeNode &) = delete;
TreeNode (TreeNode &&) = default;
TreeNode &operator= (TreeNode &&) = default;
TreeNode(TreeNode &&) = delete;
TreeNode &operator=(TreeNode &&) = delete;
/**
* @brief Add child node.
* @param child Child node to add.
*/
void AddChild (std::unique_ptr<TreeNode> child);
void AddChild(std::unique_ptr<TreeNode> child);
/** Non-owning parent; nullptr for a detached node or the root. */
const TreeNode *GetParent() const;
/** Zero-based sibling position; zero for a detached node or the root. */
std::size_t GetRow() const;
/**
* @brief Get child count.
@@ -76,14 +82,14 @@ class TreeNode {
* @param index Child index.
* @return Child pointer or nullptr if index is invalid.
*/
const TreeNode *GetChild (std::size_t index) const;
const TreeNode *GetChild(std::size_t index) const;
/**
* @brief Get mutable child by index.
* @param index Child index.
* @return Child pointer or nullptr if index is invalid.
*/
TreeNode *GetChild (std::size_t index);
TreeNode *GetChild(std::size_t index);
/**
* @brief Get node type.
@@ -109,10 +115,12 @@ class TreeNode {
*/
const SignalInfo *GetSignal() const;
private:
private:
TreeNode *m_parent = nullptr;
std::size_t m_row = 0U;
NodeType m_type;
std::string m_name;
std::vector<std::unique_ptr<TreeNode> > m_children;
std::vector<std::unique_ptr<TreeNode>> m_children;
std::unique_ptr<FrameInfo> m_frame;
std::unique_ptr<SignalInfo> m_signal;
};
+118
View File
@@ -0,0 +1,118 @@
// SPDX-License-Identifier: MIT
// Copyright (c) 2026 Dim Himro
#ifndef TYPEFACTORY_H
#define TYPEFACTORY_H
#include <memory>
#include <type_traits>
#include <unordered_map>
#include <utility>// std::move
/**
* @brief Registry-based factory for creating objects by runtime identifier.
*
* Allows registering derived types and instantiating them using a ClassId key.
*
* Notes:
* - Not thread-safe. Register types during initialization phase only.
* - Re-registering the same id overwrites the previous entry ("last wins").
* - ClassId must be hashable (std::hash<ClassId> specialization must exist).
*
* @tparam ClassId -Unique class identifier type (e.g. std::string, int, enum).
* @tparam BaseClass -Base type for all created objects.
* @tparam Arg - Constructor arguments forwarded to registered derived types (by value).
*
* Usage example:
* @code
* #include <string>
*
* struct Base {
* virtual ~Base() = default;
* virtual int get() = 0;
* };
*
* struct Derived1 : Base {
* explicit Derived1(int start) : m_start(start) {}
* int get() override { return m_start + 1; }
* int m_start = 0;
* };
*
* struct Derived2 : Base {
* explicit Derived2(int start) : m_start(start) {}
* int get() override { return m_start + 2; }
* int m_start = 0;
* };
*
* TypeFactory<std::string, Base, int> factory;
* factory.registerType<Derived1>("one");
* factory.registerType<Derived2>("two");
*
* std::shared_ptr<Base> a = factory.create("one", 10);
* std::shared_ptr<Base> b = factory.creator("two")(10); // advanced API: get creator function
*
* (void)a->get();
* (void)b->get();
* @endcode
*/
template<class ClassId, class BaseClass, class... Args>
class TypeFactory {
public:
using BasePtr = std::shared_ptr<BaseClass>;
using CreatorFn = BasePtr (*)(Args...);
TypeFactory() = default;
/**
* @brief Registers a Derived type under the given id.
*
* Requirements (checked at compile-time):
* - Derived must inherit from BaseClass
* - Derived must be constructible from Args...
*
* Re-registering the same id overwrites the previous entry ("last wins").
*/
template<class Derived>
void registerType(const ClassId &id) {
static_assert(std::is_base_of_v<BaseClass, Derived>,
"Derived must inherit from BaseClass");
static_assert(std::is_constructible_v<Derived, Args...>,
"Derived must be constructible from Args...");
classes.insert_or_assign(id, &instantiate<Derived>);
}
/**
* @brief Returns creator function for the given id.
* @throws std::out_of_range when id is not registered.
*/
[[nodiscard]] CreatorFn creator(const ClassId &id) const {
return classes.at(id);
}
/**
* @brief Creates an instance for the given id using provided arguments.
* @throws std::out_of_range when id is not registered.
*/
[[nodiscard]] BasePtr create(const ClassId &id, Args... args) const {
return creator(id)(std::move(args)...);
}
/**
* @brief Checks whether an id is registered.
*/
[[nodiscard]] bool contains(const ClassId &id) const {
return classes.find(id) != classes.end();
}
protected:
// Protected by design: derived factories may extend/inspect the registry.
std::unordered_map<ClassId, CreatorFn> classes;
private:
template<class Derived>
static BasePtr instantiate(Args... args) {
return std::make_shared<Derived>(std::move(args)...);
}
};
#endif// TYPEFACTORY_H
+30
View File
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: MIT
#ifndef VALUE_DESCRIPTIONS_H
#define VALUE_DESCRIPTIONS_H
#include <cstdint>
#include <map>
#include <string>
#include <variant>
using RawSignalValue = std::variant<std::int64_t, std::uint64_t>;
/** Canonical keys: negative int64_t, nonnegative uint64_t. */
inline RawSignalValue NormalizeValueKey(const RawSignalValue &value) {
if (const std::int64_t *number = std::get_if<std::int64_t>(&value)) {
if (*number >= 0)
return static_cast<std::uint64_t>(*number);
}
return value;
}
using ValueDescriptions = std::map<RawSignalValue, std::string>;
/** Returns a borrowed string, or nullptr; never converts integers to double. */
inline const std::string *FindValueDescription(const ValueDescriptions &descriptions,
const RawSignalValue &rawValue) {
const ValueDescriptions::const_iterator found = descriptions.find(NormalizeValueKey(rawValue));
return found == descriptions.end() ? nullptr : &found->second;
}
#endif
+12 -23
View File
@@ -1,23 +1,12 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
dbc_decode_builder.cpp \
dbc_decoder.cpp \
dbc_parser.cpp \
dbc_tree_builder.cpp \
main.cpp \
tree_node.cpp
HEADERS += \
dbc_database.h \
dbc_decode_builder.h \
dbc_decoder.h \
dbc_parser.h \
dbc_tree_builder.h \
decode_database.h \
frame_info.h \
signal_info.h \
tree_node.h
TEMPLATE = subdirs
SUBDIRS += core tests
core.subdir = core
tests.subdir = tests
tests.depends = core
contains(CONFIG, dbc_qt) {
SUBDIRS += qt model_tests
qt.subdir = qt
qt.depends = core
model_tests.file = tests/model_tests.pro
model_tests.depends = qt
}
-56
View File
@@ -1,56 +0,0 @@
/**
* @file dbc_decode_builder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_decode_builder.h"
DecodeDatabase DbcDecodeBuilder::Build (const DbcDatabase &source) const {
DecodeDatabase result;
for (std::size_t frameIndex = 0U; frameIndex < source.frames.size(); ++frameIndex) {
const FrameInfo &sourceFrame = source.frames[frameIndex];
DecodeFrame targetFrame;
targetFrame.name = sourceFrame.name;
targetFrame.canId = sourceFrame.canId;
targetFrame.isExtended = sourceFrame.isExtended;
targetFrame.dlc = sourceFrame.dlc;
targetFrame.pgn = sourceFrame.pgn;
targetFrame.hasPgn = sourceFrame.hasPgn;
targetFrame.transmitter = sourceFrame.transmitter;
targetFrame.comment = sourceFrame.comment;
for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
DecodeSignal targetSignal;
targetSignal.name = sourceSignal.name;
targetSignal.startBit = sourceSignal.startBit;
targetSignal.length = sourceSignal.length;
targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
targetSignal.factor = sourceSignal.factor;
targetSignal.offset = sourceSignal.offset;
targetSignal.minimum = sourceSignal.minimum;
targetSignal.maximum = sourceSignal.maximum;
targetSignal.unit = sourceSignal.unit;
targetSignal.receivers = sourceSignal.receivers;
targetSignal.comment = sourceSignal.comment;
targetFrame.signals.push_back (targetSignal);
}
result.frames.push_back (targetFrame);
result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] =
result.frames.size() - 1U;
}
return result;
}
-157
View File
@@ -1,157 +0,0 @@
/**
* @file dbc_decoder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_decoder.h"
const DecodeFrame *DbcDecoder::FindFrame (const DecodeDatabase &database,
std::uint32_t canId,
bool isExtended) const {
const FrameKey key (canId, isExtended);
const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =
database.frameIndexByKey.find (key);
if (it == database.frameIndexByKey.end())
return nullptr;
const std::size_t index = it->second;
if (index >= database.frames.size())
return nullptr;
return &database.frames[index];
}
DecodedFrameValue DbcDecoder::Decode (const DecodeDatabase &database,
const RawCanFrame &frame) const {
DecodedFrameValue result;
const DecodeFrame *definition = FindFrame (database, frame.canId, frame.isExtended);
if (definition == nullptr)
return result;
result.definition = definition;
result.valid = true;
for (std::size_t signalIndex = 0U; signalIndex < definition->signals.size(); ++signalIndex) {
const DecodeSignal &signal = definition->signals[signalIndex];
DecodedSignalValue decoded;
std::uint64_t unsignedValue = 0U;
decoded.definition = &signal;
if (!ExtractUnsigned (frame.data, signal, unsignedValue)) {
decoded.valid = false;
result.signals.push_back (decoded);
continue;
}
if (signal.valueType == ValueType::Signed)
decoded.rawValue = SignExtend (unsignedValue, signal.length);
else
decoded.rawValue = static_cast<std::int64_t> (unsignedValue);
decoded.physicalValue =
(static_cast<double> (decoded.rawValue) * signal.factor) + signal.offset;
decoded.valid = true;
result.signals.push_back (decoded);
}
return result;
}
bool DbcDecoder::ExtractUnsigned (const std::vector<std::uint8_t> &data,
const DecodeSignal &signal,
std::uint64_t &value) {
if ((signal.length == 0U) || (signal.length > 64U))
return false;
if (signal.byteOrder == ByteOrder::Intel)
return ExtractIntel (data, signal.startBit, signal.length, value);
return ExtractMotorola (data, signal.startBit, signal.length, value);
}
bool DbcDecoder::ExtractIntel (const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value) {
value = 0U;
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
const std::uint32_t absoluteBit = startBit + bitIndex;
const std::uint32_t byteIndex = absoluteBit / 8U;
const std::uint32_t bitInByte = absoluteBit % 8U;
if (byteIndex >= data.size())
return false;
const std::uint64_t bitValue =
(static_cast<std::uint64_t> ((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);
value |= bitValue;
}
return true;
}
bool DbcDecoder::ExtractMotorola (const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value) {
/*
* DBC Motorola bit numbering:
* - startBit points to the most significant bit of the signal
* - inside a byte, bit numbering goes 7..0
* - crossing byte boundary moves to the next byte, bit 7
*/
value = 0U;
std::int32_t currentBit = static_cast<std::int32_t> (startBit);
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
if (currentBit < 0)
return false;
const std::uint32_t absoluteBit = static_cast<std::uint32_t> (currentBit);
const std::uint32_t byteIndex = absoluteBit / 8U;
const std::uint32_t bitFromMsb = absoluteBit % 8U;
const std::uint32_t bitInByte = 7U - bitFromMsb;
if (byteIndex >= data.size())
return false;
value <<= 1U;
value |= static_cast<std::uint64_t> ((data[byteIndex] >> bitInByte) & 0x01U);
if ((absoluteBit % 8U) == 7U)
currentBit = static_cast<std::int32_t> ((byteIndex + 1U) * 8U);
else
--currentBit;
}
return true;
}
std::int64_t DbcDecoder::SignExtend (std::uint64_t value, std::uint32_t bitLength) {
if ((bitLength == 0U) || (bitLength >= 64U))
return static_cast<std::int64_t> (value);
const std::uint64_t signMask = (static_cast<std::uint64_t> (1U) << (bitLength - 1U));
const std::uint64_t valueMask = (static_cast<std::uint64_t> (1U) << bitLength) - 1U;
value &= valueMask;
if ((value & signMask) == 0U)
return static_cast<std::int64_t> (value);
return static_cast<std::int64_t> (value | (~valueMask));
}
-110
View File
@@ -1,110 +0,0 @@
/**
* @file dbc_decoder.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DBC_DECODER_H
#define DBC_DECODER_H
#include <vector>
#include <cstdint>
#include "decode_database.h"
/**
* @brief Raw CAN frame used for runtime or trace decoding.
*/
struct RawCanFrame {
std::uint32_t canId; /**< Normalized CAN ID. */
bool isExtended; /**< true for extended frame. */
std::vector<std::uint8_t> data; /**< Payload bytes. */
RawCanFrame()
: canId (0U)
, isExtended (false)
, data() {
}
};
/**
* @brief One decoded signal value.
*/
struct DecodedSignalValue {
const DecodeSignal *definition; /**< Signal definition. */
std::int64_t rawValue; /**< Extracted raw integer value. */
double physicalValue; /**< Converted physical value. */
bool valid; /**< true if decoding succeeded. */
DecodedSignalValue()
: definition (nullptr)
, rawValue (0)
, physicalValue (0.0)
, valid (false) {
}
};
/**
* @brief Fully decoded frame.
*/
struct DecodedFrameValue {
const DecodeFrame *definition; /**< Frame definition. */
std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
bool valid; /**< true if frame was matched. */
DecodedFrameValue()
: definition (nullptr)
, signals()
, valid (false) {
}
};
/**
* @brief Runtime CAN decoder using prebuilt decode database.
*/
class DbcDecoder {
public:
/**
* @brief Find frame definition by CAN ID.
* @param database Runtime decode database.
* @param canId Normalized CAN ID.
* @param isExtended true for extended frame.
* @return Pointer to frame definition or nullptr.
*/
const DecodeFrame *FindFrame (const DecodeDatabase &database,
std::uint32_t canId,
bool isExtended) const;
/**
* @brief Decode one raw CAN frame.
* @param database Runtime decode database.
* @param frame Raw CAN frame.
* @return Decoded frame value.
*/
DecodedFrameValue Decode (const DecodeDatabase &database,
const RawCanFrame &frame) const;
private:
static bool ExtractUnsigned (const std::vector<std::uint8_t> &data,
const DecodeSignal &signal,
std::uint64_t &value);
static bool ExtractIntel (const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value);
static bool ExtractMotorola (const std::vector<std::uint8_t> &data,
std::uint32_t startBit,
std::uint32_t length,
std::uint64_t &value);
static std::int64_t SignExtend (std::uint64_t value, std::uint32_t bitLength);
};
#endif /* DBC_DECODER_H */
-356
View File
@@ -1,356 +0,0 @@
/**
* @file dbc_parser.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_parser.h"
#include <fstream>
#include <sstream>
#include <stdexcept>
#include <cctype>
namespace {
/**
* @brief Remove leading and trailing spaces.
* @param text Input text.
* @return Trimmed text.
*/
std::string TrimText (const std::string &text) {
std::string::size_type begin = 0U;
while ((begin < text.size()) &&
std::isspace (static_cast<unsigned char> (text[begin])))
++begin;
std::string::size_type end = text.size();
while ((end > begin) &&
std::isspace (static_cast<unsigned char> (text[end - 1U])))
--end;
return text.substr (begin, end - begin);
}
}
DbcDatabase DbcParser::ParseFile (const std::string &filePath) const {
std::ifstream input (filePath.c_str());
if (!input.is_open())
throw std::runtime_error ("Failed to open DBC file: " + filePath);
DbcDatabase database;
FrameInfo *currentFrame = nullptr;
std::string line;
while (std::getline (input, line)) {
line = Trim (line);
if (line.empty())
continue;
if (IsFrameLine (line)) {
FrameInfo frame = ParseFrameLine (line);
database.frames.push_back (frame);
currentFrame = &database.frames.back();
} else if (IsSignalLine (line)) {
if (currentFrame == nullptr)
throw std::runtime_error ("Signal found before any frame definition.");
SignalInfo signal = ParseSignalLine (line);
currentFrame->signals.push_back (signal);
} else if (IsCommentLine (line))
ParseCommentLine (line, database);
}
return database;
}
bool DbcParser::IsFrameLine (const std::string &line) {
return (line.size() >= 4U) && (line.compare (0U, 4U, "BO_ ") == 0);
}
bool DbcParser::IsSignalLine (const std::string &line) {
return (line.size() >= 4U) && (line.compare (0U, 4U, "SG_ ") == 0);
}
bool DbcParser::IsCommentLine (const std::string &line) {
return (line.size() >= 4U) && (line.compare (0U, 4U, "CM_ ") == 0);
}
std::string DbcParser::Trim (const std::string &text) {
return TrimText (text);
}
std::vector<std::string> DbcParser::SplitReceivers (const std::string &text) {
std::vector<std::string> receivers;
std::string token;
std::istringstream stream (text);
while (std::getline (stream, token, ',')) {
token = TrimText (token);
if (!token.empty())
receivers.push_back (token);
}
return receivers;
}
void DbcParser::NormalizeCanId (std::uint32_t rawCanId,
std::uint32_t &normalizedCanId,
bool &isExtended) {
/*
* DBC commonly stores extended identifiers with bit 31 set.
* Example:
* raw id = 0x80000000 | actual_29_bit_id
*/
if ((rawCanId & 0x80000000U) != 0U) {
isExtended = true;
normalizedCanId = (rawCanId & 0x1FFFFFFFU);
} else {
isExtended = (rawCanId > 0x7FFU);
normalizedCanId = rawCanId;
}
}
std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn) {
hasPgn = false;
if (!isExtended)
return 0U;
if ((canId & 0x1FFFFFFFU) != canId)
return 0U;
const std::uint32_t pf = (canId >> 16U) & 0xFFU;
const std::uint32_t ps = (canId >> 8U) & 0xFFU;
const std::uint32_t dp = (canId >> 24U) & 0x01U;
std::uint32_t pgn = 0U;
if (pf < 240U)
pgn = (dp << 16U) | (pf << 8U);
else
pgn = (dp << 16U) | (pf << 8U) | ps;
hasPgn = true;
return pgn;
}
FrameInfo DbcParser::ParseFrameLine (const std::string &line) {
/*
* Example:
* BO_ 256 EngineData: 8 EEC1
*/
std::istringstream stream (line);
std::string token;
FrameInfo frame;
std::uint32_t rawCanId = 0U;
stream >> token;
if (token != "BO_")
throw std::runtime_error ("Invalid frame line: " + line);
stream >> rawCanId;
NormalizeCanId (rawCanId, frame.canId, frame.isExtended);
stream >> token;
if (token.empty())
throw std::runtime_error ("Missing frame name: " + line);
if (token[token.size() - 1U] == ':')
token.erase (token.size() - 1U, 1U);
frame.name = token;
{
unsigned int dlcValue = 0U;
stream >> dlcValue;
frame.dlc = static_cast<std::uint8_t> (dlcValue);
}
stream >> frame.transmitter;
frame.pgn = TryExtractPgn (frame.canId, frame.isExtended, frame.hasPgn);
return frame;
}
SignalInfo DbcParser::ParseSignalLine (const std::string &line) {
/*
* Example:
* SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] "rpm" ECU1,ECU2
*/
SignalInfo signal;
std::string work = TrimText (line);
if (work.compare (0U, 4U, "SG_ ") != 0)
throw std::runtime_error ("Invalid signal line: " + line);
work.erase (0U, 4U);
const std::string::size_type colonPos = work.find (':');
if (colonPos == std::string::npos)
throw std::runtime_error ("Signal line missing ':' : " + line);
signal.name = TrimText (work.substr (0U, colonPos));
std::string rest = TrimText (work.substr (colonPos + 1U));
const std::string::size_type pipePos = rest.find ('|');
const std::string::size_type atPos = rest.find ('@');
const std::string::size_type signPos = rest.find_first_of ("+-", atPos);
const std::string::size_type factorBegin = rest.find ('(');
const std::string::size_type factorComma = rest.find (',', factorBegin);
const std::string::size_type factorEnd = rest.find (')', factorComma);
const std::string::size_type rangeBegin = rest.find ('[');
const std::string::size_type rangeSep = rest.find ('|', rangeBegin);
const std::string::size_type rangeEnd = rest.find (']', rangeSep);
const std::string::size_type unitBegin = rest.find ('"', rangeEnd);
const std::string::size_type unitEnd = rest.find ('"', unitBegin + 1U);
if ((pipePos == std::string::npos) ||
(atPos == std::string::npos) ||
(signPos == std::string::npos) ||
(factorBegin == std::string::npos) ||
(factorComma == std::string::npos) ||
(factorEnd == std::string::npos) ||
(rangeBegin == std::string::npos) ||
(rangeSep == std::string::npos) ||
(rangeEnd == std::string::npos) ||
(unitBegin == std::string::npos) ||
(unitEnd == std::string::npos))
throw std::runtime_error ("Unsupported signal syntax: " + line);
signal.startBit = static_cast<std::uint32_t> (
std::stoul (TrimText (rest.substr (0U, pipePos)))
);
signal.length = static_cast<std::uint32_t> (
std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U)))
);
{
if ((atPos + 1U) >= rest.size())
throw std::runtime_error ("Invalid endianness in signal: " + line);
const char endianChar = rest[atPos + 1U];
signal.isLittleEndian = (endianChar == '1');
}
{
const char signChar = rest[signPos];
signal.isSigned = (signChar == '-');
}
signal.factor = std::stod (
TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U))
);
signal.offset = std::stod (
TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U))
);
signal.minimum = std::stod (
TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U))
);
signal.maximum = std::stod (
TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U))
);
signal.unit = rest.substr (unitBegin + 1U, unitEnd - unitBegin - 1U);
{
const std::string receiversText = TrimText (rest.substr (unitEnd + 1U));
signal.receivers = SplitReceivers (receiversText);
}
return signal;
}
void DbcParser::ParseCommentLine (const std::string &line, DbcDatabase &database) {
/*
* Examples:
* CM_ BO_ 256 "Frame comment";
* CM_ SG_ 256 EngineSpeed "Signal comment";
*/
std::istringstream stream (line);
std::string token;
stream >> token;
if (token != "CM_")
return;
stream >> token;
if (token == "BO_") {
std::uint32_t rawCanId = 0U;
std::uint32_t canId = 0U;
bool isExtended = false;
stream >> rawCanId;
NormalizeCanId (rawCanId, canId, isExtended);
const std::string::size_type quoteBegin = line.find ('"');
const std::string::size_type quoteEnd = line.rfind ('"');
if ((quoteBegin == std::string::npos) ||
(quoteEnd == std::string::npos) ||
(quoteEnd <= quoteBegin))
return;
FrameInfo *frame = FindFrameById (database, canId, isExtended);
if (frame != nullptr)
frame->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
} else if (token == "SG_") {
std::uint32_t rawCanId = 0U;
std::uint32_t canId = 0U;
bool isExtended = false;
std::string signalName;
stream >> rawCanId;
stream >> signalName;
NormalizeCanId (rawCanId, canId, isExtended);
const std::string::size_type quoteBegin = line.find ('"');
const std::string::size_type quoteEnd = line.rfind ('"');
if ((quoteBegin == std::string::npos) ||
(quoteEnd == std::string::npos) ||
(quoteEnd <= quoteBegin))
return;
FrameInfo *frame = FindFrameById (database, canId, isExtended);
if (frame != nullptr) {
SignalInfo *signal = FindSignalByName (*frame, signalName);
if (signal != nullptr)
signal->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
}
}
}
FrameInfo *DbcParser::FindFrameById (DbcDatabase &database,
std::uint32_t canId,
bool isExtended) {
for (std::size_t index = 0U; index < database.frames.size(); ++index) {
if ((database.frames[index].canId == canId) &&
(database.frames[index].isExtended == isExtended))
return &database.frames[index];
}
return nullptr;
}
SignalInfo *DbcParser::FindSignalByName (FrameInfo &frame, const std::string &signalName) {
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
if (frame.signals[index].name == signalName)
return &frame.signals[index];
}
return nullptr;
}
-69
View File
@@ -1,69 +0,0 @@
/**
* @file dbc_parser.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DBC_PARSER_H
#define DBC_PARSER_H
#include <string>
#include <vector>
#include <cstdint>
#include "dbc_database.h"
/**
* @brief Minimal DBC parser.
*
* Supports:
* - BO_
* - SG_
* - CM_ BO_
* - CM_ SG_
*
* Ignores:
* - attributes
* - multiplexing
* - value tables
*/
class DbcParser {
public:
/**
* @brief Parse DBC file.
* @param filePath Path to input file.
* @return Parsed database.
* @throws std::runtime_error on file or parse errors.
*/
DbcDatabase ParseFile (const std::string &filePath) const;
private:
static bool IsFrameLine (const std::string &line);
static bool IsSignalLine (const std::string &line);
static bool IsCommentLine (const std::string &line);
static std::string Trim (const std::string &text);
static std::vector<std::string> SplitReceivers (const std::string &text);
static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn);
static void NormalizeCanId (std::uint32_t rawCanId,
std::uint32_t &normalizedCanId,
bool &isExtended);
static FrameInfo ParseFrameLine (const std::string &line);
static SignalInfo ParseSignalLine (const std::string &line);
static void ParseCommentLine (const std::string &line, DbcDatabase &database);
static FrameInfo *FindFrameById (DbcDatabase &database,
std::uint32_t canId,
bool isExtended);
static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName);
};
#endif /* DBC_PARSER_H */
-31
View File
@@ -1,31 +0,0 @@
/**
* @file dbc_tree_builder.cpp
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#include "dbc_tree_builder.h"
std::unique_ptr<TreeNode> DbcTreeBuilder::Build (const DbcDatabase &database) const {
std::unique_ptr<TreeNode> root (new TreeNode());
for (std::size_t frameIndex = 0U; frameIndex < database.frames.size(); ++frameIndex) {
const FrameInfo &frame = database.frames[frameIndex];
std::unique_ptr<TreeNode> frameNode (new TreeNode (frame));
for (std::size_t signalIndex = 0U; signalIndex < frame.signals.size(); ++signalIndex) {
const SignalInfo &signal = frame.signals[signalIndex];
std::unique_ptr<TreeNode> signalNode (new TreeNode (signal));
frameNode->AddChild (std::move (signalNode));
}
root->AddChild (std::move (frameNode));
}
return root;
}
-137
View File
@@ -1,137 +0,0 @@
/**
* @file decode_database.h
* @brief
*
* Created: 2026-03-13
* Author: Deeaitch (Dim. Himro)
*
* Licensed under the MIT License.
* See LICENSE file in the project root for full license text.
*/
#ifndef DECODE_DATABASE_H
#define DECODE_DATABASE_H
#include <string>
#include <vector>
#include <unordered_map>
#include <cstdint>
/**
* @brief Signal byte order used for runtime decoding.
*/
enum class ByteOrder {
Intel,
Motorola
};
/**
* @brief Signal numeric type.
*/
enum class ValueType {
Unsigned,
Signed
};
/**
* @brief Runtime-ready signal definition.
*/
struct DecodeSignal {
std::string name; /**< Signal name. */
std::uint32_t startBit; /**< DBC start bit. */
std::uint32_t length; /**< Signal length in bits. */
ByteOrder byteOrder; /**< Intel or Motorola. */
ValueType valueType; /**< Signed or unsigned. */
double factor; /**< Scaling factor. */
double offset; /**< Physical offset. */
double minimum; /**< Minimum physical value. */
double maximum; /**< Maximum physical value. */
std::string unit; /**< Physical unit. */
std::vector<std::string> receivers; /**< Receivers. */
std::string comment; /**< Comment. */
DecodeSignal()
: name()
, startBit (0U)
, length (0U)
, byteOrder (ByteOrder::Intel)
, valueType (ValueType::Unsigned)
, factor (1.0)
, offset (0.0)
, minimum (0.0)
, maximum (0.0)
, unit()
, receivers()
, comment() {
}
};
/**
* @brief Runtime-ready frame definition.
*/
struct DecodeFrame {
std::string name; /**< Frame name. */
std::uint32_t canId; /**< Normalized CAN ID. */
bool isExtended; /**< true for extended frame. */
std::uint8_t dlc; /**< Payload length. */
std::uint32_t pgn; /**< PGN if available. */
bool hasPgn; /**< true if PGN is valid. */
std::string transmitter; /**< Transmitter ECU. */
std::string comment; /**< Frame comment. */
std::vector<DecodeSignal> signals; /**< Signal definitions. */
DecodeFrame()
: name()
, canId (0U)
, isExtended (false)
, dlc (0U)
, pgn (0U)
, hasPgn (false)
, transmitter()
, comment()
, signals() {
}
};
/**
* @brief Key for fast frame lookup.
*/
struct FrameKey {
std::uint32_t canId;
bool isExtended;
FrameKey()
: canId (0U)
, isExtended (false) {
}
FrameKey (std::uint32_t id, bool extended)
: canId (id)
, isExtended (extended) {
}
bool operator== (const FrameKey &other) const {
return (canId == other.canId) && (isExtended == other.isExtended);
}
};
/**
* @brief Hasher for frame key.
*/
struct FrameKeyHasher {
std::size_t operator() (const FrameKey &key) const {
const std::size_t a = static_cast<std::size_t> (key.canId);
const std::size_t b = key.isExtended ? 1U : 0U;
return (a * 1315423911U) ^ b;
}
};
/**
* @brief Runtime decode database with fast lookup by CAN ID.
*/
struct DecodeDatabase {
std::vector<DecodeFrame> frames;
std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
};
#endif /* DECODE_DATABASE_H */
+270 -52
View File
@@ -1,78 +1,86 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<tagfile doxygen_version="1.9.4">
<tagfile doxygen_version="1.9.8">
<compound kind="file">
<name>dbc_database.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__database_8h.html</filename>
<includes id="frame__info_8h" name="frame_info.h" local="yes" imported="no">frame_info.h</includes>
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
<class kind="struct">DbcDatabase</class>
</compound>
<compound kind="file">
<name>dbc_decode_builder.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__decode__builder_8cpp.html</filename>
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" imported="no">dbc_decode_builder.h</includes>
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
</compound>
<compound kind="file">
<name>dbc_decode_builder.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__decode__builder_8h.html</filename>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
<includes id="decode__database_8h" name="decode_database.h" local="yes" imported="no">decode_database.h</includes>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
<class kind="class">DbcDecodeBuilder</class>
</compound>
<compound kind="file">
<name>dbc_decoder.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__decoder_8cpp.html</filename>
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" imported="no">dbc_decoder.h</includes>
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
</compound>
<compound kind="file">
<name>dbc_decoder.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__decoder_8h.html</filename>
<includes id="decode__database_8h" name="decode_database.h" local="yes" imported="no">decode_database.h</includes>
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
<class kind="struct">RawCanFrame</class>
<class kind="struct">DecodedSignalValue</class>
<class kind="struct">DecodedFrameValue</class>
<class kind="class">DbcDecoder</class>
<member kind="enumeration">
<type></type>
<name>FrameDecodeStatus</name>
<anchorfile>dbc__decoder_8h.html</anchorfile>
<anchor>a855b2bc36cb18bfbae5ff30a2394e961</anchor>
<arglist></arglist>
<enumvalue file="dbc__decoder_8h.html" anchor="a855b2bc36cb18bfbae5ff30a2394e961a85f5d387f9a01dce258470e1a5a23332">UnknownFrame</enumvalue>
<enumvalue file="dbc__decoder_8h.html" anchor="a855b2bc36cb18bfbae5ff30a2394e961a7c9fa088a1e7db1fc83cb62aefd3ea7f">InsufficientPayload</enumvalue>
<enumvalue file="dbc__decoder_8h.html" anchor="a855b2bc36cb18bfbae5ff30a2394e961aedeb8da96660592dfe0853f212b77469">SignalErrors</enumvalue>
<enumvalue file="dbc__decoder_8h.html" anchor="a855b2bc36cb18bfbae5ff30a2394e961a3ac705f2acd51a4613f9188c05c91d0d">Valid</enumvalue>
</member>
</compound>
<compound kind="file">
<name>dbc_parser.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__parser_8cpp.html</filename>
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" imported="no">dbc_parser.h</includes>
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
</compound>
<compound kind="file">
<name>dbc_parser.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__parser_8h.html</filename>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
<class kind="class">DbcParser</class>
</compound>
<compound kind="file">
<name>dbc_tree_builder.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__tree__builder_8cpp.html</filename>
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" imported="no">dbc_tree_builder.h</includes>
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
</compound>
<compound kind="file">
<name>dbc_tree_builder.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>dbc__tree__builder_8h.html</filename>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
<includes id="tree__node_8h" name="tree_node.h" local="yes" imported="no">tree_node.h</includes>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
<class kind="class">DbcTreeBuilder</class>
</compound>
<compound kind="file">
<name>decode_database.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>decode__database_8h.html</filename>
<class kind="struct">DecodeSignal</class>
<class kind="struct">DecodeFrame</class>
<class kind="struct">FrameKey</class>
<class kind="struct">FrameKeyHasher</class>
<class kind="struct">DecodeDatabase</class>
<class kind="class">DecodeDatabase</class>
<member kind="enumeration">
<type></type>
<name>ByteOrder</name>
@@ -94,38 +102,29 @@
</compound>
<compound kind="file">
<name>frame_info.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>frame__info_8h.html</filename>
<includes id="signal__info_8h" name="signal_info.h" local="yes" imported="no">signal_info.h</includes>
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
<class kind="struct">FrameInfo</class>
</compound>
<compound kind="file">
<name>main.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<filename>main_8cpp.html</filename>
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" imported="no">dbc_parser.h</includes>
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" imported="no">dbc_tree_builder.h</includes>
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" imported="no">dbc_decode_builder.h</includes>
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" imported="no">dbc_decoder.h</includes>
</compound>
<compound kind="file">
<name>signal_info.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>signal__info_8h.html</filename>
<class kind="struct">SignalInfo</class>
</compound>
<compound kind="file">
<name>tree_node.cpp</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>tree__node_8cpp.html</filename>
<includes id="tree__node_8h" name="tree_node.h" local="yes" imported="no">tree_node.h</includes>
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
</compound>
<compound kind="file">
<name>tree_node.h</name>
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
<path>core/</path>
<filename>tree__node_8h.html</filename>
<includes id="frame__info_8h" name="frame_info.h" local="yes" imported="no">frame_info.h</includes>
<includes id="signal__info_8h" name="signal_info.h" local="yes" imported="no">signal_info.h</includes>
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
<class kind="class">TreeNode</class>
<member kind="enumeration">
<type></type>
@@ -138,6 +137,20 @@
<enumvalue file="tree__node_8h.html" anchor="acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398">Signal</enumvalue>
</member>
</compound>
<compound kind="file">
<name>examples/main.cpp</name>
<path>examples/</path>
<filename>examples_2main_8cpp.html</filename>
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
</compound>
<compound kind="class">
<name>DbcCommentHandler</name>
<filename>classDbcCommentHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="struct">
<name>DbcDatabase</name>
<filename>structDbcDatabase.html</filename>
@@ -164,10 +177,10 @@
<name>DbcDecoder</name>
<filename>classDbcDecoder.html</filename>
<member kind="function">
<type>const DecodeFrame *</type>
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>FindFrame</name>
<anchorfile>classDbcDecoder.html</anchorfile>
<anchor>ab2cfb2fb711c95d3a29365546b89f3da</anchor>
<anchor>a4005c4311f57b7faf21c0cb31463039c</anchor>
<arglist>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</arglist>
</member>
<member kind="function">
@@ -178,6 +191,28 @@
<arglist>(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</arglist>
</member>
</compound>
<compound kind="struct">
<name>DbcDiagnostic</name>
<filename>structDbcDiagnostic.html</filename>
</compound>
<compound kind="class">
<name>DbcDiagnosticError</name>
<filename>classDbcDiagnosticError.html</filename>
</compound>
<compound kind="class">
<name>DbcFrameHandler</name>
<filename>classDbcFrameHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="class">
<name>DbcHeaderHandler</name>
<filename>classDbcHeaderHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="struct">
<name>DbcParseContext</name>
<filename>structDbcParseContext.html</filename>
</compound>
<compound kind="class">
<name>DbcParser</name>
<filename>classDbcParser.html</filename>
@@ -188,6 +223,37 @@
<anchor>aef72826942c9095d653fafa435855e56</anchor>
<arglist>(const std::string &amp;filePath) const</arglist>
</member>
<member kind="function">
<type>DbcParseResult</type>
<name>ParseFileWithDiagnostics</name>
<anchorfile>classDbcParser.html</anchorfile>
<anchor>a0e915ce79c2e3d4c95a5aaf2bf0409bc</anchor>
<arglist>(const std::string &amp;filePath) const</arglist>
</member>
</compound>
<compound kind="struct">
<name>DbcParseResult</name>
<filename>structDbcParseResult.html</filename>
</compound>
<compound kind="class">
<name>DbcSignalHandler</name>
<filename>classDbcSignalHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="class">
<name>DbcStatementDispatcher</name>
<filename>classDbcStatementDispatcher.html</filename>
<member kind="function">
<type>bool</type>
<name>Dispatch</name>
<anchorfile>classDbcStatementDispatcher.html</anchorfile>
<anchor>a495c2d5c7ebb8103b1987cdd87c142ed</anchor>
<arglist>(const std::string &amp;line, DbcParseContext &amp;context) const</arglist>
</member>
</compound>
<compound kind="class">
<name>DbcStatementHandler</name>
<filename>classDbcStatementHandler.html</filename>
</compound>
<compound kind="class">
<name>DbcTreeBuilder</name>
@@ -200,18 +266,60 @@
<arglist>(const DbcDatabase &amp;database) const</arglist>
</member>
</compound>
<compound kind="struct">
<compound kind="class">
<name>DbcTreeModel</name>
<filename>classDbcTreeModel.html</filename>
</compound>
<compound kind="class">
<name>DbcUnsupportedMultiplexingHandler</name>
<filename>classDbcUnsupportedMultiplexingHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="class">
<name>DbcValueDescriptionHandler</name>
<filename>classDbcValueDescriptionHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="class">
<name>DecodeDatabase</name>
<filename>structDecodeDatabase.html</filename>
<filename>classDecodeDatabase.html</filename>
<member kind="function">
<type></type>
<name>DecodeDatabase</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>a51a44cf7c3f23c98ec8781afe0097c0c</anchor>
<arglist>(const std::vector&lt; DecodeFrame &gt; &amp;frames)</arglist>
</member>
<member kind="function">
<type>const std::vector&lt; DecodeFrame &gt; &amp;</type>
<name>GetFrames</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>aa034c1510984a85f60ad6c0bd744d6e8</anchor>
<arglist>() const</arglist>
</member>
<member kind="function">
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>FindFrame</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>a780d6e747a48b10a5eb0ab85448d2970</anchor>
<arglist>(const FrameKey &amp;key) const</arglist>
</member>
</compound>
<compound kind="struct">
<name>DecodedFrameValue</name>
<filename>structDecodedFrameValue.html</filename>
<member kind="variable">
<type>const DecodeFrame *</type>
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>definition</name>
<anchorfile>structDecodedFrameValue.html</anchorfile>
<anchor>a60dda1cc352d2c8087f0bdbc81dd266c</anchor>
<anchor>a33e971ba10030506007aa201c89f351d</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>FrameKey</type>
<name>key</name>
<anchorfile>structDecodedFrameValue.html</anchorfile>
<anchor>a32143efe2023a1ecd977a9ae93e50b73</anchor>
<arglist></arglist>
</member>
<member kind="variable">
@@ -228,22 +336,43 @@
<anchor>a4f51c31110dba1f73a763c596372beb0</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>FrameDecodeStatus</type>
<name>status</name>
<anchorfile>structDecodedFrameValue.html</anchorfile>
<anchor>a645f433798d48a2787e7f00dfbb7dff9</anchor>
<arglist></arglist>
</member>
</compound>
<compound kind="struct">
<name>DecodedSignalValue</name>
<filename>structDecodedSignalValue.html</filename>
<member kind="function">
<type>const std::string *</type>
<name>GetValueDescription</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>affc38af1bf31bcb6f2c33044bce92bd2</anchor>
<arglist>() const</arglist>
</member>
<member kind="variable">
<type>const DecodeSignal *</type>
<type>std::shared_ptr&lt; const DecodeSignal &gt;</type>
<name>definition</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>acadc3b3bb21dd6b0412d342c7e6b20d7</anchor>
<anchor>a828b5ef7faefc14fbf5dbd46249bcad2</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>std::int64_t</type>
<type>SignalKey</type>
<name>key</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>a33df0fcd92b23b3e08539906fc6b4c4a</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>RawSignalValue</type>
<name>rawValue</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>a5138b825940e34689f7b3891627ee9ec</anchor>
<anchor>a503c90b4b1a610b8252c45e466367c28</anchor>
<arglist></arglist>
</member>
<member kind="variable">
@@ -408,6 +537,13 @@
<anchor>abdbae62a64d2df716bf60c6b67b30eaa</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>ValueDescriptions</type>
<name>valueDescriptions</name>
<anchorfile>structDecodeSignal.html</anchorfile>
<anchor>a822155d9bf4ed5f3300c9e9befe606ff</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>std::string</type>
<name>comment</name>
@@ -491,6 +627,14 @@
<name>FrameKeyHasher</name>
<filename>structFrameKeyHasher.html</filename>
</compound>
<compound kind="struct">
<name>Multiplexing</name>
<filename>structMultiplexing.html</filename>
</compound>
<compound kind="struct">
<name>PendingValueDescriptions</name>
<filename>structPendingValueDescriptions.html</filename>
</compound>
<compound kind="struct">
<name>RawCanFrame</name>
<filename>structRawCanFrame.html</filename>
@@ -596,6 +740,13 @@
<anchor>a2c95562fd0b29327a7fd7b1e6feee7f3</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>ValueDescriptions</type>
<name>valueDescriptions</name>
<anchorfile>structSignalInfo.html</anchorfile>
<anchor>a43f47d0433d0cc39076bd7278b46af9c</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>std::string</type>
<name>comment</name>
@@ -604,6 +755,14 @@
<arglist></arglist>
</member>
</compound>
<compound kind="struct">
<name>SignalKey</name>
<filename>structSignalKey.html</filename>
</compound>
<compound kind="struct">
<name>SignalKeyHasher</name>
<filename>structSignalKeyHasher.html</filename>
</compound>
<compound kind="class">
<name>TreeNode</name>
<filename>classTreeNode.html</filename>
@@ -635,6 +794,20 @@
<anchor>a6161f2ebb92184eab4215d121870e788</anchor>
<arglist>(std::unique_ptr&lt; TreeNode &gt; child)</arglist>
</member>
<member kind="function">
<type>const TreeNode *</type>
<name>GetParent</name>
<anchorfile>classTreeNode.html</anchorfile>
<anchor>aa48fbc17903eb8cfa40353e29f853c6f</anchor>
<arglist>() const</arglist>
</member>
<member kind="function">
<type>std::size_t</type>
<name>GetRow</name>
<anchorfile>classTreeNode.html</anchorfile>
<anchor>ad501f97eeec7f7d3353bfae838fbb6a8</anchor>
<arglist>() const</arglist>
</member>
<member kind="function">
<type>std::size_t</type>
<name>GetChildCount</name>
@@ -685,9 +858,54 @@
<arglist>() const</arglist>
</member>
</compound>
<compound kind="class">
<name>TypeFactory</name>
<filename>classTypeFactory.html</filename>
<templarg>class ClassId</templarg>
<templarg>class BaseClass</templarg>
<templarg>class... Args</templarg>
<member kind="function">
<type>void</type>
<name>registerType</name>
<anchorfile>classTypeFactory.html</anchorfile>
<anchor>ad6d85795285ee21193ac03e1b24762d3</anchor>
<arglist>(const ClassId &amp;id)</arglist>
</member>
<member kind="function">
<type>CreatorFn</type>
<name>creator</name>
<anchorfile>classTypeFactory.html</anchorfile>
<anchor>ad82f537569ece3d3a4a376523fa94473</anchor>
<arglist>(const ClassId &amp;id) const</arglist>
</member>
<member kind="function">
<type>BasePtr</type>
<name>create</name>
<anchorfile>classTypeFactory.html</anchorfile>
<anchor>a3f43b03d6e3a0fd503fdec01ecf62e9f</anchor>
<arglist>(const ClassId &amp;id, Args... args) const</arglist>
</member>
<member kind="function">
<type>bool</type>
<name>contains</name>
<anchorfile>classTypeFactory.html</anchorfile>
<anchor>a1a119ad2956abe146213c6ca124d8dd4</anchor>
<arglist>(const ClassId &amp;id) const</arglist>
</member>
</compound>
<compound kind="page">
<name>md_changelog</name>
<title>Changelog</title>
<filename>md_changelog.html</filename>
</compound>
<compound kind="page">
<name>md_README</name>
<title>DBC Parser and Runtime Decode Module Documentation</title>
<filename>md_README.html</filename>
</compound>
<compound kind="page">
<name>md_tests_2README</name>
<title>QtTest regression tests</title>
<filename>md_tests_2README.html</filename>
</compound>
</tagfile>
+75 -10
View File
@@ -1,10 +1,75 @@
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/main.cpp:97: warning: Member main(int argc, char *argv[]) (function) of file main.cpp is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:133: warning: Member frames (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:134: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:108: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:113: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:100: warning: Member canId (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member isExtended (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:122: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:66: warning: Compound DbcCommentHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:25: warning: Compound DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:50: warning: Compound DbcFrameHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:33: warning: Compound DbcParseResult is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:58: warning: Compound DbcSignalHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:44: warning: Compound DbcStatementHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:79: warning: Compound DbcUnsupportedMultiplexingHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:74: warning: Compound DbcValueDescriptionHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:12: warning: Compound PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:56: warning: Compound SignalKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:32: warning: Member SignalDecodeStatus (enumeration) of file dbc_decoder.h is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/examples/main.cpp:100: warning: Member main(int argc, char *argv[]) (function) of file examples/main.cpp is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/README.md:1627: warning: end of comment block while expecting command </tt>
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:68: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:26: warning: Member severity (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:27: warning: Member code (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:28: warning: Member filePath (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:29: warning: Member lineNumber (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:30: warning: Member message (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:23: warning: Member DbcDiagnosticError(DbcDiagnosticCode code, const std::string &filePath, std::size_t lineNumber, const std::string &message) (function) of class DbcDiagnosticError is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:28: warning: Member diagnostic (variable) of class DbcDiagnosticError is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:52: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcFrameHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:87: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcHeaderHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:39: warning: Member ValidateMultiplexing(const std::string &filePath) const (function) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:41: warning: Member ResolveValueDescriptions(const std::string &filePath) (function) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:33: warning: Member database (variable) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:34: warning: Member currentFrame (variable) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:35: warning: Member lineNumber (variable) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:36: warning: Member pendingValues (variable) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:38: warning: Member signalLines (variable) of struct DbcParseContext is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:37: warning: Member HasErrors() const (function) of struct DbcParseResult is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:34: warning: Member database (variable) of struct DbcParseResult is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:35: warning: Member diagnostics (variable) of struct DbcParseResult is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:60: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcSignalHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:96: warning: Member RegisterType(const std::string &keyword) (function) of class DbcStatementDispatcher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:47: warning: Member Handle(const std::string &line, DbcParseContext &context) const =0 (function) of class DbcStatementHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:13: warning: Member Column (enumeration) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:24: warning: Member Role (enumeration) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:36: warning: Member DbcTreeModel(QObject *parent=nullptr) (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:37: warning: Member SetTree(std::unique_ptr< TreeNode > root) (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:38: warning: Member index(int row, int column, const QModelIndex &parent=QModelIndex()) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:39: warning: Member parent(const QModelIndex &child) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:40: warning: Member rowCount(const QModelIndex &parent=QModelIndex()) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:41: warning: Member columnCount(const QModelIndex &parent=QModelIndex()) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:42: warning: Member data(const QModelIndex &index, int role=Qt::DisplayRole) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:43: warning: Member headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:44: warning: Member flags(const QModelIndex &index) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:81: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcUnsupportedMultiplexingHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:76: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcValueDescriptionHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:101: warning: Member FindSignal(const SignalKey &key) const (function) of class DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:58: warning: Member status (variable) of struct DecodedSignalValue is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:78: warning: Member GetKey() const (function) of struct DecodeFrame is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:44: warning: Member multiplexing (variable) of struct DecodeSignal is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:21: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:25: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:16: warning: Member canId (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:17: warning: Member isExtended (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:34: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/multiplexing.h:15: warning: Member role (variable) of struct Multiplexing is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/multiplexing.h:16: warning: Member value (variable) of struct Multiplexing is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:13: warning: Member canId (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:14: warning: Member isExtended (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:15: warning: Member signalName (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:16: warning: Member descriptions (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:17: warning: Member lineNumber (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h:25: warning: Member multiplexing (variable) of struct SignalInfo is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:47: warning: Member SignalKey(FrameKey frameKey, std::string signalName) (function) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:51: warning: Member operator==(const SignalKey &other) const (function) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:43: warning: Member frame (variable) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:44: warning: Member name (variable) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:57: warning: Member operator()(const SignalKey &key) const (function) of struct SignalKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented.
error: failed to run qhelpgenerator on index.qhp
+49 -24
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -88,22 +95,40 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcDatabase.html" target="_self">DbcDatabase</a></td><td class="desc">Parsed DBC content stored in a simple internal form </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecodeBuilder.html" target="_self">DbcDecodeBuilder</a></td><td class="desc">Converts parsed DBC data into runtime decode database </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecoder.html" target="_self">DbcDecoder</a></td><td class="desc">Runtime CAN decoder using prebuilt decode database </td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcParser.html" target="_self">DbcParser</a></td><td class="desc">Minimal DBC parser </td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcCommentHandler.html" target="_self">DbcCommentHandler</a></td><td class="desc"></td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcDatabase.html" target="_self">DbcDatabase</a></td><td class="desc">Parsed DBC content stored in a simple internal form </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecodeBuilder.html" target="_self">DbcDecodeBuilder</a></td><td class="desc">Converts parsed DBC data into runtime decode database </td></tr>
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecoder.html" target="_self">DbcDecoder</a></td><td class="desc">Runtime CAN decoder using prebuilt decode database </td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcDiagnostic.html" target="_self">DbcDiagnostic</a></td><td class="desc"></td></tr>
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDiagnosticError.html" target="_self">DbcDiagnosticError</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcFrameHandler.html" target="_self">DbcFrameHandler</a></td><td class="desc"></td></tr>
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcHeaderHandler.html" target="_self">DbcHeaderHandler</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcParseContext.html" target="_self">DbcParseContext</a></td><td class="desc"></td></tr>
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcParser.html" target="_self">DbcParser</a></td><td class="desc">Minimal DBC parser </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcParseResult.html" target="_self">DbcParseResult</a></td><td class="desc"></td></tr>
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcSignalHandler.html" target="_self">DbcSignalHandler</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcStatementDispatcher.html" target="_self">DbcStatementDispatcher</a></td><td class="desc"></td></tr>
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcStatementHandler.html" target="_self">DbcStatementHandler</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </td></tr>
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeModel.html" target="_self">DbcTreeModel</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcUnsupportedMultiplexingHandler.html" target="_self">DbcUnsupportedMultiplexingHandler</a></td><td class="desc"></td></tr>
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcValueDescriptionHandler.html" target="_self">DbcValueDescriptionHandler</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive </td></tr>
<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </td></tr>
<tr id="row_23_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Stable frame identifier: normalized CAN ID and frame type </td></tr>
<tr id="row_25_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structMultiplexing.html" target="_self">Multiplexing</a></td><td class="desc"></td></tr>
<tr id="row_27_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structPendingValueDescriptions.html" target="_self">PendingValueDescriptions</a></td><td class="desc"></td></tr>
<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
<tr id="row_29_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKey.html" target="_self">SignalKey</a></td><td class="desc"></td></tr>
<tr id="row_31_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKeyHasher.html" target="_self">SignalKeyHasher</a></td><td class="desc"></td></tr>
<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_33_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
@@ -111,7 +136,7 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+20 -2
View File
@@ -1,11 +1,24 @@
var annotated_dup =
[
[ "DbcCommentHandler", "classDbcCommentHandler.html", null ],
[ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ],
[ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ],
[ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ],
[ "DbcDiagnostic", "structDbcDiagnostic.html", null ],
[ "DbcDiagnosticError", "classDbcDiagnosticError.html", null ],
[ "DbcFrameHandler", "classDbcFrameHandler.html", null ],
[ "DbcHeaderHandler", "classDbcHeaderHandler.html", null ],
[ "DbcParseContext", "structDbcParseContext.html", null ],
[ "DbcParser", "classDbcParser.html", "classDbcParser" ],
[ "DbcParseResult", "structDbcParseResult.html", null ],
[ "DbcSignalHandler", "classDbcSignalHandler.html", null ],
[ "DbcStatementDispatcher", "classDbcStatementDispatcher.html", "classDbcStatementDispatcher" ],
[ "DbcStatementHandler", "classDbcStatementHandler.html", null ],
[ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ],
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
[ "DbcTreeModel", "classDbcTreeModel.html", null ],
[ "DbcUnsupportedMultiplexingHandler", "classDbcUnsupportedMultiplexingHandler.html", null ],
[ "DbcValueDescriptionHandler", "classDbcValueDescriptionHandler.html", null ],
[ "DecodeDatabase", "classDecodeDatabase.html", "classDecodeDatabase" ],
[ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ],
[ "DecodedSignalValue", "structDecodedSignalValue.html", "structDecodedSignalValue" ],
[ "DecodeFrame", "structDecodeFrame.html", "structDecodeFrame" ],
@@ -13,7 +26,12 @@ var annotated_dup =
[ "FrameInfo", "structFrameInfo.html", "structFrameInfo" ],
[ "FrameKey", "structFrameKey.html", null ],
[ "FrameKeyHasher", "structFrameKeyHasher.html", null ],
[ "Multiplexing", "structMultiplexing.html", null ],
[ "PendingValueDescriptions", "structPendingValueDescriptions.html", null ],
[ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ],
[ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ],
[ "TreeNode", "classTreeNode.html", "classTreeNode" ]
[ "SignalKey", "structSignalKey.html", null ],
[ "SignalKeyHasher", "structSignalKeyHasher.html", null ],
[ "TreeNode", "classTreeNode.html", "classTreeNode" ],
[ "TypeFactory", "classTypeFactory.html", "classTypeFactory" ]
];
Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcCommentHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcCommentHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const override (defined in <a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a>)</td><td class="entry"><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+170
View File
@@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcCommentHandler Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcCommentHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcCommentHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcCommentHandler Class Reference</div></div>
</div><!--header-->
<div class="contents">
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcCommentHandler:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcCommentHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa4fce77b585a441d251d8535ef7a51a6" id="r_aa4fce77b585a441d251d8535ef7a51a6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:aa4fce77b585a441d251d8535ef7a51a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00066">66</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="aa4fce77b585a441d251d8535ef7a51a6" name="aa4fce77b585a441d251d8535ef7a51a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4fce77b585a441d251d8535ef7a51a6">&#9670;&#160;</a></span>Handle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DbcCommentHandler::Handle </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>line</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00367">367</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<map id="DbcCommentHandler" name="DbcCommentHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="25,139,179,204"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
</map>
@@ -0,0 +1 @@
031e88596ad00375d87ac04af33f405c
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcCommentHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcCommentHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="130.5,-49 14.5,-49 14.5,0 130.5,0 130.5,-49"/>
<text text-anchor="start" x="19.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="31.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="14.5,-31.5 14.5,-31.5 130.5,-31.5 130.5,-31.5 14.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="14.5,-16.5 14.5,-16.5 130.5,-16.5 130.5,-16.5 14.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="14.5,0 14.5,-49 130.5,-49 130.5,0 14.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcCommentHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcCommentHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="130.5,-49 14.5,-49 14.5,0 130.5,0 130.5,-49"/>
<text text-anchor="start" x="19.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="31.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="14.5,-31.5 14.5,-31.5 130.5,-31.5 130.5,-31.5 14.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="14.5,-16.5 14.5,-16.5 130.5,-16.5 130.5,-16.5 14.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="14.5,0 14.5,-49 130.5,-49 130.5,0 14.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

+15 -8
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+29 -16
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcDecodeBuilder Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -97,23 +104,23 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) const</td></tr>
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build runtime decode database. <a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">More...</a><br /></td></tr>
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b" id="r_a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) const</td></tr>
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build runtime decode database. <br /></td></tr>
<tr class="separator:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Converts parsed DBC data into runtime decode database. </p>
<div class="textblock"><p>Converts parsed DBC data into runtime decode database. </p>
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8h_source.html#l00021">21</a> of file <a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a2bc6386dfb5e58976c42e22c19ec471b" name="a2bc6386dfb5e58976c42e22c19ec471b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2bc6386dfb5e58976c42e22c19ec471b">&#9670;&nbsp;</a></span>Build()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2bc6386dfb5e58976c42e22c19ec471b">&#9670;&#160;</a></span>Build()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> DbcDecodeBuilder::Build </td>
<td class="memname"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> DbcDecodeBuilder::Build </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
@@ -129,11 +136,17 @@ Public Member Functions</h2></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Runtime-ready decode database. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Immutable runtime snapshot independent of source lifetime. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::invalid_argument</td><td>for invalid metadata or duplicate keys. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00015">15</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00043">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00074">DecodeFrame::canId</a>, <a class="el" href="frame__info_8h_source.html#l00026">FrameInfo::canId</a>, <a class="el" href="decode__database_8h_source.html#l00080">DecodeFrame::comment</a>, <a class="el" href="frame__info_8h_source.html#l00032">FrameInfo::comment</a>, <a class="el" href="decode__database_8h_source.html#l00076">DecodeFrame::dlc</a>, <a class="el" href="frame__info_8h_source.html#l00030">FrameInfo::dlc</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00078">DecodeFrame::hasPgn</a>, <a class="el" href="frame__info_8h_source.html#l00029">FrameInfo::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00075">DecodeFrame::isExtended</a>, <a class="el" href="frame__info_8h_source.html#l00027">FrameInfo::isExtended</a>, <a class="el" href="signal__info_8h_source.html#l00026">SignalInfo::isLittleEndian</a>, <a class="el" href="decode__database_8h_source.html#l00042">DecodeSignal::length</a>, <a class="el" href="signal__info_8h_source.html#l00025">SignalInfo::length</a>, <a class="el" href="decode__database_8h_source.html#l00040">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00073">DecodeFrame::name</a>, <a class="el" href="frame__info_8h_source.html#l00025">FrameInfo::name</a>, <a class="el" href="signal__info_8h_source.html#l00023">SignalInfo::name</a>, <a class="el" href="decode__database_8h_source.html#l00077">DecodeFrame::pgn</a>, <a class="el" href="frame__info_8h_source.html#l00028">FrameInfo::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00041">DecodeSignal::startBit</a>, <a class="el" href="signal__info_8h_source.html#l00024">SignalInfo::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00079">DecodeFrame::transmitter</a>, and <a class="el" href="frame__info_8h_source.html#l00031">FrameInfo::transmitter</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00048">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00067">DecodeFrame::canId</a>, <a class="el" href="decode__database_8h_source.html#l00057">DecodeSignal::comment</a>, <a class="el" href="decode__database_8h_source.html#l00073">DecodeFrame::comment</a>, <a class="el" href="decode__database_8h_source.html#l00069">DecodeFrame::dlc</a>, <a class="el" href="decode__database_8h_source.html#l00050">DecodeSignal::factor</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00071">DecodeFrame::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00068">DecodeFrame::isExtended</a>, <a class="el" href="decode__database_8h_source.html#l00047">DecodeSignal::length</a>, <a class="el" href="decode__database_8h_source.html#l00053">DecodeSignal::maximum</a>, <a class="el" href="decode__database_8h_source.html#l00052">DecodeSignal::minimum</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00066">DecodeFrame::name</a>, <a class="el" href="decode__database_8h_source.html#l00051">DecodeSignal::offset</a>, <a class="el" href="decode__database_8h_source.html#l00070">DecodeFrame::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00055">DecodeSignal::receivers</a>, <a class="el" href="decode__database_8h_source.html#l00046">DecodeSignal::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00072">DecodeFrame::transmitter</a>, <a class="el" href="decode__database_8h_source.html#l00054">DecodeSignal::unit</a>, <a class="el" href="decode__database_8h_source.html#l00056">DecodeSignal::valueDescriptions</a>, and <a class="el" href="decode__database_8h_source.html#l00049">DecodeSignal::valueType</a>.</p>
</div>
</div>
@@ -147,7 +160,7 @@ Public Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+16 -9
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -90,13 +97,13 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<p>This is the complete list of members for <a class="el" href="classDbcDecoder.html">DbcDecoder</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+37 -27
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcDecoder Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,13 +77,21 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcDecoder-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcDecoder Class Reference</div></div>
@@ -97,28 +105,28 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database, std::uint32_t canId, bool isExtended) const</td></tr>
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find frame definition by CAN ID. <a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">More...</a><br /></td></tr>
<tr class="separator:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) const</td></tr>
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decode one raw CAN frame. <a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">More...</a><br /></td></tr>
<tr class="memitem:a4005c4311f57b7faf21c0cb31463039c" id="r_a4005c4311f57b7faf21c0cb31463039c"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a> (const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database, std::uint32_t canId, bool isExtended) const</td></tr>
<tr class="memdesc:a4005c4311f57b7faf21c0cb31463039c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find frame definition by CAN ID. <br /></td></tr>
<tr class="separator:a4005c4311f57b7faf21c0cb31463039c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7" id="r_a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) const</td></tr>
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decode one raw CAN frame. <br /></td></tr>
<tr class="separator:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Runtime CAN decoder using prebuilt decode database. </p>
<div class="textblock"><p>Runtime CAN decoder using prebuilt decode database. </p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00070">70</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00084">84</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ab2cfb2fb711c95d3a29365546b89f3da" name="ab2cfb2fb711c95d3a29365546b89f3da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">&#9670;&nbsp;</a></span>FindFrame()</h2>
<a id="a4005c4311f57b7faf21c0cb31463039c" name="a4005c4311f57b7faf21c0cb31463039c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4005c4311f57b7faf21c0cb31463039c">&#9670;&#160;</a></span>FindFrame()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> * DbcDecoder::FindFrame </td>
<td class="memname">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; DbcDecoder::FindFrame </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramtype">const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>database</em>, </td>
</tr>
<tr>
@@ -150,16 +158,18 @@ Public Member Functions</h2></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to frame definition or nullptr. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Owning immutable frame handle or nullptr. Safe across reload. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00017">17</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__decoder_8cpp_source.html#l00031">Decode()</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8cpp_source.html#l00110">DecodeDatabase::FindFrame()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__decoder_8cpp_source.html#l00023">Decode()</a>.</p>
</div>
</div>
<a id="a345951ffe5d943a70d3a1ea1f39e74f7" name="a345951ffe5d943a70d3a1ea1f39e74f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a345951ffe5d943a70d3a1ea1f39e74f7">&#9670;&nbsp;</a></span>Decode()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a345951ffe5d943a70d3a1ea1f39e74f7">&#9670;&#160;</a></span>Decode()</h2>
<div class="memitem">
<div class="memproto">
@@ -167,7 +177,7 @@ Public Member Functions</h2></td></tr>
<tr>
<td class="memname"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a> DbcDecoder::Decode </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramtype">const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>database</em>, </td>
</tr>
<tr>
@@ -188,15 +198,15 @@ Public Member Functions</h2></td></tr>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">database</td><td>Runtime decode database. </td></tr>
<tr><td class="paramname">frame</td><td>Raw CAN frame. </td></tr>
<tr><td class="paramname">frame</td><td>Raw CAN frame. Short payloads decode available signals; bytes beyond declared DLC are ignored. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Decoded frame value. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00031">31</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00023">23</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00024">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::data</a>, <a class="el" href="dbc__decoder_8h_source.html#l00039">DecodedSignalValue::definition</a>, <a class="el" href="dbc__decoder_8h_source.html#l00056">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00014">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::isExtended</a>, <a class="el" href="dbc__decoder_8h_source.html#l00042">DecodedSignalValue::valid</a>, <a class="el" href="dbc__decoder_8h_source.html#l00058">DecodedFrameValue::valid</a>, and <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::valueType</a>.</p>
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00027">RawCanFrame::data</a>, <a class="el" href="dbc__decoder_8h_source.html#l00053">DecodedSignalValue::definition</a>, <a class="el" href="dbc__decoder_8h_source.html#l00072">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00017">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::isExtended</a>, <a class="el" href="dbc__decoder_8h_source.html#l00054">DecodedSignalValue::key</a>, <a class="el" href="dbc__decoder_8h_source.html#l00073">DecodedFrameValue::key</a>, <a class="el" href="dbc__decoder_8h_source.html#l00076">DecodedFrameValue::status</a>, <a class="el" href="dbc__decoder_8h_source.html#l00057">DecodedSignalValue::valid</a>, and <a class="el" href="dbc__decoder_8h_source.html#l00075">DecodedFrameValue::valid</a>.</p>
</div>
</div>
@@ -210,7 +220,7 @@ Public Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+1 -1
View File
@@ -1,5 +1,5 @@
var classDbcDecoder =
[
[ "FindFrame", "classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da", null ],
[ "FindFrame", "classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c", null ],
[ "Decode", "classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7", null ]
];
@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcDiagnosticError.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcDiagnosticError Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DbcDiagnosticError</b>(DbcDiagnosticCode code, const std::string &amp;filePath, std::size_t lineNumber, const std::string &amp;message) (defined in <a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a>)</td><td class="entry"><a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>diagnostic</b> (defined in <a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a>)</td><td class="entry"><a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+205
View File
@@ -0,0 +1,205 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcDiagnosticError Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcDiagnosticError.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="classDbcDiagnosticError-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcDiagnosticError Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>&gt;</code></p>
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcDiagnosticError:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcDiagnosticError__inherit__graph.svg" width="175" height="303"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa9997368f79a9a0723481aaeffc44618" id="r_aa9997368f79a9a0723481aaeffc44618"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDiagnosticError.html#aa9997368f79a9a0723481aaeffc44618">DbcDiagnosticError</a> (DbcDiagnosticCode code, const std::string &amp;filePath, std::size_t lineNumber, const std::string &amp;message)</td></tr>
<tr class="separator:aa9997368f79a9a0723481aaeffc44618"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:ab3965082f01d66b6d5c20525af44235d" id="r_ab3965082f01d66b6d5c20525af44235d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcDiagnostic.html">DbcDiagnostic</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDiagnosticError.html#ab3965082f01d66b6d5c20525af44235d">diagnostic</a></td></tr>
<tr class="separator:ab3965082f01d66b6d5c20525af44235d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Carries deferred validation locations without parsing exception text. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00021">21</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aa9997368f79a9a0723481aaeffc44618" name="aa9997368f79a9a0723481aaeffc44618"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9997368f79a9a0723481aaeffc44618">&#9670;&#160;</a></span>DbcDiagnosticError()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">DbcDiagnosticError::DbcDiagnosticError </td>
<td>(</td>
<td class="paramtype">DbcDiagnosticCode&#160;</td>
<td class="paramname"><em>code</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filePath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t&#160;</td>
<td class="paramname"><em>lineNumber</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>message</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ab3965082f01d66b6d5c20525af44235d" name="ab3965082f01d66b6d5c20525af44235d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3965082f01d66b6d5c20525af44235d">&#9670;&#160;</a></span>diagnostic</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structDbcDiagnostic.html">DbcDiagnostic</a> DbcDiagnosticError::diagnostic</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00028">28</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,7 @@
<map id="DbcDiagnosticError" name="DbcDiagnosticError">
<area shape="rect" id="Node000001" title=" " alt="" coords="5,232,169,297"/>
<area shape="rect" id="Node000002" title=" " alt="" coords="22,119,153,184"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="90,198,90,232,85,232,85,198"/>
<area shape="rect" id="Node000003" title=" " alt="" coords="34,5,141,71"/>
<area shape="poly" id="edge2_Node000002_Node000003" title=" " alt="" coords="90,84,90,119,85,119,85,84"/>
</map>
@@ -0,0 +1 @@
2dc86eee0052fd3c477fa415ad03afd3
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcDiagnosticError Pages: 1 -->
<svg width="131pt" height="227pt"
viewBox="0.00 0.00 131.00 227.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 223)">
<title>DbcDiagnosticError</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="123,-49 0,-49 0,0 123,0 123,-49"/>
<text text-anchor="start" x="15" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError</text>
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">diagnostic</text>
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError()</text>
<polygon fill="#666666" stroke="#666666" points="0.5,-31.5 0.5,-31.5 123.5,-31.5 123.5,-31.5 0.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="0.5,-16.5 0.5,-16.5 15.5,-16.5 15.5,-16.5 0.5,-16.5"/>
<polygon fill="#666666" stroke="#666666" points="15.5,-16.5 15.5,-16.5 123.5,-16.5 123.5,-16.5 15.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-49 123,-49 123,0 0,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="110.5,-134 12.5,-134 12.5,-85 110.5,-85 110.5,-134"/>
<text text-anchor="start" x="17.5" y="-121.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::runtime_error</text>
<text text-anchor="start" x="59.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="59.5" y="-91.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#666666" stroke="#666666" points="12.5,-116.5 12.5,-116.5 110.5,-116.5 110.5,-116.5 12.5,-116.5"/>
<polygon fill="#666666" stroke="#666666" points="12.5,-101.5 12.5,-101.5 110.5,-101.5 110.5,-101.5 12.5,-101.5"/>
<polygon fill="none" stroke="#666666" points="12.5,-85 12.5,-134 110.5,-134 110.5,-85 12.5,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M61.5,-74.77C61.5,-66.17 61.5,-57.1 61.5,-49.12"/>
<polygon fill="none" stroke="#63b8ff" points="58,-74.94 61.5,-84.94 65,-74.94 58,-74.94"/>
</a>
</g>
</g>
<!-- Node3 -->
<g id="Node000003" class="node">
<title>Node3</title>
<g id="a_Node000003"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="101.5,-219 21.5,-219 21.5,-170 101.5,-170 101.5,-219"/>
<text text-anchor="start" x="26.5" y="-206.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::exception</text>
<text text-anchor="start" x="59.5" y="-191.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="59.5" y="-176.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#666666" stroke="#666666" points="21.5,-201.5 21.5,-201.5 101.5,-201.5 101.5,-201.5 21.5,-201.5"/>
<polygon fill="#666666" stroke="#666666" points="21.5,-186.5 21.5,-186.5 101.5,-186.5 101.5,-186.5 21.5,-186.5"/>
<polygon fill="none" stroke="#666666" points="21.5,-170 21.5,-219 101.5,-219 101.5,-170 21.5,-170"/>
</a>
</g>
</g>
<!-- Node3&#45;&gt;Node2 -->
<g id="edge2_Node000002_Node000003" class="edge">
<title>Node3&#45;&gt;Node2</title>
<g id="a_edge2_Node000002_Node000003"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M61.5,-159.77C61.5,-151.17 61.5,-142.1 61.5,-134.12"/>
<polygon fill="none" stroke="#63b8ff" points="58,-159.94 61.5,-169.94 65,-159.94 58,-159.94"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcDiagnosticError Pages: 1 -->
<svg width="131pt" height="227pt"
viewBox="0.00 0.00 131.00 227.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 223)">
<title>DbcDiagnosticError</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="123,-49 0,-49 0,0 123,0 123,-49"/>
<text text-anchor="start" x="15" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError</text>
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">diagnostic</text>
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError()</text>
<polygon fill="#666666" stroke="#666666" points="0.5,-31.5 0.5,-31.5 123.5,-31.5 123.5,-31.5 0.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="0.5,-16.5 0.5,-16.5 15.5,-16.5 15.5,-16.5 0.5,-16.5"/>
<polygon fill="#666666" stroke="#666666" points="15.5,-16.5 15.5,-16.5 123.5,-16.5 123.5,-16.5 15.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-49 123,-49 123,0 0,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="110.5,-134 12.5,-134 12.5,-85 110.5,-85 110.5,-134"/>
<text text-anchor="start" x="17.5" y="-121.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::runtime_error</text>
<text text-anchor="start" x="59.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="59.5" y="-91.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#666666" stroke="#666666" points="12.5,-116.5 12.5,-116.5 110.5,-116.5 110.5,-116.5 12.5,-116.5"/>
<polygon fill="#666666" stroke="#666666" points="12.5,-101.5 12.5,-101.5 110.5,-101.5 110.5,-101.5 12.5,-101.5"/>
<polygon fill="none" stroke="#666666" points="12.5,-85 12.5,-134 110.5,-134 110.5,-85 12.5,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M61.5,-74.77C61.5,-66.17 61.5,-57.1 61.5,-49.12"/>
<polygon fill="none" stroke="#63b8ff" points="58,-74.94 61.5,-84.94 65,-74.94 58,-74.94"/>
</a>
</g>
</g>
<!-- Node3 -->
<g id="Node000003" class="node">
<title>Node3</title>
<g id="a_Node000003"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="101.5,-219 21.5,-219 21.5,-170 101.5,-170 101.5,-219"/>
<text text-anchor="start" x="26.5" y="-206.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::exception</text>
<text text-anchor="start" x="59.5" y="-191.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="59.5" y="-176.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#666666" stroke="#666666" points="21.5,-201.5 21.5,-201.5 101.5,-201.5 101.5,-201.5 21.5,-201.5"/>
<polygon fill="#666666" stroke="#666666" points="21.5,-186.5 21.5,-186.5 101.5,-186.5 101.5,-186.5 21.5,-186.5"/>
<polygon fill="none" stroke="#666666" points="21.5,-170 21.5,-219 101.5,-219 101.5,-170 21.5,-170"/>
</a>
</g>
</g>
<!-- Node3&#45;&gt;Node2 -->
<g id="edge2_Node000002_Node000003" class="edge">
<title>Node3&#45;&gt;Node2</title>
<g id="a_edge2_Node000002_Node000003"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M61.5,-159.77C61.5,-151.17 61.5,-142.1 61.5,-134.12"/>
<polygon fill="none" stroke="#63b8ff" points="58,-159.94 61.5,-169.94 65,-159.94 58,-159.94"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

+110
View File
@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcFrameHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcFrameHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const override (defined in <a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a>)</td><td class="entry"><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+170
View File
@@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcFrameHandler Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcFrameHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcFrameHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcFrameHandler Class Reference</div></div>
</div><!--header-->
<div class="contents">
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcFrameHandler:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcFrameHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a0d3f43bbcc5e191460bc31827e74ce89" id="r_a0d3f43bbcc5e191460bc31827e74ce89"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcFrameHandler.html#a0d3f43bbcc5e191460bc31827e74ce89">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:a0d3f43bbcc5e191460bc31827e74ce89"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00050">50</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a0d3f43bbcc5e191460bc31827e74ce89" name="a0d3f43bbcc5e191460bc31827e74ce89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0d3f43bbcc5e191460bc31827e74ce89">&#9670;&#160;</a></span>Handle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DbcFrameHandler::Handle </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>line</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00343">343</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<map id="DbcFrameHandler" name="DbcFrameHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="37,139,167,204"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
</map>
@@ -0,0 +1 @@
e01f0e1a340a0e632ef160180de2de74
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcFrameHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcFrameHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcFrameHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcFrameHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcHeaderHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcHeaderHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const override (defined in <a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a>)</td><td class="entry"><a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+173
View File
@@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcHeaderHandler Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcHeaderHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcHeaderHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcHeaderHandler Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>&gt;</code></p>
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcHeaderHandler:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcHeaderHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a1e43a9dcf157f4d4418032d9e9711693" id="r_a1e43a9dcf157f4d4418032d9e9711693"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcHeaderHandler.html#a1e43a9dcf157f4d4418032d9e9711693">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:a1e43a9dcf157f4d4418032d9e9711693"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Common header metadata does not change the supported decode definitions. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00085">85</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a1e43a9dcf157f4d4418032d9e9711693" name="a1e43a9dcf157f4d4418032d9e9711693"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e43a9dcf157f4d4418032d9e9711693">&#9670;&#160;</a></span>Handle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DbcHeaderHandler::Handle </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>line</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00386">386</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<map id="DbcHeaderHandler" name="DbcHeaderHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="33,139,171,204"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
</map>
@@ -0,0 +1 @@
b906816fb2675b5eef3174ec5bac8679
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcHeaderHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcHeaderHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="124,-49 21,-49 21,0 124,0 124,-49"/>
<text text-anchor="start" x="26.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcHeaderHandler</text>
<text text-anchor="start" x="71" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="35" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="21.5,-31.5 21.5,-31.5 124.5,-31.5 124.5,-31.5 21.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="21.5,-16.5 21.5,-16.5 124.5,-16.5 124.5,-16.5 21.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="21,0 21,-49 124,-49 124,0 21,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcHeaderHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcHeaderHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="124,-49 21,-49 21,0 124,0 124,-49"/>
<text text-anchor="start" x="26.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcHeaderHandler</text>
<text text-anchor="start" x="71" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="35" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="21.5,-31.5 21.5,-31.5 124.5,-31.5 124.5,-31.5 21.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="21.5,-16.5 21.5,-16.5 124.5,-16.5 124.5,-16.5 21.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="21,0 21,-49 124,-49 124,0 21,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

+16 -8
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -90,12 +97,13 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
<p>This is the complete list of members for <a class="el" href="classDbcParser.html">DbcParser</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(const std::string &amp;filePath) const</td><td class="entry"><a class="el" href="classDbcParser.html">DbcParser</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">ParseFileWithDiagnostics</a>(const std::string &amp;filePath) const</td><td class="entry"><a class="el" href="classDbcParser.html">DbcParser</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+57 -22
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcParser Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -97,28 +104,29 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aef72826942c9095d653fafa435855e56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcDatabase.html">DbcDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &amp;filePath) const</td></tr>
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse DBC file. <a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">More...</a><br /></td></tr>
<tr class="memitem:aef72826942c9095d653fafa435855e56" id="r_aef72826942c9095d653fafa435855e56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcDatabase.html">DbcDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &amp;filePath) const</td></tr>
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse DBC file. <br /></td></tr>
<tr class="separator:aef72826942c9095d653fafa435855e56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e915ce79c2e3d4c95a5aaf2bf0409bc" id="r_a0e915ce79c2e3d4c95a5aaf2bf0409bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcParseResult.html">DbcParseResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">ParseFileWithDiagnostics</a> (const std::string &amp;filePath) const</td></tr>
<tr class="memdesc:a0e915ce79c2e3d4c95a5aaf2bf0409bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse with warnings and a structured first error instead of throwing. <br /></td></tr>
<tr class="separator:a0e915ce79c2e3d4c95a5aaf2bf0409bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Minimal DBC parser. </p>
<p >Supports:</p><ul>
<div class="textblock"><p>Minimal DBC parser. </p>
<p>Supports:</p><ul>
<li>BO_</li>
<li>SG_</li>
<li>CM_ BO_</li>
<li>CM_ SG_</li>
<li>basic M / mN multiplexing</li>
<li>VAL_ signal value descriptions</li>
</ul>
<p >Ignores:</p><ul>
<li>attributes</li>
<li>multiplexing</li>
<li>value tables </li>
</ul>
<p>Reports unsupported statements as warnings, except SG_MUL_VAL_ which is an error. VERSION, NS_, BS_, BU_ and NS_ symbol declarations stay quiet. </p>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8h_source.html#l00035">35</a> of file <a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8h_source.html#l00033">33</a> of file <a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="aef72826942c9095d653fafa435855e56" name="aef72826942c9095d653fafa435855e56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef72826942c9095d653fafa435855e56">&#9670;&nbsp;</a></span>ParseFile()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aef72826942c9095d653fafa435855e56">&#9670;&#160;</a></span>ParseFile()</h2>
<div class="memitem">
<div class="memproto">
@@ -143,14 +151,41 @@ Public Member Functions</h2></td></tr>
<dl class="section return"><dt>Returns</dt><dd>Parsed database. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>on file or parse errors. </td></tr>
<tr><td class="paramname">std::runtime_error</td><td>on file or parse errors. Line parse errors include the file path and one-based line number. Duplicate normalized CAN IDs of the same frame type and duplicate signal names within a frame are rejected at the repeated definition's line. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00040">40</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00031">31</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>.</p>
<p class="reference">References <a class="el" href="dbc__parser_8cpp_source.html#l00044">ParseFileWithDiagnostics()</a>.</p>
</div>
</div>
<a id="a0e915ce79c2e3d4c95a5aaf2bf0409bc" name="a0e915ce79c2e3d4c95a5aaf2bf0409bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e915ce79c2e3d4c95a5aaf2bf0409bc">&#9670;&#160;</a></span>ParseFileWithDiagnostics()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structDbcParseResult.html">DbcParseResult</a> DbcParser::ParseFileWithDiagnostics </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filePath</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Parse with warnings and a structured first error instead of throwing. </p>
<dl class="section return"><dt>Returns</dt><dd>Valid database with diagnostics; empty database on error. File errors use line zero; statement errors use physical one-based lines. Warnings indicate ignored syntax and possible incomplete decoding. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00044">44</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8cpp_source.html#l00388">DbcStatementDispatcher::Dispatch()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__parser_8cpp_source.html#l00031">ParseFile()</a>.</p>
</div>
</div>
@@ -164,7 +199,7 @@ Public Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcParser.html">DbcParser</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+2 -1
View File
@@ -1,4 +1,5 @@
var classDbcParser =
[
[ "ParseFile", "classDbcParser.html#aef72826942c9095d653fafa435855e56", null ]
[ "ParseFile", "classDbcParser.html#aef72826942c9095d653fafa435855e56", null ],
[ "ParseFileWithDiagnostics", "classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc", null ]
];
@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcSignalHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcSignalHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const override (defined in <a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a>)</td><td class="entry"><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+170
View File
@@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcSignalHandler Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcSignalHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcSignalHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcSignalHandler Class Reference</div></div>
</div><!--header-->
<div class="contents">
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcSignalHandler:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcSignalHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ad7d891ec1414fb645f85ccd410f2737b" id="r_ad7d891ec1414fb645f85ccd410f2737b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcSignalHandler.html#ad7d891ec1414fb645f85ccd410f2737b">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:ad7d891ec1414fb645f85ccd410f2737b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00058">58</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ad7d891ec1414fb645f85ccd410f2737b" name="ad7d891ec1414fb645f85ccd410f2737b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7d891ec1414fb645f85ccd410f2737b">&#9670;&#160;</a></span>Handle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DbcSignalHandler::Handle </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>line</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00353">353</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<map id="DbcSignalHandler" name="DbcSignalHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="37,139,167,204"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
</map>
@@ -0,0 +1 @@
9f75986e6e276d126dcdd20bd25bc7f7
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcSignalHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcSignalHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcSignalHandler Pages: 1 -->
<svg width="153pt" height="157pt"
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
<title>DbcSignalHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@@ -0,0 +1,111 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcStatementDispatcher.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcStatementDispatcher Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DbcStatementDispatcher</b>() (defined in <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>)</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(const std::string &amp;line, DbcParseContext &amp;context) const</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RegisterType</b>(const std::string &amp;keyword) (defined in <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>)</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+212
View File
@@ -0,0 +1,212 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcStatementDispatcher Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcStatementDispatcher.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcStatementDispatcher-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcStatementDispatcher Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2c6e9a614ed747275d43bcccc50d0b2d" id="r_a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memTemplParams" colspan="2">template&lt;class Handler &gt; </td></tr>
<tr class="memitem:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a2c6e9a614ed747275d43bcccc50d0b2d">RegisterType</a> (const std::string &amp;keyword)</td></tr>
<tr class="separator:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a495c2d5c7ebb8103b1987cdd87c142ed" id="r_a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const</td></tr>
<tr class="separator:a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Exact-key dispatch to handlers created once per registration via <a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a>. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00091">91</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a2f064359b59d8644b8a8196653d47482" name="a2f064359b59d8644b8a8196653d47482"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f064359b59d8644b8a8196653d47482">&#9670;&#160;</a></span>DbcStatementDispatcher()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">DbcStatementDispatcher::DbcStatementDispatcher </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00371">371</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a2c6e9a614ed747275d43bcccc50d0b2d" name="a2c6e9a614ed747275d43bcccc50d0b2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c6e9a614ed747275d43bcccc50d0b2d">&#9670;&#160;</a></span>RegisterType()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Handler &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void DbcStatementDispatcher::RegisterType </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>keyword</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00096">96</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div>
</div>
<a id="a495c2d5c7ebb8103b1987cdd87c142ed" name="a495c2d5c7ebb8103b1987cdd87c142ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a495c2d5c7ebb8103b1987cdd87c142ed">&#9670;&#160;</a></span>Dispatch()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool DbcStatementDispatcher::Dispatch </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>line</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns false for an unregistered keyword; input must be trimmed. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00388">388</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__parser_8cpp_source.html#l00044">DbcParser::ParseFileWithDiagnostics()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
var classDbcStatementDispatcher =
[
[ "Dispatch", "classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed", null ]
];
@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcStatementHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcStatementHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const =0 (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+129
View File
@@ -0,0 +1,129 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcStatementHandler Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcStatementHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcStatementHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcStatementHandler Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
</div><!--header-->
<div class="contents">
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcStatementHandler:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="classDbcStatementHandler__inherit__graph.svg" width="100%" height="487"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3de86e1e27e9bcb0fe6f1460a8ba5739" id="r_a3de86e1e27e9bcb0fe6f1460a8ba5739"><td class="memItemLeft" align="right" valign="top"><a id="a3de86e1e27e9bcb0fe6f1460a8ba5739" name="a3de86e1e27e9bcb0fe6f1460a8ba5739"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Handle</b> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const =0</td></tr>
<tr class="separator:a3de86e1e27e9bcb0fe6f1460a8ba5739"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00044">44</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,17 @@
<map id="DbcStatementHandler" name="DbcStatementHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="484,5,677,91"/>
<area shape="rect" id="Node000002" title=" " alt="" coords="5,139,153,244"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="471,66,324,94,244,115,167,141,155,146,153,141,165,136,243,110,323,89,470,61"/>
<area shape="rect" id="Node000003" href="$classDbcCommentHandler.html" title=" " alt="" coords="178,159,333,224"/>
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="472,89,346,141,308,161,306,156,344,136,470,84"/>
<area shape="rect" id="Node000004" href="$classDbcFrameHandler.html" title=" " alt="" coords="357,159,487,224"/>
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="525,102,460,160,456,156,522,98"/>
<area shape="rect" id="Node000005" href="$classDbcHeaderHandler.html" title=" " alt="" coords="512,159,649,224"/>
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="583,104,583,158,578,158,578,104"/>
<area shape="rect" id="Node000006" href="$classDbcSignalHandler.html" title=" " alt="" coords="674,159,805,224"/>
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="640,98,705,156,702,160,636,102"/>
<area shape="rect" id="Node000007" href="$classDbcUnsupportedMultiplexingHandler.html" title=" " alt="" coords="829,151,1031,231"/>
<area shape="poly" id="edge6_Node000001_Node000007" title=" " alt="" coords="691,87,818,136,847,149,845,154,816,141,689,92"/>
<area shape="rect" id="Node000008" href="$classDbcValueDescriptionHandler.html" title=" " alt="" coords="1055,159,1255,224"/>
<area shape="poly" id="edge7_Node000001_Node000008" title=" " alt="" coords="692,60,859,89,953,110,1044,136,1095,156,1093,161,1042,141,951,115,858,94,691,66"/>
</map>
@@ -0,0 +1 @@
9968b812b5276c7cad7a358f5120f96a
@@ -0,0 +1,286 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcStatementHandler Pages: 1 -->
<!--zoomable 187 -->
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<defs>
<circle id="rim" cx="0" cy="0" r="7"/>
<circle id="rim2" cx="0" cy="0" r="3.5"/>
<g id="zoomPlus">
<use xlink:href="#rim" fill="#404040"><set attributeName="fill" to="#808080" begin="zoomplus.mouseover" end="zoomplus.mouseout"/></use>
<path d="M-4,0h8M0,-4v8" fill="none" stroke="white" stroke-width="1.5" pointer-events="none"/>
</g>
<g id="zoomMin">
<use xlink:href="#rim" fill="#404040"><set attributeName="fill" to="#808080" begin="zoomminus.mouseover" end="zoomminus.mouseout"/></use>
<path d="M-4,0h8" fill="none" stroke="white" stroke-width="1.5" pointer-events="none"/>
</g>
<g id="arrowUp" transform="translate(30 24)">
<use xlink:href="#rim"/>
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
</g>
<g id="arrowRight" transform="rotate(90) translate(36 -43)">
<use xlink:href="#rim"/>
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
</g>
<g id="arrowDown" transform="rotate(180) translate(-30 -48)">
<use xlink:href="#rim"/>
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
</g>
<g id="arrowLeft" transform="rotate(270) translate(-36 17)">
<use xlink:href="#rim"/>
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
</g>
<g id="resetDef">
<use xlink:href="#rim2" fill="#404040"><set attributeName="fill" to="#808080" begin="reset.mouseover" end="reset.mouseout"/></use>
</g>
</defs>
<script type="application/ecmascript">
var viewWidth = 946;
var viewHeight = 187;
var sectionId = 'dynsection-0';
</script>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="viewport">
<title>DbcStatementHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="504,-179 359,-179 359,-115 504,-115 504,-179"/>
<text text-anchor="start" x="377.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="430" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="363.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="376.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="363.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="376.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="359.5,-162 359.5,-162 504.5,-162 504.5,-162 359.5,-162"/>
<polygon fill="#666666" stroke="#666666" points="359.5,-147 359.5,-147 504.5,-147 504.5,-147 359.5,-147"/>
<polygon fill="none" stroke="#666666" points="359,-115 359,-179 504,-179 504,-115 359,-115"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="111,-79 0,-79 0,0 111,0 111,-79"/>
<text text-anchor="start" x="15" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler</text>
<text text-anchor="start" x="4.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">instances</text>
<text text-anchor="start" x="4.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">calls</text>
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler()</text>
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-61.5 0.5,-61.5 111.5,-61.5 111.5,-61.5 0.5,-61.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-31.5 0.5,-31.5 15.5,-31.5 15.5,-31.5 0.5,-31.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="15.5,-31.5 15.5,-31.5 111.5,-31.5 111.5,-31.5 15.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="0,0 0,-79 111,-79 111,0 0,0"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node1&#45;&gt;Node2</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M348.84,-135.61C284.93,-125.83 195.06,-108.22 120.5,-79 117.45,-77.8 114.37,-76.47 111.3,-75.05"/>
<polygon fill="none" stroke="#63b8ff" points="348.46,-139.1 358.87,-137.12 349.5,-132.17 348.46,-139.1"/>
</a>
</g>
</g>
<!-- Node3 -->
<g id="Node000003" class="node">
<title>Node3</title>
<g id="a_Node000003"><a xlink:href="classDbcCommentHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="245.5,-64 129.5,-64 129.5,-15 245.5,-15 245.5,-64"/>
<text text-anchor="start" x="134.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
<text text-anchor="start" x="185.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="146.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="172.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-46.5 129.5,-46.5 245.5,-46.5 245.5,-46.5 129.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-31.5 129.5,-31.5 245.5,-31.5 245.5,-31.5 129.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="129.5,-15 129.5,-64 245.5,-64 245.5,-15 129.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node3 -->
<g id="edge2_Node000001_Node000003" class="edge">
<title>Node1&#45;&gt;Node3</title>
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M349.27,-117.98C319.03,-106.86 284.79,-93.32 254.5,-79 245.16,-74.58 235.38,-69.34 226.26,-64.17"/>
<polygon fill="none" stroke="#63b8ff" points="348.34,-121.36 358.93,-121.5 350.74,-114.79 348.34,-121.36"/>
</a>
</g>
</g>
<!-- Node4 -->
<g id="Node000004" class="node">
<title>Node4</title>
<g id="a_Node000004"><a xlink:href="classDbcFrameHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="361.5,-64 263.5,-64 263.5,-15 361.5,-15 361.5,-64"/>
<text text-anchor="start" x="268.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
<text text-anchor="start" x="310.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="276" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="297.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-46.5 263.5,-46.5 361.5,-46.5 361.5,-46.5 263.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-31.5 263.5,-31.5 361.5,-31.5 361.5,-31.5 263.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="263.5,-15 263.5,-64 361.5,-64 361.5,-15 263.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node4 -->
<g id="edge3_Node000001_Node000004" class="edge">
<title>Node1&#45;&gt;Node4</title>
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M388.55,-107.92C372.13,-93.37 353.89,-77.19 339.38,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="386.64,-110.9 396.44,-114.92 391.28,-105.66 386.64,-110.9"/>
</a>
</g>
</g>
<!-- Node5 -->
<g id="Node000005" class="node">
<title>Node5</title>
<g id="a_Node000005"><a xlink:href="classDbcHeaderHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="483,-64 380,-64 380,-15 483,-15 483,-64"/>
<text text-anchor="start" x="385.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcHeaderHandler</text>
<text text-anchor="start" x="430" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="394" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="416.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="380.5,-46.5 380.5,-46.5 483.5,-46.5 483.5,-46.5 380.5,-46.5"/>
<polygon fill="#666666" stroke="#666666" points="380.5,-31.5 380.5,-31.5 483.5,-31.5 483.5,-31.5 380.5,-31.5"/>
<polygon fill="none" stroke="#666666" points="380,-15 380,-64 483,-64 483,-15 380,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node5 -->
<g id="edge4_Node000001_Node000005" class="edge">
<title>Node1&#45;&gt;Node5</title>
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M431.5,-104.72C431.5,-91.03 431.5,-76.26 431.5,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="428,-104.92 431.5,-114.92 435,-104.92 428,-104.92"/>
</a>
</g>
</g>
<!-- Node6 -->
<g id="Node000006" class="node">
<title>Node6</title>
<g id="a_Node000006"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="599.5,-64 501.5,-64 501.5,-15 599.5,-15 599.5,-64"/>
<text text-anchor="start" x="506.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="548.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="514" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="535.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="501.5,-46.5 501.5,-46.5 599.5,-46.5 599.5,-46.5 501.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="501.5,-31.5 501.5,-31.5 599.5,-31.5 599.5,-31.5 501.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="501.5,-15 501.5,-64 599.5,-64 599.5,-15 501.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node6 -->
<g id="edge5_Node000001_Node000006" class="edge">
<title>Node1&#45;&gt;Node6</title>
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M474.45,-107.92C490.87,-93.37 509.11,-77.19 523.62,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="471.72,-105.66 466.56,-114.92 476.36,-110.9 471.72,-105.66"/>
</a>
</g>
</g>
<!-- Node7 -->
<g id="Node000007" class="node">
<title>Node7</title>
<g id="a_Node000007"><a xlink:href="classDbcUnsupportedMultiplexingHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="769.5,-69.5 617.5,-69.5 617.5,-9.5 769.5,-9.5 769.5,-69.5"/>
<text text-anchor="start" x="622.5" y="-57.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="674" y="-46.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="691.5" y="-31.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="643.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="678.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="617.5,-41.5 617.5,-41.5 769.5,-41.5 769.5,-41.5 617.5,-41.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="617.5,-26.5 617.5,-26.5 769.5,-26.5 769.5,-26.5 617.5,-26.5"/>
<polygon fill="none" stroke="#bfbfbf" points="617.5,-9.5 617.5,-69.5 769.5,-69.5 769.5,-9.5 617.5,-9.5"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node7 -->
<g id="edge6_Node000001_Node000007" class="edge">
<title>Node1&#45;&gt;Node7</title>
<g id="a_edge6_Node000001_Node000007"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M513.82,-116.07C543.79,-104.86 577.83,-91.73 608.5,-79 615.68,-76.02 623.16,-72.8 630.57,-69.54"/>
<polygon fill="none" stroke="#63b8ff" points="512.39,-112.87 504.25,-119.65 514.84,-119.43 512.39,-112.87"/>
</a>
</g>
</g>
<!-- Node8 -->
<g id="Node000008" class="node">
<title>Node8</title>
<g id="a_Node000008"><a xlink:href="classDbcValueDescriptionHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="937.5,-64 787.5,-64 787.5,-15 937.5,-15 937.5,-64"/>
<text text-anchor="start" x="792.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="860.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="813" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="847.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="787.5,-46.5 787.5,-46.5 937.5,-46.5 937.5,-46.5 787.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="787.5,-31.5 787.5,-31.5 937.5,-31.5 937.5,-31.5 787.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="787.5,-15 787.5,-64 937.5,-64 937.5,-15 787.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node8 -->
<g id="edge7_Node000001_Node000008" class="edge">
<title>Node1&#45;&gt;Node8</title>
<g id="a_edge7_Node000001_Node000008"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M514.45,-135.67C585.64,-125.47 690.37,-107.25 778.5,-79 791.03,-74.98 804.15,-69.59 816.19,-64.11"/>
<polygon fill="none" stroke="#63b8ff" points="513.61,-132.26 504.2,-137.12 514.59,-139.19 513.61,-132.26"/>
</a>
</g>
</g>
</g>
</svg>
<g id="navigator" transform="translate(0 0)" fill="#404254">
<rect fill="#f2f5e9" fill-opacity="0.5" stroke="#606060" stroke-width=".5" x="0" y="0" width="60" height="60"/>
<use id="zoomplus" xlink:href="#zoomPlus" x="17" y="9" onmousedown="handleZoom(evt,'in')"/>
<use id="zoomminus" xlink:href="#zoomMin" x="42" y="9" onmousedown="handleZoom(evt,'out')"/>
<use id="reset" xlink:href="#resetDef" x="30" y="36" onmousedown="handleReset()"/>
<use id="arrowup" xlink:href="#arrowUp" x="0" y="0" onmousedown="handlePan(0,-1)"/>
<use id="arrowright" xlink:href="#arrowRight" x="0" y="0" onmousedown="handlePan(1,0)"/>
<use id="arrowdown" xlink:href="#arrowDown" x="0" y="0" onmousedown="handlePan(0,1)"/>
<use id="arrowleft" xlink:href="#arrowLeft" x="0" y="0" onmousedown="handlePan(-1,0)"/>
</g>
<svg viewBox="0 0 15 15" width="100%" height="30px" preserveAspectRatio="xMaxYMin meet">
<g id="arrow_out" transform="scale(0.3 0.3)">
<a xlink:href="classDbcStatementHandler__inherit__graph_org.svg" target="_base">
<rect id="button" ry="5" rx="5" y="6" x="6" height="38" width="38"
fill="#f2f5e9" fill-opacity="0.5" stroke="#606060" stroke-width="1.0"/>
<path id="arrow"
d="M 11.500037,31.436501 C 11.940474,20.09759 22.043105,11.32322 32.158766,21.979434 L 37.068811,17.246167 C 37.068811,17.246167 37.088388,32 37.088388,32 L 22.160133,31.978069 C 22.160133,31.978069 26.997745,27.140456 26.997745,27.140456 C 18.528582,18.264221 13.291696,25.230495 11.500037,31.436501 z"
style="fill:#404040;"/>
</a>
</g>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcStatementHandler Pages: 1 -->
<svg width="946pt" height="187pt"
viewBox="0.00 0.00 945.50 187.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 183)">
<title>DbcStatementHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="504,-179 359,-179 359,-115 504,-115 504,-179"/>
<text text-anchor="start" x="377.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="430" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="363.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="376.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="363.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="376.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="359.5,-162 359.5,-162 504.5,-162 504.5,-162 359.5,-162"/>
<polygon fill="#666666" stroke="#666666" points="359.5,-147 359.5,-147 504.5,-147 504.5,-147 359.5,-147"/>
<polygon fill="none" stroke="#666666" points="359,-115 359,-179 504,-179 504,-115 359,-115"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="111,-79 0,-79 0,0 111,0 111,-79"/>
<text text-anchor="start" x="15" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler</text>
<text text-anchor="start" x="4.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">instances</text>
<text text-anchor="start" x="4.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">calls</text>
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler()</text>
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-61.5 0.5,-61.5 111.5,-61.5 111.5,-61.5 0.5,-61.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-31.5 0.5,-31.5 15.5,-31.5 15.5,-31.5 0.5,-31.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="15.5,-31.5 15.5,-31.5 111.5,-31.5 111.5,-31.5 15.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="0,0 0,-79 111,-79 111,0 0,0"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node1&#45;&gt;Node2</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M348.84,-135.61C284.93,-125.83 195.06,-108.22 120.5,-79 117.45,-77.8 114.37,-76.47 111.3,-75.05"/>
<polygon fill="none" stroke="#63b8ff" points="348.46,-139.1 358.87,-137.12 349.5,-132.17 348.46,-139.1"/>
</a>
</g>
</g>
<!-- Node3 -->
<g id="Node000003" class="node">
<title>Node3</title>
<g id="a_Node000003"><a xlink:href="classDbcCommentHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="245.5,-64 129.5,-64 129.5,-15 245.5,-15 245.5,-64"/>
<text text-anchor="start" x="134.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
<text text-anchor="start" x="185.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="146.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="172.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-46.5 129.5,-46.5 245.5,-46.5 245.5,-46.5 129.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-31.5 129.5,-31.5 245.5,-31.5 245.5,-31.5 129.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="129.5,-15 129.5,-64 245.5,-64 245.5,-15 129.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node3 -->
<g id="edge2_Node000001_Node000003" class="edge">
<title>Node1&#45;&gt;Node3</title>
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M349.27,-117.98C319.03,-106.86 284.79,-93.32 254.5,-79 245.16,-74.58 235.38,-69.34 226.26,-64.17"/>
<polygon fill="none" stroke="#63b8ff" points="348.34,-121.36 358.93,-121.5 350.74,-114.79 348.34,-121.36"/>
</a>
</g>
</g>
<!-- Node4 -->
<g id="Node000004" class="node">
<title>Node4</title>
<g id="a_Node000004"><a xlink:href="classDbcFrameHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="361.5,-64 263.5,-64 263.5,-15 361.5,-15 361.5,-64"/>
<text text-anchor="start" x="268.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
<text text-anchor="start" x="310.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="276" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="297.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-46.5 263.5,-46.5 361.5,-46.5 361.5,-46.5 263.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-31.5 263.5,-31.5 361.5,-31.5 361.5,-31.5 263.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="263.5,-15 263.5,-64 361.5,-64 361.5,-15 263.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node4 -->
<g id="edge3_Node000001_Node000004" class="edge">
<title>Node1&#45;&gt;Node4</title>
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M388.55,-107.92C372.13,-93.37 353.89,-77.19 339.38,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="386.64,-110.9 396.44,-114.92 391.28,-105.66 386.64,-110.9"/>
</a>
</g>
</g>
<!-- Node5 -->
<g id="Node000005" class="node">
<title>Node5</title>
<g id="a_Node000005"><a xlink:href="classDbcHeaderHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="483,-64 380,-64 380,-15 483,-15 483,-64"/>
<text text-anchor="start" x="385.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcHeaderHandler</text>
<text text-anchor="start" x="430" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="394" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="416.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="380.5,-46.5 380.5,-46.5 483.5,-46.5 483.5,-46.5 380.5,-46.5"/>
<polygon fill="#666666" stroke="#666666" points="380.5,-31.5 380.5,-31.5 483.5,-31.5 483.5,-31.5 380.5,-31.5"/>
<polygon fill="none" stroke="#666666" points="380,-15 380,-64 483,-64 483,-15 380,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node5 -->
<g id="edge4_Node000001_Node000005" class="edge">
<title>Node1&#45;&gt;Node5</title>
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M431.5,-104.72C431.5,-91.03 431.5,-76.26 431.5,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="428,-104.92 431.5,-114.92 435,-104.92 428,-104.92"/>
</a>
</g>
</g>
<!-- Node6 -->
<g id="Node000006" class="node">
<title>Node6</title>
<g id="a_Node000006"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="599.5,-64 501.5,-64 501.5,-15 599.5,-15 599.5,-64"/>
<text text-anchor="start" x="506.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="548.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="514" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="535.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="501.5,-46.5 501.5,-46.5 599.5,-46.5 599.5,-46.5 501.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="501.5,-31.5 501.5,-31.5 599.5,-31.5 599.5,-31.5 501.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="501.5,-15 501.5,-64 599.5,-64 599.5,-15 501.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node6 -->
<g id="edge5_Node000001_Node000006" class="edge">
<title>Node1&#45;&gt;Node6</title>
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M474.45,-107.92C490.87,-93.37 509.11,-77.19 523.62,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="471.72,-105.66 466.56,-114.92 476.36,-110.9 471.72,-105.66"/>
</a>
</g>
</g>
<!-- Node7 -->
<g id="Node000007" class="node">
<title>Node7</title>
<g id="a_Node000007"><a xlink:href="classDbcUnsupportedMultiplexingHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="769.5,-69.5 617.5,-69.5 617.5,-9.5 769.5,-9.5 769.5,-69.5"/>
<text text-anchor="start" x="622.5" y="-57.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="674" y="-46.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="691.5" y="-31.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="643.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="678.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="617.5,-41.5 617.5,-41.5 769.5,-41.5 769.5,-41.5 617.5,-41.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="617.5,-26.5 617.5,-26.5 769.5,-26.5 769.5,-26.5 617.5,-26.5"/>
<polygon fill="none" stroke="#bfbfbf" points="617.5,-9.5 617.5,-69.5 769.5,-69.5 769.5,-9.5 617.5,-9.5"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node7 -->
<g id="edge6_Node000001_Node000007" class="edge">
<title>Node1&#45;&gt;Node7</title>
<g id="a_edge6_Node000001_Node000007"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M513.82,-116.07C543.79,-104.86 577.83,-91.73 608.5,-79 615.68,-76.02 623.16,-72.8 630.57,-69.54"/>
<polygon fill="none" stroke="#63b8ff" points="512.39,-112.87 504.25,-119.65 514.84,-119.43 512.39,-112.87"/>
</a>
</g>
</g>
<!-- Node8 -->
<g id="Node000008" class="node">
<title>Node8</title>
<g id="a_Node000008"><a xlink:href="classDbcValueDescriptionHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="937.5,-64 787.5,-64 787.5,-15 937.5,-15 937.5,-64"/>
<text text-anchor="start" x="792.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="860.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="813" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="847.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="787.5,-46.5 787.5,-46.5 937.5,-46.5 937.5,-46.5 787.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="787.5,-31.5 787.5,-31.5 937.5,-31.5 937.5,-31.5 787.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="787.5,-15 787.5,-64 937.5,-64 937.5,-15 787.5,-15"/>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node8 -->
<g id="edge7_Node000001_Node000008" class="edge">
<title>Node1&#45;&gt;Node8</title>
<g id="a_edge7_Node000001_Node000008"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M514.45,-135.67C585.64,-125.47 690.37,-107.25 778.5,-79 791.03,-74.98 804.15,-69.59 816.19,-64.11"/>
<polygon fill="none" stroke="#63b8ff" points="513.61,-132.26 504.2,-137.12 514.59,-139.19 513.61,-132.26"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

+15 -8
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+19 -12
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcTreeBuilder Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -34,10 +34,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@@ -97,17 +104,17 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a7e57d067d831b14b383947fd125edd4b"><td class="memItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;database) const</td></tr>
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build tree representation of parsed DBC data. <a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">More...</a><br /></td></tr>
<tr class="memitem:a7e57d067d831b14b383947fd125edd4b" id="r_a7e57d067d831b14b383947fd125edd4b"><td class="memItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;database) const</td></tr>
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build tree representation of parsed DBC data. <br /></td></tr>
<tr class="separator:a7e57d067d831b14b383947fd125edd4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Builds a simple tree from parsed DBC database. </p>
<div class="textblock"><p>Builds a simple tree from parsed DBC database. </p>
<p class="definition">Definition at line <a class="el" href="dbc__tree__builder_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__tree__builder_8h_source.html">dbc_tree_builder.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a7e57d067d831b14b383947fd125edd4b" name="a7e57d067d831b14b383947fd125edd4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e57d067d831b14b383947fd125edd4b">&#9670;&nbsp;</a></span>Build()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7e57d067d831b14b383947fd125edd4b">&#9670;&#160;</a></span>Build()</h2>
<div class="memitem">
<div class="memproto">
@@ -147,7 +154,7 @@ Public Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcTreeModel.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcTreeModel Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BitLength</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>BitLengthRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ByteOrder</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CanId</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CanIdRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Column</b> enum name (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>columnCount</b>(const QModelIndex &amp;parent=QModelIndex()) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>ColumnCount</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Comment</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CommentRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>(const QModelIndex &amp;index, int role=Qt::DisplayRole) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>DbcTreeModel</b>(QObject *parent=nullptr) (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ExtendedRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>flags</b>(const QModelIndex &amp;index) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>headerData</b>(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>index</b>(int row, int column, const QModelIndex &amp;parent=QModelIndex()) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LittleEndianRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Name</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NodeTypeRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>parent</b>(const QModelIndex &amp;child) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PayloadLength</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>PayloadLengthRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Role</b> enum name (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>rowCount</b>(const QModelIndex &amp;parent=QModelIndex()) const override (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetTree</b>(std::unique_ptr&lt; TreeNode &gt; root) (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Signed</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SignedRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>StartBit</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>StartBitRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Unit</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>UnitRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>ValueDescriptionsRole</b> enum value (defined in <a class="el" href="classDbcTreeModel.html">DbcTreeModel</a>)</td><td class="entry"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+506
View File
@@ -0,0 +1,506 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DbcTreeModel Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcTreeModel.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcTreeModel-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcTreeModel Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a>&gt;</code></p>
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcTreeModel:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcTreeModel__inherit__graph.svg" width="159" height="350"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a5e31be609fae4d7dfdd79140f56069ae" id="r_a5e31be609fae4d7dfdd79140f56069ae"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><b>Column</b> { <br />
&#160;&#160;<b>Name</b>
, <b>CanId</b>
, <b>PayloadLength</b>
, <b>StartBit</b>
, <br />
&#160;&#160;<b>BitLength</b>
, <b>ByteOrder</b>
, <b>Signed</b>
, <b>Unit</b>
, <br />
&#160;&#160;<b>Comment</b>
, <b>ColumnCount</b>
<br />
}</td></tr>
<tr class="separator:a5e31be609fae4d7dfdd79140f56069ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f360d424848c6c39f2312e6209b0dfd" id="r_a0f360d424848c6c39f2312e6209b0dfd"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><b>Role</b> { <br />
&#160;&#160;<b>NodeTypeRole</b> = Qt::UserRole + 1
, <b>CanIdRole</b>
, <b>PayloadLengthRole</b>
, <b>StartBitRole</b>
, <br />
&#160;&#160;<b>BitLengthRole</b>
, <b>LittleEndianRole</b>
, <b>SignedRole</b>
, <b>UnitRole</b>
, <br />
&#160;&#160;<b>CommentRole</b>
, <b>ValueDescriptionsRole</b>
, <b>ExtendedRole</b>
<br />
}</td></tr>
<tr class="separator:a0f360d424848c6c39f2312e6209b0dfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a4f7214b727d812885bf077352ec9ece1" id="r_a4f7214b727d812885bf077352ec9ece1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a4f7214b727d812885bf077352ec9ece1">DbcTreeModel</a> (QObject *parent=nullptr)</td></tr>
<tr class="separator:a4f7214b727d812885bf077352ec9ece1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cb5a81d456cdead42b75fd3462ee00a" id="r_a8cb5a81d456cdead42b75fd3462ee00a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8cb5a81d456cdead42b75fd3462ee00a">SetTree</a> (std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt; root)</td></tr>
<tr class="separator:a8cb5a81d456cdead42b75fd3462ee00a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8caeb5ec6141eb3e446e48df3c70b3ad" id="r_a8caeb5ec6141eb3e446e48df3c70b3ad"><td class="memItemLeft" align="right" valign="top">QModelIndex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8caeb5ec6141eb3e446e48df3c70b3ad">index</a> (int row, int column, const QModelIndex &amp;parent=QModelIndex()) const override</td></tr>
<tr class="separator:a8caeb5ec6141eb3e446e48df3c70b3ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae40bb8b8a26d205f178c6dd1134ff4b3" id="r_ae40bb8b8a26d205f178c6dd1134ff4b3"><td class="memItemLeft" align="right" valign="top">QModelIndex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#ae40bb8b8a26d205f178c6dd1134ff4b3">parent</a> (const QModelIndex &amp;child) const override</td></tr>
<tr class="separator:ae40bb8b8a26d205f178c6dd1134ff4b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30bed0d65342917c19d9183da55af452" id="r_a30bed0d65342917c19d9183da55af452"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a30bed0d65342917c19d9183da55af452">rowCount</a> (const QModelIndex &amp;parent=QModelIndex()) const override</td></tr>
<tr class="separator:a30bed0d65342917c19d9183da55af452"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a397f885e7fd45c387825b4357b875c10" id="r_a397f885e7fd45c387825b4357b875c10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a397f885e7fd45c387825b4357b875c10">columnCount</a> (const QModelIndex &amp;parent=QModelIndex()) const override</td></tr>
<tr class="separator:a397f885e7fd45c387825b4357b875c10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca81d05c81cc48c1185fc36659e96e5b" id="r_aca81d05c81cc48c1185fc36659e96e5b"><td class="memItemLeft" align="right" valign="top">QVariant&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#aca81d05c81cc48c1185fc36659e96e5b">data</a> (const QModelIndex &amp;index, int role=Qt::DisplayRole) const override</td></tr>
<tr class="separator:aca81d05c81cc48c1185fc36659e96e5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad5834e8edb00808cbfa498ea8c63fe9" id="r_aad5834e8edb00808cbfa498ea8c63fe9"><td class="memItemLeft" align="right" valign="top">QVariant&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#aad5834e8edb00808cbfa498ea8c63fe9">headerData</a> (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override</td></tr>
<tr class="separator:aad5834e8edb00808cbfa498ea8c63fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f7842a79144bdb24fa9c5fbdcd37295" id="r_a8f7842a79144bdb24fa9c5fbdcd37295"><td class="memItemLeft" align="right" valign="top">Qt::ItemFlags&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8f7842a79144bdb24fa9c5fbdcd37295">flags</a> (const QModelIndex &amp;index) const override</td></tr>
<tr class="separator:a8f7842a79144bdb24fa9c5fbdcd37295"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Read-only model. Owns an immutable tree; all indexes expire on SetTree(). Use QPersistentModelIndex to observe reset invalidation. Call on the model thread. </p>
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8h_source.html#l00011">11</a> of file <a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a>.</p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a5e31be609fae4d7dfdd79140f56069ae" name="a5e31be609fae4d7dfdd79140f56069ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e31be609fae4d7dfdd79140f56069ae">&#9670;&#160;</a></span>Column</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum DbcTreeModel::Column</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8h_source.html#l00013">13</a> of file <a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a>.</p>
</div>
</div>
<a id="a0f360d424848c6c39f2312e6209b0dfd" name="a0f360d424848c6c39f2312e6209b0dfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f360d424848c6c39f2312e6209b0dfd">&#9670;&#160;</a></span>Role</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum DbcTreeModel::Role</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8h_source.html#l00024">24</a> of file <a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a4f7214b727d812885bf077352ec9ece1" name="a4f7214b727d812885bf077352ec9ece1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f7214b727d812885bf077352ec9ece1">&#9670;&#160;</a></span>DbcTreeModel()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">DbcTreeModel::DbcTreeModel </td>
<td>(</td>
<td class="paramtype">QObject *&#160;</td>
<td class="paramname"><em>parent</em> = <code>nullptr</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00025">25</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a8cb5a81d456cdead42b75fd3462ee00a" name="a8cb5a81d456cdead42b75fd3462ee00a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cb5a81d456cdead42b75fd3462ee00a">&#9670;&#160;</a></span>SetTree()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void DbcTreeModel::SetTree </td>
<td>(</td>
<td class="paramtype">std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt;&#160;</td>
<td class="paramname"><em>root</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00027">27</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="a8caeb5ec6141eb3e446e48df3c70b3ad" name="a8caeb5ec6141eb3e446e48df3c70b3ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8caeb5ec6141eb3e446e48df3c70b3ad">&#9670;&#160;</a></span>index()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">QModelIndex DbcTreeModel::index </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>row</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>column</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>parent</em> = <code>QModelIndex()</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00042">42</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="ae40bb8b8a26d205f178c6dd1134ff4b3" name="ae40bb8b8a26d205f178c6dd1134ff4b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae40bb8b8a26d205f178c6dd1134ff4b3">&#9670;&#160;</a></span>parent()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">QModelIndex DbcTreeModel::parent </td>
<td>(</td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>child</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00053">53</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="a30bed0d65342917c19d9183da55af452" name="a30bed0d65342917c19d9183da55af452"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a30bed0d65342917c19d9183da55af452">&#9670;&#160;</a></span>rowCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int DbcTreeModel::rowCount </td>
<td>(</td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>parent</em> = <code>QModelIndex()</code></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00061">61</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="a397f885e7fd45c387825b4357b875c10" name="a397f885e7fd45c387825b4357b875c10"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a397f885e7fd45c387825b4357b875c10">&#9670;&#160;</a></span>columnCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int DbcTreeModel::columnCount </td>
<td>(</td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>parent</em> = <code>QModelIndex()</code></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00070">70</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="aca81d05c81cc48c1185fc36659e96e5b" name="aca81d05c81cc48c1185fc36659e96e5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca81d05c81cc48c1185fc36659e96e5b">&#9670;&#160;</a></span>data()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">QVariant DbcTreeModel::data </td>
<td>(</td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>role</em> = <code>Qt::DisplayRole</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">74</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="aad5834e8edb00808cbfa498ea8c63fe9" name="aad5834e8edb00808cbfa498ea8c63fe9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad5834e8edb00808cbfa498ea8c63fe9">&#9670;&#160;</a></span>headerData()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">QVariant DbcTreeModel::headerData </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>section</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Qt::Orientation&#160;</td>
<td class="paramname"><em>orientation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>role</em> = <code>Qt::DisplayRole</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00138">138</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<a id="a8f7842a79144bdb24fa9c5fbdcd37295" name="a8f7842a79144bdb24fa9c5fbdcd37295"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f7842a79144bdb24fa9c5fbdcd37295">&#9670;&#160;</a></span>flags()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Qt::ItemFlags DbcTreeModel::flags </td>
<td>(</td>
<td class="paramtype">const QModelIndex &amp;&#160;</td>
<td class="paramname"><em>index</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__tree__model_8cpp_source.html#l00145">145</a> of file <a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a></li>
<li><a class="el" href="dbc__tree__model_8cpp_source.html">dbc_tree_model.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<map id="DbcTreeModel" name="DbcTreeModel">
<area shape="rect" id="Node000001" title=" " alt="" coords="14,119,145,344"/>
<area shape="rect" id="Node000002" title=" " alt="" coords="5,5,153,71"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="82,84,82,119,77,119,77,84"/>
</map>
@@ -0,0 +1 @@
967c95d0a3c851ca66fee7fa9f601b98
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcTreeModel Pages: 1 -->
<svg width="119pt" height="262pt"
viewBox="0.00 0.00 119.00 262.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
<style type="text/css"><![CDATA[
.node, .edge {opacity: 0.7;}
.node.selected, .edge.selected {opacity: 1;}
.edge:hover path { stroke: red; }
.edge:hover polygon { stroke: red; fill: red; }
]]></style>
<script type="application/ecmascript" xlink:href="svg.min.js"/>
<svg id="graph" class="graph">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 258)">
<title>DbcTreeModel</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="104.5,-169 6.5,-169 6.5,0 104.5,0 104.5,-169"/>
<text text-anchor="start" x="20.5" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcTreeModel</text>
<text text-anchor="start" x="53.5" y="-141.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="10.5" y="-126.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-126.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcTreeModel()</text>
<text text-anchor="start" x="10.5" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">SetTree()</text>
<text text-anchor="start" x="10.5" y="-96.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-96.5" font-family="Helvetica,sans-Serif" font-size="10.00">index()</text>
<text text-anchor="start" x="10.5" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00">parent()</text>
<text text-anchor="start" x="10.5" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">rowCount()</text>
<text text-anchor="start" x="10.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">columnCount()</text>
<text text-anchor="start" x="10.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">data()</text>
<text text-anchor="start" x="10.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">headerData()</text>
<text text-anchor="start" x="10.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">flags()</text>
<polygon fill="#666666" stroke="#666666" points="6.5,-151.5 6.5,-151.5 104.5,-151.5 104.5,-151.5 6.5,-151.5"/>
<polygon fill="#666666" stroke="#666666" points="6.5,-136.5 6.5,-136.5 104.5,-136.5 104.5,-136.5 6.5,-136.5"/>
<polygon fill="none" stroke="#666666" points="6.5,0 6.5,-169 104.5,-169 104.5,0 6.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="111,-254 0,-254 0,-205 111,-205 111,-254"/>
<text text-anchor="start" x="5.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">QAbstractItemModel</text>
<text text-anchor="start" x="54" y="-226.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="54" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-236.5 0.5,-236.5 111.5,-236.5 111.5,-236.5 0.5,-236.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-221.5 0.5,-221.5 111.5,-221.5 111.5,-221.5 0.5,-221.5"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-205 0,-254 111,-254 111,-205 0,-205"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M55.5,-194.72C55.5,-186.84 55.5,-178.1 55.5,-169.1"/>
<polygon fill="none" stroke="#63b8ff" points="52,-194.89 55.5,-204.89 59,-194.89 52,-194.89"/>
</a>
</g>
</g>
</g>
</svg>
</svg>
<style type='text/css'>
<![CDATA[
[data-mouse-over-selected='false'] { opacity: 0.7; }
[data-mouse-over-selected='true'] { opacity: 1.0; }
]]>
</style>
<script type="application/ecmascript"><![CDATA[
document.addEventListener('DOMContentLoaded', (event) => {
highlightEdges();
highlightAdjacentNodes();
});
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DbcTreeModel Pages: 1 -->
<svg width="119pt" height="262pt"
viewBox="0.00 0.00 119.00 262.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 258)">
<title>DbcTreeModel</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="104.5,-169 6.5,-169 6.5,0 104.5,0 104.5,-169"/>
<text text-anchor="start" x="20.5" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcTreeModel</text>
<text text-anchor="start" x="53.5" y="-141.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="10.5" y="-126.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-126.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcTreeModel()</text>
<text text-anchor="start" x="10.5" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">SetTree()</text>
<text text-anchor="start" x="10.5" y="-96.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-96.5" font-family="Helvetica,sans-Serif" font-size="10.00">index()</text>
<text text-anchor="start" x="10.5" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00">parent()</text>
<text text-anchor="start" x="10.5" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">rowCount()</text>
<text text-anchor="start" x="10.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">columnCount()</text>
<text text-anchor="start" x="10.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">data()</text>
<text text-anchor="start" x="10.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">headerData()</text>
<text text-anchor="start" x="10.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="23.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">flags()</text>
<polygon fill="#666666" stroke="#666666" points="6.5,-151.5 6.5,-151.5 104.5,-151.5 104.5,-151.5 6.5,-151.5"/>
<polygon fill="#666666" stroke="#666666" points="6.5,-136.5 6.5,-136.5 104.5,-136.5 104.5,-136.5 6.5,-136.5"/>
<polygon fill="none" stroke="#666666" points="6.5,0 6.5,-169 104.5,-169 104.5,0 6.5,0"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:title=" ">
<polygon fill="white" stroke="transparent" points="111,-254 0,-254 0,-205 111,-205 111,-254"/>
<text text-anchor="start" x="5.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">QAbstractItemModel</text>
<text text-anchor="start" x="54" y="-226.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="54" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-236.5 0.5,-236.5 111.5,-236.5 111.5,-236.5 0.5,-236.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-221.5 0.5,-221.5 111.5,-221.5 111.5,-221.5 0.5,-221.5"/>
<polygon fill="none" stroke="#bfbfbf" points="0,-205 0,-254 111,-254 111,-205 0,-205"/>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node1 -->
<g id="edge1_Node000001_Node000002" class="edge">
<title>Node2&#45;&gt;Node1</title>
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M55.5,-194.72C55.5,-186.84 55.5,-178.1 55.5,-169.1"/>
<polygon fill="none" stroke="#63b8ff" points="52,-194.89 55.5,-204.89 59,-194.89 52,-194.89"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

@@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDbcUnsupportedMultiplexingHandler.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DbcUnsupportedMultiplexingHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &amp;line, DbcParseContext &amp;context) const override (defined in <a class="el" href="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</a>)</td><td class="entry"><a class="el" href="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
Loaded 100 of 469 files, more files were not shown because too many files have changed in this diff. Show more