Compare commits

..
23 Commits
Author SHA1 Message Date
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
407 changed files with 24155 additions and 5570 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
+721 -113
View File
@@ -20,7 +20,15 @@ The implementation follows a simple and practical design:
- Qt is not required at the parser or decoder level
- the same decode engine can be reused for live traffic and trace replay
This is **not a full production-grade DBC implementation yet**, but it is a strong architectural base.
The core library uses C++17 and has no Qt dependency. Qt integration targets the
installed Qt 6.8.2, which is the only supported Qt version. Qt Core and Qt Test are
used by the regression tests; model tests also link QtGui for graphical metatypes.
The optional adapter requires only Qt Core. Live CAN acquisition, trace-file readers,
are left to the consuming application. An optional Qt Core model adapter is provided in `qt/`.
See [changelog.md](changelog.md) for the release and development history,
[tests/README.md](tests/README.md) for test instructions, and
[generated API documentation](docs/html/index.html) for the API reference.
---
@@ -49,7 +57,7 @@ DbcTreeBuilder
↓
TreeNode hierarchy
↓
future Qt UI
DbcTreeModel → Qt views
```
### 2. Runtime decode path
@@ -105,62 +113,25 @@ This avoids forcing UI-oriented structures into a decode role they were not mean
## Module Layout
### Parsed DBC structures
```text
core/ C++17 parser, statement handlers, metadata, tree, and decoder
examples/ Command-line demo (built separately)
qt/ Optional read-only Qt Core model adapter
tests/ Parser, decoder, tree, and optional model tests
docs/ Generated Doxygen documentation
dbc.pro Root qmake project: core + tests
Doxyfile API documentation configuration
```
Files:
- `signal_info.h`
- `frame_info.h`
- `dbc_database.h`
These store a readable representation of the parsed DBC file.
### UI tree structures
Files:
- `tree_node.h`
- `tree_node.cpp`
- `dbc_tree_builder.h`
- `dbc_tree_builder.cpp`
These convert parsed DBC content into a tree hierarchy suitable for UI and model/view usage later.
### Runtime decode structures
Files:
- `decode_database.h`
- `dbc_decode_builder.h`
- `dbc_decode_builder.cpp`
These convert parsed DBC content into a structure optimized for decoding.
### Runtime decoder
Files:
- `dbc_decoder.h`
- `dbc_decoder.cpp`
These perform actual decoding of raw CAN frames using `DecodeDatabase`.
### Parser
Files:
- `dbc_parser.h`
- `dbc_parser.cpp`
These parse the DBC file itself.
### Demo
File:
- `main.cpp`
Used as a small integration example.
| Component | Source files |
| --- | --- |
| Parsed metadata | `core/dbc_database.h`, `core/frame_info.h`, `core/signal_info.h` |
| Parser and dispatch | `core/dbc_parser.*`, `core/dbc_statement_handler.*`, `core/typefactory.h` |
| UI tree | `core/tree_node.*`, `core/dbc_tree_builder.*` |
| Runtime database | `core/decode_database.h`, `core/dbc_decode_builder.*` |
| Decoder | `core/dbc_decoder.*` |
| Demo | `examples/main.cpp`, `examples/demo.pro` |
| Build integration | `core/core.pro`, `core/core_files.pri`, `core/core.pri` |
---
@@ -261,12 +232,13 @@ dbc
└── Odometer
```
Each node stores either:
Frame and signal nodes store copies of the corresponding metadata; the root
has no metadata payload. The payload types are:
- `FrameInfo`
- `SignalInfo`
The tree is intended for browsing and later Qt model integration.
The tree supports browsing through the optional `DbcTreeModel` adapter.
It is **not** the primary runtime decode structure.
@@ -411,6 +383,39 @@ Fields:
- `rawValue`
- `physicalValue`
- `valid`
- `status`
---
### Raw value representation and precision
`DecodedSignalValue::rawValue` is a C++17
`std::variant<std::int64_t, std::uint64_t>`. For a valid signal, signed definitions
produce the `int64_t` alternative and unsigned definitions produce the `uint64_t`
alternative. Raw values remain exact across their full 64-bit ranges. Check
`valid` before using the value; an invalid result's default value is not decoded data.
Use `std::get` when the numeric type is known, or `std::get_if` to handle both:
```cpp
if (const std::int64_t *value = std::get_if<std::int64_t>(&decodedSignal.rawValue)) {
std::cout << *value;
} else {
std::cout << std::get<std::uint64_t>(decodedSignal.rawValue);
}
```
This replaces the previous `int64_t` field: consumers that read or print
`rawValue` directly must handle the variant.
Physical conversion uses the active numeric type:
`physicalValue = static_cast<double>(raw) * factor + offset`.
`physicalValue` remains a `double` and is approximate for large integers.
On usual IEEE 754 binary64 implementations, integers are exactly representable
through 2^53; above that, some integers round to the same floating-point value.
For example, unsigned `UINT64_MAX` remains exact in `rawValue`, but converts to
approximately 18446744073709551616 in binary64 before scaling.
Use `rawValue` whenever exact integer values are required.
---
@@ -424,7 +429,14 @@ Fields:
- `signals`
- `valid`
This is the decoder output for one raw frame.
`valid` means a matching frame definition was found. Check each signal's
`valid` separately: insufficient payload data can leave individual signals
invalid even when the frame is valid. An unknown frame returns `valid == false`.
The frame and signal `definition` pointers refer into `DecodeDatabase`. Keep
that database alive and avoid changes that invalidate its frame or signal
storage while using decoded results. The decoder applies factor and offset;
it does not clamp physical values to the declared minimum and maximum.
---
@@ -435,7 +447,7 @@ Main runtime decoder class.
Responsibilities:
- find a frame definition by CAN ID
- decode all signals in a frame
- decode unconditional signals and the active multiplexed branch
- extract raw values
- sign-extend signed values
- convert raw values into physical values
@@ -455,6 +467,8 @@ The current parser supports the following DBC elements:
- `SG_`
- `CM_ BO_`
- `CM_ SG_`
- `VAL_` signal value descriptions
- basic `M` / `mN` multiplexing
---
@@ -477,6 +491,35 @@ Parsed fields:
---
### Frame validation and parse errors
`BO_` definitions require a decimal CAN ID, a nonempty single-token frame name,
a colon, a decimal payload length, and a transmitter token. Spaces or tabs may
separate fields, and whitespace before the colon is accepted. Additional trailing
fields are rejected.
Numeric fields must contain decimal digits only; signs, hexadecimal notation,
fractional values, suffixes, and overflow are rejected. CAN IDs may contain the
29-bit identifier plus the optional DBC extended flag (bit 31). Bits 29 and 30
are rejected rather than silently discarded. For compatibility, unflagged IDs
above `0x7FF` are still treated as extended.
The payload length must fit `uint8_t` (`0..255`). This is a storage-range check,
not CAN or CAN FD protocol validation; no new 8-byte or 64-byte limit is imposed.
Parsing stops at the first detected error. Exceptions raised while parsing a
line are reported as `std::runtime_error` with the supplied file path and the
one-based physical line number, including blank lines:
```text
example.dbc:3: Invalid CAN ID: invalid
```
Frame and signal definitions are validated as described here; comprehensive
DBC grammar coverage is still planned. File-open errors contain the path but have no line number.
---
## Signal definition
Example:
@@ -501,6 +544,84 @@ Parsed fields:
---
### Signal validation and parse errors
`SG_` statements are matched completely. Signal names must be nonempty and
contain no whitespace. Spaces and tabs are accepted between syntax elements;
byte order and signedness remain adjacent (`@0+`, `@0-`, `@1+`, or `@1-`).
A quoted unit (which may be empty) and a nonempty comma-separated receiver
list are required. Unexpected trailing fields are rejected.
Start bits must be unsigned decimal integers fitting `uint32_t`; lengths must
be within `1..64` bits. Signs, fractional values, numeric suffixes, and overflow
are rejected for these fields. Every signal bit must fit within the frame's
declared payload length, using Intel increasing bit positions or Motorola
sawtooth traversal. This uses the stored payload length without introducing
an additional CAN or CAN FD payload limit.
Factor, offset, minimum, and maximum accept signed decimal numbers, fractions,
and scientific notation. The entire numeric token must be valid; hexadecimal
numbers, NaN, infinity, conversion overflow, and conversion underflow are
rejected. Minimum must not exceed maximum. Zero and negative factors are allowed.
Basic multiplexing markers `M` and `mN` are supported as described below.
Overlapping signals are rejected unless their branch values differ.
Duplicate frame/signal name detection remains separate work.
Invalid signal definitions stop parsing with `path:line: description`, including
when the signal exceeds the declared payload length.
---
## Basic multiplexing
```dbc
BO_ 256 Status: 3 ECU
SG_ Mode M : 0|8@1+ (1,0) [0|255] "" ECU
SG_ Temperature m1 : 8|8@1- (1,0) [-128|127] "C" ECU
SG_ Pressure m2 : 8|8@1+ (2,0) [0|510] "kPa" ECU
SG_ Counter : 16|8@1+ (1,0) [0|255] "" ECU
```
`SignalInfo` and `DecodeSignal` contain `multiplexing`: a `MultiplexRole`
(`Unconditional`, `Selector`, or `Branch`) and an exact `uint64_t` branch `value`.
Each frame may have one unsigned selector (`M`); a branch (`mN`) references that
selector implicitly. The selector may appear after its branches. `N` must contain
only decimal digits, fit `uint64_t`, and fit the selector's bit width. Leading
zeros are accepted. A selector without branches is allowed. Signed selectors,
missing selectors, multiple selectors, nested/combined markers, and extended
`SG_MUL_VAL_` statements are rejected with the originating `path:line`.
The dispatcher registers the unsupported statement handler through `TypeFactory`.
Signal bits may overlap only between branches with different selector values.
This validation uses Intel or Motorola bit traversal, including mixed byte orders.
It also rejects overlapping unconditional signals. Metadata survives the runtime
and tree builders; the optional Qt adapter does not add multiplexing roles yet.
The shared decoder extracts the selector before processing branches, compares its
**raw unsigned value**, and leaves result order equal to definition order. Factor,
offset, and `VAL_` descriptions do not influence branch selection. Unconditional
signals continue to decode. An unmapped selector value leaves all branches inactive.
Each result has `SignalDecodeStatus status`:
| Status | Meaning |
| --- | --- |
| `Valid` | Raw and physical values are available; `valid == true` |
| `Inactive` | Selector is available and chooses another branch |
| `SelectorUnavailable` | Branch activation is unknown because selector bytes are missing |
| `InsufficientPayload` | Selected or unconditional signal bytes are missing |
| `InvalidDefinition` | Invalid bit length or missing/invalid selector in manually built runtime metadata |
All statuses except `Valid` have `valid == false`; their numeric fields contain
no decoded data and `GetValueDescription()` returns nullptr. Check `status` to
distinguish inactive branches from errors. Consumers constructing runtime metadata
manually must obey the same non-overlap rules as the parser. Extended and nested
multiplexing are outside this stage and are explicitly rejected, rather than
silently decoded as unconditional signals.
---
## Comments
Frame comment example:
@@ -563,7 +684,8 @@ RawCanFrame
↓
Find frame in DecodeDatabase
↓
For each signal:
Extract multiplexor selector first (when present)
For each unconditional or active signal:
extract raw bits
apply sign extension if needed
convert to physical value
@@ -590,34 +712,44 @@ This is one of the main reasons why the runtime decode layer should be explicit
## Example Usage
## Parse DBC
Include the public headers from the `core/` include directory supplied by
`core/core.pri`:
```cpp
#include "dbc_parser.h"
#include "dbc_tree_builder.h"
#include "dbc_decode_builder.h"
#include "dbc_decoder.h"
```
### Parse DBC
```cpp
DbcParser parser;
DbcDatabase database = parser.ParseFile("example.dbc");
```
## Build UI tree
### Build UI tree
```cpp
DbcTreeBuilder treeBuilder;
std::unique_ptr<TreeNode> root = treeBuilder.Build(database);
```
## Build runtime decode database
### Build runtime decode database
```cpp
DbcDecodeBuilder decodeBuilder;
DecodeDatabase decodeDatabase = decodeBuilder.Build(database);
```
## Decode a raw frame
### Decode a raw frame
```cpp
RawCanFrame rawFrame;
rawFrame.canId = 0x123;
rawFrame.canId = 256; // EngineData from the DBC example above
rawFrame.isExtended = false;
rawFrame.data = {0x01, 0x02, 0x03, 0x04};
rawFrame.data = {0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
DbcDecoder decoder;
DecodedFrameValue decoded = decoder.Decode(decodeDatabase, rawFrame);
@@ -709,20 +841,106 @@ That is why `DecodeDatabase` is a separate layer.
---
## Why No Abstract Factory Is Used
## Statement Handler Factory
At the current stage, abstract factory is intentionally avoided.
`DbcParser` owns file reading, trimming, line numbers, and error reporting.
Each `ParseFile()` call creates a fresh `DbcParseContext` and a
`DbcStatementDispatcher`. The context contains the parsed database and current
frame; handlers receive it by reference and retain no parsing state.
The current design is already clean:
The dispatcher uses `TypeFactory<std::string, DbcStatementHandler>` to create
registered handlers once per parsing session, then reuses them for all matching
lines:
```text
parser → parsed database → decode database
↘ tree builder → UI tree
- `BO_` → `DbcFrameHandler`
- `SG_` → `DbcSignalHandler`
- `CM_` → `DbcCommentHandler`
- `VAL_` → `DbcValueDescriptionHandler`
- `SG_MUL_VAL_` → `DbcUnsupportedMultiplexingHandler`
Grammar implementations live in `core/dbc_statement_handler.cpp`; their interface,
context, and dispatcher live in `core/dbc_statement_handler.h`. `core/typefactory.h`
provides the generic registry and object creation.
To add a construct, implement a default-constructible handler deriving from
`DbcStatementHandler` with:
```cpp
void Handle(const std::string &line, DbcParseContext &context) const override;
```
Introducing factory layers now would increase complexity without solving an immediate problem.
Register it in the dispatcher constructor:
If later the project requires multiple output representations or multiple build strategies, that can be added then.
```cpp
RegisterType<MyCustomHandler>("CUSTOM_"); // after implementing MyCustomHandler
```
Registration creates one handler; replacing a registration replaces that instance.
Register during initialization before dispatching. A line is routed using its
full first whitespace-delimited keyword, so `BO_TX_BU_` cannot match `BO_`.
Unregistered keywords remain ignored. `SG_` and `CM_` accept spaces and tabs
after their keywords.
This factory handles statements inside DBC files. A separate format-level
factory can be introduced when another file format is implemented. The decoder
and database builders remain independent of statement dispatch.
---
## Signal value descriptions (`VAL_`)
Signal descriptions attach text to exact raw integer values:
```dbc
BO_ 256 Status: 8 ECU
SG_ State : 0|8@1+ (1,0) [0|255] "" ECU
VAL_ 256 State 0 "Off" 1 "On" 2 "Error";
```
Each statement must occupy one physical line, contain at least one integer/text
pair, and end with a semicolon. Spaces and tabs are accepted between fields;
descriptions may contain whitespace, semicolons, and empty text. Inside quoted
text, `\"` and `\\` represent a quote and a backslash; other escapes are rejected.
Keys are decimal integers in `INT64_MIN..UINT64_MAX`, with an optional minus
sign; plus signs, fractions, hexadecimal numbers, exponents, and overflow are
rejected. Keys never pass through `double`.
`VAL_` may appear before or after its frame and signal declarations. References
are resolved after reading the file using the same CAN ID normalization as
`BO_`, including bit 31 for extended identifiers. Standard and extended frames
with the same normalized ID remain distinct. Missing or ambiguous references,
malformed statements, and duplicate integer keys produce `path:line: description`
errors at the originating `VAL_` line. Distinct keys from multiple statements
are merged; `0`, `00`, and `-0` are the same key. Keys need not fit the referenced
signal's bit width or signedness; unreachable keys simply cannot match a decode.
Mappings are available as `SignalInfo::valueDescriptions` and
`DecodeSignal::valueDescriptions`, and survive both database builders, including
`TreeNode::GetSignal()`. Consumers can look up a decoded result directly:
```cpp
const DecodedSignalValue &value = decodedFrame.signals.at(0);
if (const std::string *description = value.GetValueDescription()) {
std::cout << *description;
}
```
`GetValueDescription()` uses the exact raw integer before factor/offset scaling.
It returns `nullptr` for an invalid decode or an unknown value; numeric decoding
and `physicalValue` are unchanged. A mapped empty string returns a non-null
pointer. The pointer belongs to the signal definition and stays valid while that
definition and mapping remain alive and unchanged.
For metadata or standalone raw values, use
`FindValueDescription(signal.valueDescriptions, rawValue)`, where `rawValue` is
`RawSignalValue` (`std::variant<std::int64_t, std::uint64_t>`). The helper matches
nonnegative signed and unsigned values identically and keeps negative values
distinct from large unsigned values. Stored keys use negative `int64_t` and
nonnegative `uint64_t`; when constructing mappings manually, normalize keys
with `NormalizeValueKey()` before insertion.
Named `VAL_TABLE_` tables, environment-variable mappings, multiline statements,
are outside this implementation; the optional Qt adapter exposes signal mappings.
---
@@ -732,8 +950,8 @@ This is still a minimal implementation.
Not supported yet:
- multiplexed signals
- `VAL_` tables
- extended and nested multiplexing (`SG_MUL_VAL_`, `mNM`)
- named `VAL_TABLE_` tables and environment-variable value descriptions
- `BA_` attributes
- `BA_DEF_` definitions
- advanced comment handling
@@ -741,7 +959,20 @@ Not supported yet:
- full J1939 validation
- extensive edge-case handling for unusual DBC formatting
Motorola extraction is implemented, but it should still be verified carefully against real-world DBC files and expected values.
Additional behavior to account for:
- unregistered DBC keywords are ignored
- an `SG_` statement before the first frame is rejected
- duplicate frame keys (normalized CAN ID and frame type) and repeated signal
names within a frame are rejected at their definition lines; manually created
databases are also checked for ambiguous `VAL_` references during resolution
- payload lengths are checked against storage bounds (`0..255`), rather than
CAN or CAN FD protocol limits
- comment handling is limited to the supported forms and already parsed targets
Motorola extraction uses DBC sawtooth numbering: a start bit of 7 traverses
`7..0, 15..8, 23..16`. Regression tests cover aligned and unaligned signals,
byte boundaries, and 64-bit values.
---
@@ -754,6 +985,7 @@ A practical development order would be:
- `BO_`
- `SG_`
- `CM_`
- `VAL_` signal value descriptions
- normalized CAN ID
- `isExtended`
- transmitter
@@ -767,17 +999,13 @@ A practical development order would be:
Recommended additions:
- parent pointer in `TreeNode`
- Qt model adapter
- `VAL_` support for enum-style signals
- better display strings for UI
- selective decoding of only chosen signals
### Stage 3
Recommended additions:
- multiplexing support
- basic multiplexing (implemented)
- attribute parsing
- richer J1939 support
- CSV export of decoded traces
@@ -796,46 +1024,426 @@ Advanced functionality:
## Build Integration
The module does not depend on any specific build system.
The repository supplies qmake projects. A C++17 compiler is required; the root
build also requires Qt Core and Qt Test development packages. Other build
systems can compile the sources listed in `core/core_files.pri`; no CMake
configuration is currently provided.
It can be integrated with:
Qt-dependent qmake targets share `qt/qt_version.pri`, which rejects Qt versions
other than 6.8.2. The core library remains independent of Qt libraries.
- CMake
- qmake
- Makefile
Open `dbc.pro` in Qt Creator to see two subprojects: `core` and `tests`.
`core/core.pro` builds the C++17 static library `dbc_core` without a Qt dependency.
`tests/tests.pro` builds the QtTest executable `dbc_tests` and links that library.
The root project declares `tests.depends = core` for parallel builds.
Just add the source files to the project.
Build out of source with Qt 6.8.2:
```sh
mkdir build
cd build
qmake6 ../dbc.pro
make -j
make check
```
`core/core_files.pri` lists the library sources and headers.
Consumers include `core/core.pri` for include paths and library linkage; the test
source lists live in `tests/parser_tests.pri` and `tests/decoder_tests.pri`.
When building a consumer separately, pass
`DBC_CORE_BUILD_DIR=/absolute/path/to/build/core` to qmake.
### Build core without Qt libraries
From the repository root:
```sh
mkdir -p build/core
cd build/core
qmake6 ../../core/core.pro
make -j
```
qmake is still the build tool; this target does not link Qt libraries.
### Optional Qt model adapter
The adapter and its `QAbstractItemModelTester` suite use Qt 6.8.2.
The adapter itself links only Qt Core.
The model test executable additionally links QtGui and uses QGuiApplication so
QAbstractItemModelTester can resolve graphical metatypes such as QPixmap. It
defaults to the `offscreen` platform when `QT_QPA_PLATFORM` is unset or empty;
no display server is required. An explicit platform setting is preserved.
Enable its library and focused QtTest suite:
```sh
mkdir -p build-qt
cd build-qt
qmake6 ../dbc.pro CONFIG+=dbc_qt
make -j
make check
```
Consumers include `qt/qt.pri` instead of `core/core.pri`, and set
`DBC_CORE_BUILD_DIR` and `DBC_QT_BUILD_DIR` to the corresponding library build
directories when building separately. A widget application also needs `QT += widgets`. The adapter integration enables
`no_keywords`, because core metadata has a `signals` member; use `Q_SIGNALS`,
`Q_SLOTS`, and `Q_EMIT` in consuming Qt classes.
```cpp
#include "dbc_parser.h"
#include "dbc_tree_builder.h"
#include "dbc_tree_model.h"
#include <QTreeView>
// Run after constructing QApplication; view owns the model through QObject.
QTreeView view;
DbcTreeModel *model = new DbcTreeModel(&view);
model->SetTree(DbcTreeBuilder().Build(DbcParser().ParseFile("example.dbc")));
view.setModel(model);
view.expandAll();
view.show();
// On reload, pass a newly built tree to SetTree(); to clear:
// model->SetTree(nullptr);
```
The root is invisible: frames are top-level rows, signals are their children.
Only column zero has children. `parent()` always returns column zero.
The model takes exclusive ownership of the tree; do not retain mutable aliases.
Metadata is copied by the tree builder, so the parsed database may be destroyed.
`TreeNode::GetParent()` is non-owning and `GetRow()` gives the zero-based sibling
position (zero for a detached node/root). Nodes cannot be copied or moved;
transferring their `unique_ptr` ownership preserves addresses and navigation.
Call `SetTree()` on the model's thread. It accepts a detached Root or nullptr,
uses `beginResetModel()`/`endResetModel()`, and destroys the previous tree during
reset. All ordinary QModelIndex values expire on reset and must not be reused;
QPersistentModelIndex values are invalidated by Qt. Destroying the model also
invalidates indexes. Invalid and foreign indexes return no data/flags/children.
Valid items are enabled and selectable, with no editing support.
| Column (zero-based enum) | Frame display | Signal display |
| --- | --- | --- |
| 0 `Name` | Name | Name |
| 1 `CanId` | Normalized hexadecimal ID | Empty |
| 2 `PayloadLength` | Bytes | Empty |
| 3 `StartBit` | Empty | DBC start bit |
| 4 `BitLength` | Empty | Bit count |
| 5 `ByteOrder` | Empty | Intel / Motorola |
| 6 `Signed` | Empty | Signed / Unsigned |
| 7 `Unit` | Empty | Unit |
| 8 `Comment` | Comment | Comment |
Horizontal DisplayRole headers describe these columns; other header requests
return invalid QVariant. ToolTipRole returns the comment on every column.
Custom roles also apply on every column; inapplicable roles return invalid QVariant:
| Role | Node types | QVariant content |
| --- | --- | --- |
| `NodeTypeRole` | Frame, signal | int corresponding to NodeType |
| `CanIdRole`, `PayloadLengthRole`, `ExtendedRole` | Frame | uint, int, bool |
| `StartBitRole`, `BitLengthRole` | Signal | uint |
| `LittleEndianRole`, `SignedRole` | Signal | bool |
| `UnitRole` | Signal | QString |
| `CommentRole` | Frame, signal | QString |
| `ValueDescriptionsRole` | Signal | QVariantList of QVariantMap entries |
Each value-description entry contains `value` (qlonglong for negative keys,
qulonglong for nonnegative keys) and `description` (QString). This preserves the
full signed/unsigned 64-bit range without converting through double. An unmapped
signal returns an empty list. Data comes from `SignalInfo::valueDescriptions`.
Unsupported roles return invalid QVariant.
### Standalone tree tests without Qt
From the repository root, use only a C++17 compiler:
```sh
c++ -std=c++17 -Icore tests/tree_node_test.cpp core/tree_node.cpp \
core/dbc_tree_builder.cpp -o /tmp/dbc_tree_node_test
/tmp/dbc_tree_node_test
```
### Build and run the demo
After building core, run these commands from the repository root:
```sh
mkdir -p build/examples
cd build/examples
qmake6 ../../examples/demo.pro DBC_CORE_BUILD_DIR=../core
make -j
./dbc_demo /absolute/path/to/example.dbc
```
The demo prints the parsed tree and decodes eight zero bytes using the first
frame definition. Replace that sample payload in `examples/main.cpp` to feed
live CAN data or trace records.
### Generate API documentation
With Doxygen installed, run from the repository root:
```sh
doxygen Doxyfile
```
Open `docs/html/index.html` to view the generated reference.
---
## Summary
## Regression tests
This module is now split into two intentionally separate layers:
See [tests/README.md](tests/README.md) for QtTest build and execution commands.
Tests cover frame validation and error locations, Intel and Motorola extraction,
signal syntax and payload bounds, `VAL_` syntax and reference validation,
raw description lookup and preservation through both builders, statement dispatch, signed and unsigned
64-bit boundaries, physical conversion, numeric output, and invalid signal
payloads.
### Parsed representation
## Measuring code coverage
Used for:
Coverage instrumentation is separate from the QtTest suite named `CoverageTest`:
that suite runs extra regression checks, but coverage counters require a specially
instrumented build. Use a separate build directory for each coverage tool.
- storing parsed DBC content
- browsing
- UI tree generation
### GCC, gcov, and LCOV on Debian/Ubuntu
### Runtime decode representation
Install the build and report tools:
Used for:
- fast frame lookup
- live CAN decode
- trace decode
- physical value conversion
That separation is the main architectural improvement.
In short, the system now looks like this:
```text
DBC parser → DbcDatabase → DecodeDatabase → DbcDecoder
↘ TreeNode → future UI
```sh
sudo apt install build-essential qt6-base-dev qt6-base-dev-tools qmake6 lcov
# Optional IDE:
sudo apt install qtcreator
```
This gives FrameTap a much better foundation for real use, because both browsing and decoding are supported without forcing one representation to do the other's job.
GCC supplies `gcov`; the `lcov` package supplies `lcov` and `genhtml`. Use the
`gcov` version matching the GCC used by the selected Qt Creator kit. These
instructions use GCC and Qt 6.8.2.
From the repository root, create a fresh coverage build. `--coverage` must be
passed to both compilation and linking; Debug avoids optimization that can make
source-level results harder to interpret. `-fprofile-abs-path` makes source paths
in the coverage data independent of the compilation working directory.
```sh
DBC_SOURCE_DIR="$(pwd)"
mkdir -p build-coverage
cd build-coverage
qmake6 "$DBC_SOURCE_DIR/dbc.pro" \
CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release \
'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' \
'QMAKE_LFLAGS+=--coverage'
make -j4
# The standalone tree test is not a qmake target; instrument it separately.
mkdir -p standalone
c++ -std=c++17 -O0 -g --coverage -fprofile-abs-path \
-I"$DBC_SOURCE_DIR/core" \
"$DBC_SOURCE_DIR/tests/tree_node_test.cpp" \
"$DBC_SOURCE_DIR/core/tree_node.cpp" \
"$DBC_SOURCE_DIR/core/dbc_tree_builder.cpp" \
-o standalone/tree_node_tests
# Capture a zero-count baseline so unexecuted compiled code remains in the report.
lcov --capture --initial --directory . --branch-coverage \
--include "$DBC_SOURCE_DIR/core/*" --include "$DBC_SOURCE_DIR/qt/*" \
--output-file baseline.info
# Reset counts before each new measurement; otherwise executions accumulate.
lcov --zerocounters --directory .
make check
./standalone/tree_node_tests
lcov --capture --directory . --branch-coverage \
--include "$DBC_SOURCE_DIR/core/*" --include "$DBC_SOURCE_DIR/qt/*" \
--output-file executed.info
lcov --add-tracefile baseline.info --add-tracefile executed.info \
--branch-coverage --output-file coverage.info
genhtml coverage.info --branch-coverage --demangle-cpp --output-directory html
lcov --summary coverage.info --branch-coverage
```
Open `build-coverage/html/index.html` in a browser. The report includes the
library's `core/` and `qt/` sources and instantiated header code; test sources,
generated moc files, and Qt/STL headers are excluded. Click a filename to inspect
execution counts, uncovered lines, and branch outcomes. Branch coverage is a
separate metric: executing a line does not necessarily exercise every outcome.
C++ branch data can also include compiler-generated exception paths.
For another run with unchanged sources, repeat the reset, test execution,
capture, merge, and HTML generation steps. After changing sources or compiler
flags, rebuild and regenerate `baseline.info` before measuring again. A fresh
build directory avoids mixing old profiling data with a different build.
An initial measurement with GCC 14.2 and Qt 6.8.2 on 2026-10-07, including both
QtTest executables and the standalone tree test, yielded 97.8% line coverage
(724/740) and 70.7% branch coverage (833/1178). These are a snapshot, not fixed
expected values for later changes or other toolchains.
After adding direct comment-handler and ambiguous `VAL_` reference tests, the
same configuration measured 98.4% line coverage (728/740) and 71.4% branch
coverage (841/1178).
See [GCC instrumentation options](https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html)
and the [LCOV project documentation](https://github.com/linux-test-project/lcov).
### Configure the GCC coverage build in Qt Creator
1. Open `dbc.pro` and select a GCC kit with Qt 6.8.2.
2. In **Projects > Build Settings**, clone **Debug** as **Coverage**.
3. Choose a separate build directory, such as `build-coverage`.
4. Expand the **qmake** build step and add these **Additional arguments**:
```text
CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release "QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path" "QMAKE_LFLAGS+=--coverage"
```
5. Run qmake and build the project. Both `dbc_tests` and `dbc_model_tests` must
run to include coverage from the core and optional model adapter.
6. In a terminal in the coverage build directory, compile the standalone test
and run the LCOV/report commands above. Set `DBC_SOURCE_DIR` to the absolute
repository path if using a new terminal. `make check` runs both QtTest
executables; the standalone tree executable must be run separately.
7. View `html/index.html` in a browser. This workflow produces HTML reports;
it does not require a licensed coverage toolchain.
### Configure all build variants in Qt Creator
The local `dbc.pro.user` stores machine-specific kit IDs and build/run settings.
It is ignored by Git (`*.user`) and should not be committed or copied between
machines. Recreate the configurations below through the UI when setting up a
new checkout. The `Qt4ProjectManager` identifiers inside `.user` are historical
Qt Creator setting names; the project still requires Qt 6.8.2.
The local configuration set uses these independent build directories:
| Configuration | Build directory example | Purpose |
| --- | --- | --- |
| Debug | `/tmp/build/dbc/Desktop-Debug` | Core library and parser/decoder/coverage regression tests |
| Release | `/tmp/build/dbc/Desktop-Release` | The same targets with release settings |
| Profile | `/tmp/build/dbc/Desktop-Profile` | Existing Qt Creator profiling configuration; not code coverage |
| Debug Qt Models | `/tmp/build/dbc/Desktop-Debug-Qt-Models` | Debug targets plus optional adapter and model tests |
| Release Qt Models | `/tmp/build/dbc/Desktop-Release-Qt-Models` | Release targets plus optional adapter and model tests |
| Debug Qt Models Strict | `/tmp/build/dbc/Desktop-Debug-Qt-Models-Strict` | Model build with `QT_FATAL_WARNINGS=1` for builds and runs |
| Coverage | `/tmp/build/dbc/Desktop-Coverage` | Instrumented core/model build, test execution, and LCOV HTML report |
| Core Only | `/tmp/build/dbc/Desktop-Core-Only` | The Qt-free core static library |
| Tree Tests | `/tmp/build/dbc/Desktop-Tree-Tests` | Standalone C++17 tree test without Qt |
| Demo | `/tmp/build/dbc/Desktop-Demo` | Core library and command-line demo |
The temporary paths are examples; choose permanent build directories if desired.
Do not share a build directory between these configurations.
To add the ordinary qmake configurations:
1. Open `dbc.pro` with a GCC/Qt 6.8.2 kit.
2. Go to **Projects > Build Settings**. Keep the existing Debug, Release, and
Profile configurations. Remove or disable a Coco build step if one remains.
3. Select Debug, press **Clone**, and name the clone **Debug Qt Models**. Set
its build directory from the table and add `CONFIG+=dbc_qt` to the qmake
step's **Additional arguments**.
4. Clone Release as **Release Qt Models** with the same qmake argument and its
own build directory.
5. Clone Debug Qt Models as **Debug Qt Models Strict**. In **Build Environment**,
add `QT_FATAL_WARNINGS=1`. Run configurations should use the build environment.
6. Clone Debug Qt Models as **Coverage**. In qmake **Additional arguments**, use:
```text
CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release "QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path" "QMAKE_LFLAGS+=--coverage"
```
7. For Coverage, select **Add Build Step > Custom Process Step** after qmake
and Make, then set:
| Field | Value |
| --- | --- |
| Command | `/bin/sh` |
| Arguments | `"%{sourceDir}/tests/coverage_report.sh" "%{sourceDir}" "%{buildDir}"` |
| Working directory | `%{buildDir}` |
This script compiles the standalone tree test, resets counters, runs both
QtTest executables and the tree test, and generates `%{buildDir}/html/index.html`.
It stops if any test fails. Therefore building Coverage also executes tests.
`lcov` and `genhtml` must be installed. Use this configuration with the GCC kit;
`gcov` and the compiler used for the standalone test must match that kit.
8. Run qmake and build each new configuration once. The default root builds
expose `dbc_tests`; model configurations also expose `dbc_model_tests`.
Qt Creator expands `%{sourceDir}` and `%{buildDir}` in custom steps to the source
and active build directories. Use the field's variable chooser if needed.
For the three independent builds, clone Debug, assign the name and build
directory from the table, and replace its qmake/Make build steps with the custom
process steps below. These steps are local IDE settings and do not change
`dbc.pro`. Give each step a descriptive name and retain the listed order.
For **Core Only**:
| Command | Arguments | Working directory |
| --- | --- | --- |
| `/usr/bin/mkdir` | `-p "%{buildDir}"` | `%{sourceDir}` |
| `/usr/bin/qmake6` | `"%{sourceDir}/core/core.pro" CONFIG+=debug CONFIG-=release` | `%{buildDir}` |
| `/usr/bin/make` | `-j4` | `%{buildDir}` |
Keep a clean step with `make clean` in `%{buildDir}`. Core Only creates a static
library, so there is no executable to run.
For **Tree Tests**:
1. Add a custom step with command `/usr/bin/mkdir`, arguments `-p "%{buildDir}"`,
and working directory `%{sourceDir}`.
2. Add a custom step with command `/usr/bin/c++`, working directory `%{buildDir}`,
and these arguments:
```text
-std=c++17 -O0 -g -I"%{sourceDir}/core" "%{sourceDir}/tests/tree_node_test.cpp" "%{sourceDir}/core/tree_node.cpp" "%{sourceDir}/core/dbc_tree_builder.cpp" -o "%{buildDir}/tree_node_tests"
```
3. Remove the default Make clean step: this direct compiler build creates no
Makefile. Run the resulting executable as described below.
For **Demo**:
| Command | Arguments | Working directory |
| --- | --- | --- |
| `/usr/bin/mkdir` | `-p "%{buildDir}/core" "%{buildDir}/examples"` | `%{sourceDir}` |
| `/usr/bin/qmake6` | `"%{sourceDir}/core/core.pro" CONFIG+=debug CONFIG-=release` | `%{buildDir}/core` |
| `/usr/bin/make` | `-j4` | `%{buildDir}/core` |
| `/usr/bin/qmake6` | `"%{sourceDir}/examples/demo.pro" "DBC_CORE_BUILD_DIR=%{buildDir}/core" CONFIG+=debug CONFIG-=release` | `%{buildDir}/examples` |
| `/usr/bin/make` | `-j4` | `%{buildDir}/examples` |
Replace the default clean step with two custom steps: `/usr/bin/make` with
arguments `clean`, first in `%{buildDir}/examples`, then in `%{buildDir}/core`.
To configure execution and switch variants:
1. Go to **Projects > Run Settings** and select the appropriate qmake target:
`dbc_tests` for ordinary builds or `dbc_model_tests` for model builds.
2. To run all QtTest suites together, add a **Custom Executable** named
**All QtTest suites**, with executable `/usr/bin/make`, arguments `check`,
and working directory `%{buildDir}`. Use it with an ordinary or model qmake
configuration. Coverage already runs every test in its final build step.
3. For Tree Tests, add a **Custom Executable** named **Standalone tree test**,
executable `%{buildDir}/tree_node_tests`, working directory `%{buildDir}`,
and no arguments.
4. For Demo, add a **Custom Executable** named **Demo**, executable
`%{buildDir}/examples/dbc_demo`, working directory `%{buildDir}/examples`.
Set **Command line arguments** to the quoted absolute path of your DBC file.
5. For Coverage on Linux, optionally add a **Custom Executable** named
**Coverage HTML report**, executable `/usr/bin/xdg-open`, arguments
`"%{buildDir}/html/index.html"`, working directory `%{buildDir}`. Running it
opens the generated report in the default browser.
6. Use the kit/build/run selector above the Run button to choose the build
configuration and its corresponding executable. Build with **Ctrl+B**,
then run with **Ctrl+R**. The Build Settings configuration list can also
switch the active build.
7. If `.user` was edited externally, close and reopen the project so Qt Creator
reads the new settings. Do not edit it while the project is open, because
Qt Creator can overwrite external changes when saving its session.
See Qt Creator's [build configuration guide](https://doc.qt.io/qtcreator/creator-build-settings.html)
and [run configuration guide](https://doc.qt.io/qtcreator/creator-run-settings.html).
+168
View File
@@ -0,0 +1,168 @@
# 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-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
+23
View File
@@ -0,0 +1,23 @@
SOURCES += \
$$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/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 */
+56
View File
@@ -0,0 +1,56 @@
/**
* @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 (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;
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(targetSignal);
}
result.frames.push_back(targetFrame);
result.frameIndexByKey[FrameKey(targetFrame.canId, targetFrame.isExtended)] =
result.frames.size() - 1U;
}
return result;
}
@@ -19,13 +19,13 @@
* @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.
*/
DecodeDatabase Build (const DbcDatabase &source) const;
DecodeDatabase Build(const DbcDatabase &source) const;
};
#endif /* DBC_DECODE_BUILDER_H */
+200
View File
@@ -0,0 +1,200 @@
/**
* @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;
const SelectorState selector = ReadSelector(*definition, frame);
for (const DecodeSignal &signal : definition->signals)
result.signals.push_back(DecodeOneSignal(signal, frame, selector));
return result;
}
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 &&
signal.length > 0U && signal.length <= 64U;
selector.available = selector.valid && ExtractUnsigned(frame.data, signal, selector.value);
return selector;
}
DecodedSignalValue DbcDecoder::DecodeOneSignal(const DecodeSignal &signal,
const RawCanFrame &frame,
const SelectorState &selector) {
DecodedSignalValue decoded;
std::uint64_t unsignedValue = 0U;
decoded.definition = &signal;
if (signal.length == 0U || signal.length > 64U ||
(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;
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::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
* 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);
}
+124
View File
@@ -0,0 +1,124 @@
/**
* @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
};
/**
* @brief One decoded signal value.
*/
struct DecodedSignalValue {
const DecodeSignal *definition = nullptr; /**< Signal definition. */
RawSignalValue rawValue = std::uint64_t(0U); /**< Exact signed or unsigned raw value. */
double physicalValue = 0.0; /**< Converted physical value. */
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 {
const DecodeFrame *definition = nullptr; /**< Frame definition. */
std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
bool valid = false; /**< true if frame was matched. */
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 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:
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,
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 */
+48
View File
@@ -0,0 +1,48 @@
/**
* @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 <stdexcept>
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;
DbcParseContext context{database, nullptr};
const DbcStatementDispatcher dispatcher;
std::size_t lineNumber = 0U;
std::string line;
while (std::getline(input, line)) {
++lineNumber;
line = dbc_detail::TrimText(line);
if (line.empty())
continue;
try {
context.lineNumber = lineNumber;
dispatcher.Dispatch(line, context);
} catch (const std::exception &error) {
throw std::runtime_error(filePath + ":" + std::to_string(lineNumber) +
": " + error.what());
}
}
context.ResolveValueDescriptions(filePath);
context.ValidateMultiplexing(filePath);
return database;
}
+49
View File
@@ -0,0 +1,49 @@
/**
* @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_database.h"
/**
* @brief Minimal DBC parser.
*
* Supports:
* - BO_
* - SG_
* - CM_ BO_
* - CM_ SG_
* - basic M / mN multiplexing
* - VAL_ signal value descriptions
*
* Ignores:
* - attributes
* - named VAL_TABLE_ 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.
* 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;
};
#endif /* DBC_PARSER_H */
+518
View File
@@ -0,0 +1,518 @@
// SPDX-License-Identifier: MIT
#include "dbc_statement_handler.h"
#include "text_utils.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;
}
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);
std::size_t consumed = 0U;
double value;
try {
value = std::stod(text, &consumed);
} catch (const std::exception &) {
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
}
if (consumed != text.size() || !std::isfinite(value))
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 = ParseDecimal(
idText, std::numeric_limits<std::uint32_t>::max(), "CAN ID");
// Only bit 31 may accompany the actual 29-bit identifier.
if ((rawCanId & 0x60000000U) != 0U)
throw std::runtime_error("CAN ID exceeds the 29-bit identifier range.");
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;
}
void DbcCommentHandler::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_" && token != "SG_")
return;
std::uint32_t rawCanId = 0U;
std::uint32_t canId = 0U;
bool isExtended = false;
std::string signalName;
stream >> rawCanId;
if (token == "SG_")
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)
return;
const std::string comment = line.substr(quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
if (token == "BO_") {
frame->comment = comment;
return;
}
SignalInfo *signal = FindSignalByName(*frame, signalName);
if (signal != nullptr)
signal->comment = comment;
}
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 + "'.");
const std::uint64_t payloadBits = static_cast<std::uint64_t>(context.currentFrame->dlc) * 8U;
std::uint64_t bit = signal.startBit;
for (std::uint32_t index = 0U; index < signal.length; ++index) {
if (bit >= payloadBits)
throw std::runtime_error("Signal exceeds the frame payload length.");
bit = NextSignalBit(bit, signal.isLittleEndian);
}
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 {
ParseCommentLine(line, context.database);
}
DbcStatementDispatcher::DbcStatementDispatcher() {
RegisterType<DbcUnsupportedMultiplexingHandler>("SG_MUL_VAL_");
RegisterType<DbcFrameHandler>("BO_");
RegisterType<DbcSignalHandler>("SG_");
RegisterType<DbcCommentHandler>("CM_");
RegisterType<DbcValueDescriptionHandler>("VAL_");
}
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 std::runtime_error(filePath + ":" + std::to_string(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 std::runtime_error(filePath + ":" + std::to_string(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 std::runtime_error(filePath + ":" + std::to_string(signalLines[frameIndex][index]) + ": " + error);
}
}
}
+91
View File
@@ -0,0 +1,91 @@
// SPDX-License-Identifier: MIT
#ifndef DBC_STATEMENT_HANDLER_H
#define DBC_STATEMENT_HANDLER_H
#include "dbc_database.h"
#include "typefactory.h"
#include <string>
#include <unordered_map>
struct PendingValueDescriptions {
std::uint32_t canId;
bool isExtended;
std::string signalName;
ValueDescriptions descriptions;
std::size_t lineNumber;
};
/** 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;
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;
private:
static void ParseCommentLine(const std::string &line, DbcDatabase &database);
};
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;
};
/** 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 */
+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 "value_descriptions.h"
#include "multiplexing.h"
#include <cstdint>
#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;
};
/**
* @brief Key for fast frame lookup.
*/
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;
}
};
/**
* @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 */
+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 */
+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 */
+177 -41
View File
@@ -1,37 +1,37 @@
<?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>
@@ -39,34 +39,34 @@
</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>
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="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>
@@ -94,38 +94,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 +129,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>
@@ -178,6 +183,15 @@
<arglist>(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</arglist>
</member>
</compound>
<compound kind="class">
<name>DbcFrameHandler</name>
<filename>classDbcFrameHandler.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>
@@ -189,6 +203,26 @@
<arglist>(const std::string &amp;filePath) const</arglist>
</member>
</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>
<filename>classDbcTreeBuilder.html</filename>
@@ -200,6 +234,20 @@
<arglist>(const DbcDatabase &amp;database) const</arglist>
</member>
</compound>
<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="struct">
<name>DecodeDatabase</name>
<filename>structDecodeDatabase.html</filename>
@@ -232,6 +280,13 @@
<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>
<name>definition</name>
@@ -240,10 +295,10 @@
<arglist></arglist>
</member>
<member kind="variable">
<type>std::int64_t</type>
<type>RawSignalValue</type>
<name>rawValue</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>a5138b825940e34689f7b3891627ee9ec</anchor>
<anchor>a503c90b4b1a610b8252c45e466367c28</anchor>
<arglist></arglist>
</member>
<member kind="variable">
@@ -408,6 +463,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 +553,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 +666,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>
@@ -635,6 +712,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 +776,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>
+56 -10
View File
@@ -1,10 +1,56 @@
/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:53: warning: Compound DbcCommentHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:37: warning: Compound DbcFrameHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:45: warning: Compound DbcSignalHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:31: warning: Compound DbcStatementHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:66: warning: Compound DbcUnsupportedMultiplexingHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:61: warning: Compound DbcValueDescriptionHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:10: warning: Compound PendingValueDescriptions 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:1450: warning: end of comment block while expecting command </tt>
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:55: 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_statement_handler.h:39: 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:26: 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:28: 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:20: 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:21: 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:22: 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:23: 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:25: warning: Member signalLines (variable) of struct DbcParseContext 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 override (function) of class DbcSignalHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:77: 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:34: 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:68: 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:63: 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:110: warning: Member frames (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:111: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:48: warning: Member status (variable) of struct DecodedSignalValue is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:42: warning: Member multiplexing (variable) of struct DecodeSignal is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:86: 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/decode_database.h:90: 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/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:99: 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:11: 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:12: 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:13: 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:14: 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:15: 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/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
+43 -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,34 @@ $(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="classDbcFrameHandler.html" target="_self">DbcFrameHandler</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="structDbcParseContext.html" target="_self">DbcParseContext</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="classDbcParser.html" target="_self">DbcParser</a></td><td class="desc">Minimal DBC parser </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="classDbcSignalHandler.html" target="_self">DbcSignalHandler</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="classDbcStatementDispatcher.html" target="_self">DbcStatementDispatcher</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="classDbcStatementHandler.html" target="_self">DbcStatementHandler</a></td><td class="desc"></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="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </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="classDbcTreeModel.html" target="_self">DbcTreeModel</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="classDbcUnsupportedMultiplexingHandler.html" target="_self">DbcUnsupportedMultiplexingHandler</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="classDbcValueDescriptionHandler.html" target="_self">DbcValueDescriptionHandler</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="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </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="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </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="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </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="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </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="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </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="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </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="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </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="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </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="structMultiplexing.html" target="_self">Multiplexing</a></td><td class="desc"></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="structPendingValueDescriptions.html" target="_self">PendingValueDescriptions</a></td><td class="desc"></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="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </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="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </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="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_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="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 +130,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>
+13 -1
View File
@@ -1,10 +1,19 @@
var annotated_dup =
[
[ "DbcCommentHandler", "classDbcCommentHandler.html", null ],
[ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ],
[ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ],
[ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ],
[ "DbcFrameHandler", "classDbcFrameHandler.html", null ],
[ "DbcParseContext", "structDbcParseContext.html", null ],
[ "DbcParser", "classDbcParser.html", "classDbcParser" ],
[ "DbcSignalHandler", "classDbcSignalHandler.html", null ],
[ "DbcStatementDispatcher", "classDbcStatementDispatcher.html", "classDbcStatementDispatcher" ],
[ "DbcStatementHandler", "classDbcStatementHandler.html", null ],
[ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ],
[ "DbcTreeModel", "classDbcTreeModel.html", null ],
[ "DbcUnsupportedMultiplexingHandler", "classDbcUnsupportedMultiplexingHandler.html", null ],
[ "DbcValueDescriptionHandler", "classDbcValueDescriptionHandler.html", null ],
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
[ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ],
[ "DecodedSignalValue", "structDecodedSignalValue.html", "structDecodedSignalValue" ],
@@ -13,7 +22,10 @@ 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" ]
[ "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#l00053">53</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#l00370">370</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>
+20 -13
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,17 +104,17 @@ $(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="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. <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">
@@ -133,7 +140,7 @@ Public Member Functions</h2></td></tr>
<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="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#l00046">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00065">DecodeFrame::canId</a>, <a class="el" href="decode__database_8h_source.html#l00055">DecodeSignal::comment</a>, <a class="el" href="decode__database_8h_source.html#l00071">DecodeFrame::comment</a>, <a class="el" href="decode__database_8h_source.html#l00067">DecodeFrame::dlc</a>, <a class="el" href="decode__database_8h_source.html#l00048">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#l00069">DecodeFrame::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00066">DecodeFrame::isExtended</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::length</a>, <a class="el" href="decode__database_8h_source.html#l00051">DecodeSignal::maximum</a>, <a class="el" href="decode__database_8h_source.html#l00050">DecodeSignal::minimum</a>, <a class="el" href="decode__database_8h_source.html#l00043">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00064">DecodeFrame::name</a>, <a class="el" href="decode__database_8h_source.html#l00049">DecodeSignal::offset</a>, <a class="el" href="decode__database_8h_source.html#l00068">DecodeFrame::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00053">DecodeSignal::receivers</a>, <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00070">DecodeFrame::transmitter</a>, <a class="el" href="decode__database_8h_source.html#l00052">DecodeSignal::unit</a>, <a class="el" href="decode__database_8h_source.html#l00054">DecodeSignal::valueDescriptions</a>, and <a class="el" href="decode__database_8h_source.html#l00047">DecodeSignal::valueType</a>.</p>
</div>
</div>
@@ -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="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>
+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('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">
@@ -96,7 +103,7 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<!-- 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>
+25 -17
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,20 +105,20 @@ $(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="memitem:ab2cfb2fb711c95d3a29365546b89f3da" id="r_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. <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: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="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. <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#l00072">72</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>
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">&#9670;&#160;</a></span>FindFrame()</h2>
<div class="memitem">
<div class="memproto">
@@ -159,7 +167,7 @@ Public Member Functions</h2></td></tr>
</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">
@@ -196,7 +204,7 @@ Public Member Functions</h2></td></tr>
<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="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#l00062">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00014">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::isExtended</a>, and <a class="el" href="dbc__decoder_8h_source.html#l00064">DecodedFrameValue::valid</a>.</p>
</div>
</div>
@@ -210,7 +218,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>
+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#l00037">37</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#l00342">342</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

+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('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">
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
<!-- 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>
+28 -20
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>
</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>
<p>Ignores:</p><ul>
<li>attributes</li>
<li>multiplexing</li>
<li>value tables </li>
<li>named VAL_TABLE_ tables </li>
</ul>
<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#l00034">34</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,14 @@ 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#l00019">19</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__statement__handler_8cpp_source.html#l00382">DbcStatementDispatcher::Dispatch()</a>.</p>
</div>
</div>
@@ -164,7 +172,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>
@@ -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#l00045">45</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#l00352">352</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#l00072">72</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#l00374">374</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#l00077">77</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#l00382">382</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#l00019">DbcParser::ParseFile()</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#l00031">31</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,15 @@
<map id="DbcStatementHandler" name="DbcStatementHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="403,5,596,91"/>
<area shape="rect" id="Node000002" title=" " alt="" coords="5,139,153,244"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="390,73,281,102,167,141,154,147,152,142,165,136,279,96,389,68"/>
<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="417,100,311,161,309,156,414,95"/>
<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="472,104,442,160,437,157,468,101"/>
<area shape="rect" id="Node000005" href="$classDbcSignalHandler.html" title=" " alt="" coords="511,159,642,224"/>
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="531,101,562,157,557,160,526,104"/>
<area shape="rect" id="Node000006" href="$classDbcUnsupportedMultiplexingHandler.html" title=" " alt="" coords="666,151,869,231"/>
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="592,95,695,149,692,154,589,100"/>
<area shape="rect" id="Node000007" href="$classDbcValueDescriptionHandler.html" title=" " alt="" coords="893,159,1093,224"/>
<area shape="poly" id="edge6_Node000001_Node000007" title=" " alt="" coords="610,66,741,95,882,136,931,156,929,161,880,141,740,101,609,72"/>
</map>
@@ -0,0 +1 @@
88ac50356cfeaecb76401f7ba1a3e39c
@@ -0,0 +1,262 @@
<?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 = 824;
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="443,-179 298,-179 298,-115 443,-115 443,-179"/>
<text text-anchor="start" x="316.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="369" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="302.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="315.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="302.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="315.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="298.5,-162 298.5,-162 443.5,-162 443.5,-162 298.5,-162"/>
<polygon fill="#666666" stroke="#666666" points="298.5,-147 298.5,-147 443.5,-147 443.5,-147 298.5,-147"/>
<polygon fill="none" stroke="#666666" points="298,-115 298,-179 443,-179 443,-115 298,-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="M287.87,-129.82C238.24,-118.65 174.46,-101.7 120.5,-79 117.36,-77.68 114.18,-76.23 111.01,-74.69"/>
<polygon fill="none" stroke="#63b8ff" points="287.4,-133.3 297.92,-132.05 288.92,-126.47 287.4,-133.3"/>
</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="M307.84,-109.88C281.63,-94.77 251.9,-77.63 228.55,-64.16"/>
<polygon fill="none" stroke="#63b8ff" points="306.17,-112.95 316.58,-114.92 309.67,-106.89 306.17,-112.95"/>
</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="M348.47,-105.93C340.76,-91.9 332.35,-76.61 325.6,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="345.53,-107.84 353.41,-114.92 351.66,-104.47 345.53,-107.84"/>
</a>
</g>
</g>
<!-- Node5 -->
<g id="Node000005" class="node">
<title>Node5</title>
<g id="a_Node000005"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="477.5,-64 379.5,-64 379.5,-15 477.5,-15 477.5,-64"/>
<text text-anchor="start" x="384.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="426.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="392" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="413.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-46.5 379.5,-46.5 477.5,-46.5 477.5,-46.5 379.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-31.5 379.5,-31.5 477.5,-31.5 477.5,-31.5 379.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="379.5,-15 379.5,-64 477.5,-64 477.5,-15 379.5,-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="M392.53,-105.93C400.24,-91.9 408.65,-76.61 415.4,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="389.34,-104.47 387.59,-114.92 395.47,-107.84 389.34,-104.47"/>
</a>
</g>
</g>
<!-- Node6 -->
<g id="Node000006" class="node">
<title>Node6</title>
<g id="a_Node000006"><a xlink:href="classDbcUnsupportedMultiplexingHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="647.5,-69.5 495.5,-69.5 495.5,-9.5 647.5,-9.5 647.5,-69.5"/>
<text text-anchor="start" x="500.5" y="-57.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="552" y="-46.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="569.5" y="-31.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="521.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="556.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="495.5,-41.5 495.5,-41.5 647.5,-41.5 647.5,-41.5 495.5,-41.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="495.5,-26.5 495.5,-26.5 647.5,-26.5 647.5,-26.5 495.5,-26.5"/>
<polygon fill="none" stroke="#bfbfbf" points="495.5,-9.5 495.5,-69.5 647.5,-69.5 647.5,-9.5 495.5,-9.5"/>
</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="M438.85,-110.12C464.04,-96.9 492.24,-82.1 516.14,-69.56"/>
<polygon fill="none" stroke="#63b8ff" points="436.95,-107.17 429.72,-114.92 440.2,-113.37 436.95,-107.17"/>
</a>
</g>
</g>
<!-- Node7 -->
<g id="Node000007" class="node">
<title>Node7</title>
<g id="a_Node000007"><a xlink:href="classDbcValueDescriptionHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="815.5,-64 665.5,-64 665.5,-15 815.5,-15 815.5,-64"/>
<text text-anchor="start" x="670.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="738.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="691" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="725.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="665.5,-46.5 665.5,-46.5 815.5,-46.5 815.5,-46.5 665.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="665.5,-31.5 665.5,-31.5 815.5,-31.5 815.5,-31.5 665.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="665.5,-15 665.5,-64 815.5,-64 815.5,-15 665.5,-15"/>
</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="M452.84,-131.25C510.66,-119.8 589.34,-102 656.5,-79 668.64,-74.84 681.4,-69.52 693.2,-64.17"/>
<polygon fill="none" stroke="#63b8ff" points="452.16,-127.81 443.02,-133.17 453.51,-134.68 452.16,-127.81"/>
</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: 15 KiB

@@ -0,0 +1,180 @@
<?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="824pt" height="187pt"
viewBox="0.00 0.00 823.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="443,-179 298,-179 298,-115 443,-115 443,-179"/>
<text text-anchor="start" x="316.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="369" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="302.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="315.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="302.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="315.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="298.5,-162 298.5,-162 443.5,-162 443.5,-162 298.5,-162"/>
<polygon fill="#666666" stroke="#666666" points="298.5,-147 298.5,-147 443.5,-147 443.5,-147 298.5,-147"/>
<polygon fill="none" stroke="#666666" points="298,-115 298,-179 443,-179 443,-115 298,-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="M287.87,-129.82C238.24,-118.65 174.46,-101.7 120.5,-79 117.36,-77.68 114.18,-76.23 111.01,-74.69"/>
<polygon fill="none" stroke="#63b8ff" points="287.4,-133.3 297.92,-132.05 288.92,-126.47 287.4,-133.3"/>
</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="M307.84,-109.88C281.63,-94.77 251.9,-77.63 228.55,-64.16"/>
<polygon fill="none" stroke="#63b8ff" points="306.17,-112.95 316.58,-114.92 309.67,-106.89 306.17,-112.95"/>
</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="M348.47,-105.93C340.76,-91.9 332.35,-76.61 325.6,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="345.53,-107.84 353.41,-114.92 351.66,-104.47 345.53,-107.84"/>
</a>
</g>
</g>
<!-- Node5 -->
<g id="Node000005" class="node">
<title>Node5</title>
<g id="a_Node000005"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="477.5,-64 379.5,-64 379.5,-15 477.5,-15 477.5,-64"/>
<text text-anchor="start" x="384.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
<text text-anchor="start" x="426.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="392" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="413.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-46.5 379.5,-46.5 477.5,-46.5 477.5,-46.5 379.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-31.5 379.5,-31.5 477.5,-31.5 477.5,-31.5 379.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="379.5,-15 379.5,-64 477.5,-64 477.5,-15 379.5,-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="M392.53,-105.93C400.24,-91.9 408.65,-76.61 415.4,-64.33"/>
<polygon fill="none" stroke="#63b8ff" points="389.34,-104.47 387.59,-114.92 395.47,-107.84 389.34,-104.47"/>
</a>
</g>
</g>
<!-- Node6 -->
<g id="Node000006" class="node">
<title>Node6</title>
<g id="a_Node000006"><a xlink:href="classDbcUnsupportedMultiplexingHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="647.5,-69.5 495.5,-69.5 495.5,-9.5 647.5,-9.5 647.5,-69.5"/>
<text text-anchor="start" x="500.5" y="-57.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="552" y="-46.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="569.5" y="-31.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="521.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="556.5" y="-16.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="495.5,-41.5 495.5,-41.5 647.5,-41.5 647.5,-41.5 495.5,-41.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="495.5,-26.5 495.5,-26.5 647.5,-26.5 647.5,-26.5 495.5,-26.5"/>
<polygon fill="none" stroke="#bfbfbf" points="495.5,-9.5 495.5,-69.5 647.5,-69.5 647.5,-9.5 495.5,-9.5"/>
</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="M438.85,-110.12C464.04,-96.9 492.24,-82.1 516.14,-69.56"/>
<polygon fill="none" stroke="#63b8ff" points="436.95,-107.17 429.72,-114.92 440.2,-113.37 436.95,-107.17"/>
</a>
</g>
</g>
<!-- Node7 -->
<g id="Node000007" class="node">
<title>Node7</title>
<g id="a_Node000007"><a xlink:href="classDbcValueDescriptionHandler.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="transparent" points="815.5,-64 665.5,-64 665.5,-15 815.5,-15 815.5,-64"/>
<text text-anchor="start" x="670.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="738.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="691" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="725.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="665.5,-46.5 665.5,-46.5 815.5,-46.5 815.5,-46.5 665.5,-46.5"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="665.5,-31.5 665.5,-31.5 815.5,-31.5 815.5,-31.5 665.5,-31.5"/>
<polygon fill="none" stroke="#bfbfbf" points="665.5,-15 665.5,-64 815.5,-64 815.5,-15 665.5,-15"/>
</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="M452.84,-131.25C510.66,-119.8 589.34,-102 656.5,-79 668.64,-74.84 681.4,-69.52 693.2,-64.17"/>
<polygon fill="none" stroke="#63b8ff" points="452.16,-127.81 443.02,-133.17 453.51,-134.68 452.16,-127.81"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 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>
@@ -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: DbcUnsupportedMultiplexingHandler 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('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="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDbcUnsupportedMultiplexingHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcUnsupportedMultiplexingHandler 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 DbcUnsupportedMultiplexingHandler:</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="classDbcUnsupportedMultiplexingHandler__inherit__graph.svg" width="214" height="224"><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:a9853fd67465f92ef587792986ea179ac" id="r_a9853fd67465f92ef587792986ea179ac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcUnsupportedMultiplexingHandler.html#a9853fd67465f92ef587792986ea179ac">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:a9853fd67465f92ef587792986ea179ac"><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="a9853fd67465f92ef587792986ea179ac" name="a9853fd67465f92ef587792986ea179ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9853fd67465f92ef587792986ea179ac">&#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 DbcUnsupportedMultiplexingHandler::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#l00442">442</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="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</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="DbcUnsupportedMultiplexingHandler" name="DbcUnsupportedMultiplexingHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="5,139,208,219"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="10,5,203,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="109,105,109,139,104,139,104,105"/>
</map>
@@ -0,0 +1 @@
1ace6705ea51cc639d0122e87818555f
@@ -0,0 +1,79 @@
<?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: DbcUnsupportedMultiplexingHandler Pages: 1 -->
<svg width="160pt" height="168pt"
viewBox="0.00 0.00 160.00 168.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 164)">
<title>DbcUnsupportedMultiplexingHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="152,-60 0,-60 0,0 152,0 152,-60"/>
<text text-anchor="start" x="5" y="-48" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="56.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="74" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="26" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="61" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="0,-32 0,-32 152,-32 152,-32 0,-32"/>
<polygon fill="#666666" stroke="#666666" points="0,-17 0,-17 152,-17 152,-17 0,-17"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-60 152,-60 152,0 0,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="148.5,-160 3.5,-160 3.5,-96 148.5,-96 148.5,-160"/>
<text text-anchor="start" x="22" y="-148" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="74.5" y="-133" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="8" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="21" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="8" y="-103" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="21" y="-103" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="4,-143 4,-143 149,-143 149,-143 4,-143"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="4,-128 4,-128 149,-128 149,-128 4,-128"/>
<polygon fill="none" stroke="#bfbfbf" points="3.5,-96 3.5,-160 148.5,-160 148.5,-96 3.5,-96"/>
</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="M76,-85.57C76,-76.97 76,-68.09 76,-60.06"/>
<polygon fill="none" stroke="#63b8ff" points="72.5,-85.83 76,-95.83 79.5,-85.83 72.5,-85.83"/>
</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.9 KiB

@@ -0,0 +1,54 @@
<?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: DbcUnsupportedMultiplexingHandler Pages: 1 -->
<svg width="160pt" height="168pt"
viewBox="0.00 0.00 160.00 168.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 164)">
<title>DbcUnsupportedMultiplexingHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="152,-60 0,-60 0,0 152,0 152,-60"/>
<text text-anchor="start" x="5" y="-48" font-family="Helvetica,sans-Serif" font-size="10.00">DbcUnsupportedMultiplexing</text>
<text text-anchor="start" x="56.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">Handler</text>
<text text-anchor="start" x="74" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="26" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="61" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="0,-32 0,-32 152,-32 152,-32 0,-32"/>
<polygon fill="#666666" stroke="#666666" points="0,-17 0,-17 152,-17 152,-17 0,-17"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-60 152,-60 152,0 0,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="148.5,-160 3.5,-160 3.5,-96 148.5,-96 148.5,-160"/>
<text text-anchor="start" x="22" y="-148" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="74.5" y="-133" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="8" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="21" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="8" y="-103" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="21" y="-103" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="4,-143 4,-143 149,-143 149,-143 4,-143"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="4,-128 4,-128 149,-128 149,-128 4,-128"/>
<polygon fill="none" stroke="#bfbfbf" points="3.5,-96 3.5,-160 148.5,-160 148.5,-96 3.5,-96"/>
</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="M76,-85.57C76,-76.97 76,-68.09 76,-60.06"/>
<polygon fill="none" stroke="#63b8ff" points="72.5,-85.83 76,-95.83 79.5,-85.83 72.5,-85.83"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 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('classDbcValueDescriptionHandler.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">DbcValueDescriptionHandler Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</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="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</a>)</td><td class="entry"><a class="el" href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</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>
@@ -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: DbcValueDescriptionHandler 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('classDbcValueDescriptionHandler.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="classDbcValueDescriptionHandler-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DbcValueDescriptionHandler 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 DbcValueDescriptionHandler:</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="classDbcValueDescriptionHandler__inherit__graph.svg" width="211" 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:a653e13364f396b54244edc2c0fdd831a" id="r_a653e13364f396b54244edc2c0fdd831a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">Handle</a> (const std::string &amp;line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &amp;context) const override</td></tr>
<tr class="separator:a653e13364f396b54244edc2c0fdd831a"><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#l00061">61</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="a653e13364f396b54244edc2c0fdd831a" name="a653e13364f396b54244edc2c0fdd831a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a653e13364f396b54244edc2c0fdd831a">&#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 DbcValueDescriptionHandler::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#l00394">394</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="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</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="DbcValueDescriptionHandler" name="DbcValueDescriptionHandler">
<area shape="rect" id="Node000001" title=" " alt="" coords="5,139,205,204"/>
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="9,5,202,91"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="108,104,108,138,103,138,103,104"/>
</map>
@@ -0,0 +1 @@
4e812f2e61b60e6fd25b2da8062e2440
@@ -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: DbcValueDescriptionHandler Pages: 1 -->
<svg width="158pt" height="157pt"
viewBox="0.00 0.00 158.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>DbcValueDescriptionHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="150,-49 0,-49 0,0 150,0 150,-49"/>
<text text-anchor="start" x="5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="73" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="25.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="60" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="0,-31.5 0,-31.5 150,-31.5 150,-31.5 0,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="0,-16.5 0,-16.5 150,-16.5 150,-16.5 0,-16.5"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-49 150,-49 150,0 0,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="147.5,-149 2.5,-149 2.5,-85 147.5,-85 147.5,-149"/>
<text text-anchor="start" x="21" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="73.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="7" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="20" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="7" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="20" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="3,-132 3,-132 148,-132 148,-132 3,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="3,-117 3,-117 148,-117 148,-117 3,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="2.5,-85 2.5,-149 147.5,-149 147.5,-85 2.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="M75,-74.77C75,-66.03 75,-57.09 75,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="71.5,-74.85 75,-84.86 78.5,-74.86 71.5,-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: DbcValueDescriptionHandler Pages: 1 -->
<svg width="158pt" height="157pt"
viewBox="0.00 0.00 158.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>DbcValueDescriptionHandler</title>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#999999" stroke="transparent" points="150,-49 0,-49 0,0 150,0 150,-49"/>
<text text-anchor="start" x="5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcValueDescriptionHandler</text>
<text text-anchor="start" x="73" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="25.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="60" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#666666" stroke="#666666" points="0,-31.5 0,-31.5 150,-31.5 150,-31.5 0,-31.5"/>
<polygon fill="#666666" stroke="#666666" points="0,-16.5 0,-16.5 150,-16.5 150,-16.5 0,-16.5"/>
<polygon fill="none" stroke="#666666" points="0,0 0,-49 150,-49 150,0 0,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="147.5,-149 2.5,-149 2.5,-85 147.5,-85 147.5,-149"/>
<text text-anchor="start" x="21" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
<text text-anchor="start" x="73.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
<text text-anchor="start" x="7" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="20" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
<text text-anchor="start" x="7" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
<text text-anchor="start" x="20" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="3,-132 3,-132 148,-132 148,-132 3,-132"/>
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="3,-117 3,-117 148,-117 148,-117 3,-117"/>
<polygon fill="none" stroke="#bfbfbf" points="2.5,-85 2.5,-149 147.5,-149 147.5,-85 2.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="M75,-74.77C75,-66.03 75,-57.09 75,-49.27"/>
<polygon fill="none" stroke="#63b8ff" points="71.5,-74.85 75,-84.86 78.5,-74.86 71.5,-74.85"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

+19 -10
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('classTreeNode.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">
@@ -95,22 +102,24 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
<tr class="odd"><td class="entry"><a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f">GetParent</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8">GetRow</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a>() const</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const TreeNode &amp;)=delete (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>operator=</b>(TreeNode &amp;&amp;)=default (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>operator=</b>(TreeNode &amp;&amp;)=delete (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a>()</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a>(const FrameInfo &amp;frame)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a>(const SignalInfo &amp;signal)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>TreeNode</b>(const TreeNode &amp;)=delete (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TreeNode</b>(TreeNode &amp;&amp;)=default (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TreeNode</b>(TreeNode &amp;&amp;)=delete (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~TreeNode</b>()=default (defined in <a class="el" href="classTreeNode.html">TreeNode</a>)</td><td class="entry"><a class="el" href="classTreeNode.html">TreeNode</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>
+111 -60
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: TreeNode 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('classTreeNode.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">
@@ -97,59 +104,63 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
<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:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create root node. <a href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">More...</a><br /></td></tr>
<tr class="memitem:a984a98d5ccf7ef1f5a18094c6821f35d" id="r_a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create root node. <br /></td></tr>
<tr class="separator:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &amp;frame)</td></tr>
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create frame node. <a href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">More...</a><br /></td></tr>
<tr class="memitem:a8e38dd591d8801d7ee3a7dbad90c67fc" id="r_a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &amp;frame)</td></tr>
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create frame node. <br /></td></tr>
<tr class="separator:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &amp;signal)</td></tr>
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create signal node. <a href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">More...</a><br /></td></tr>
<tr class="memitem:ab9f00f5253d56461bb2d420fd639c5ae" id="r_ab9f00f5253d56461bb2d420fd639c5ae"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &amp;signal)</td></tr>
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create signal node. <br /></td></tr>
<tr class="separator:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d3054a033accf3e38ea132002fc35ff"><td class="memItemLeft" align="right" valign="top"><a id="a4d3054a033accf3e38ea132002fc35ff" name="a4d3054a033accf3e38ea132002fc35ff"></a>
<tr class="memitem:a4d3054a033accf3e38ea132002fc35ff" id="r_a4d3054a033accf3e38ea132002fc35ff"><td class="memItemLeft" align="right" valign="top"><a id="a4d3054a033accf3e38ea132002fc35ff" name="a4d3054a033accf3e38ea132002fc35ff"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &amp;)=delete</td></tr>
<tr class="separator:a4d3054a033accf3e38ea132002fc35ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6ce97dcf532b452d520452b6d000daa"><td class="memItemLeft" align="right" valign="top"><a id="ad6ce97dcf532b452d520452b6d000daa" name="ad6ce97dcf532b452d520452b6d000daa"></a>
<tr class="memitem:ad6ce97dcf532b452d520452b6d000daa" id="r_ad6ce97dcf532b452d520452b6d000daa"><td class="memItemLeft" align="right" valign="top"><a id="ad6ce97dcf532b452d520452b6d000daa" name="ad6ce97dcf532b452d520452b6d000daa"></a>
<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &amp;)=delete</td></tr>
<tr class="separator:ad6ce97dcf532b452d520452b6d000daa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35724af755b5d0c43de40a723ef81ec1"><td class="memItemLeft" align="right" valign="top"><a id="a35724af755b5d0c43de40a723ef81ec1" name="a35724af755b5d0c43de40a723ef81ec1"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&amp;)=default</td></tr>
<tr class="separator:a35724af755b5d0c43de40a723ef81ec1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88fbcbec9c64d888b19c5edb95059a95"><td class="memItemLeft" align="right" valign="top"><a id="a88fbcbec9c64d888b19c5edb95059a95" name="a88fbcbec9c64d888b19c5edb95059a95"></a>
<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&amp;)=default</td></tr>
<tr class="separator:a88fbcbec9c64d888b19c5edb95059a95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt; child)</td></tr>
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add child node. <a href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">More...</a><br /></td></tr>
<tr class="memitem:ad6095a87ec2bb2834041a5be0ca745fd" id="r_ad6095a87ec2bb2834041a5be0ca745fd"><td class="memItemLeft" align="right" valign="top"><a id="ad6095a87ec2bb2834041a5be0ca745fd" name="ad6095a87ec2bb2834041a5be0ca745fd"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&amp;)=delete</td></tr>
<tr class="separator:ad6095a87ec2bb2834041a5be0ca745fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a3f8862ad7562e03e77b761eb94804c" id="r_a9a3f8862ad7562e03e77b761eb94804c"><td class="memItemLeft" align="right" valign="top"><a id="a9a3f8862ad7562e03e77b761eb94804c" name="a9a3f8862ad7562e03e77b761eb94804c"></a>
<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &amp;&amp;)=delete</td></tr>
<tr class="separator:a9a3f8862ad7562e03e77b761eb94804c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6161f2ebb92184eab4215d121870e788" id="r_a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr&lt; <a class="el" href="classTreeNode.html">TreeNode</a> &gt; child)</td></tr>
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add child node. <br /></td></tr>
<tr class="separator:a6161f2ebb92184eab4215d121870e788"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a> () const</td></tr>
<tr class="memdesc:abdd82460187dca8d3e5d66f5d5c529ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get child count. <a href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">More...</a><br /></td></tr>
<tr class="memitem:aa48fbc17903eb8cfa40353e29f853c6f" id="r_aa48fbc17903eb8cfa40353e29f853c6f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f">GetParent</a> () const</td></tr>
<tr class="separator:aa48fbc17903eb8cfa40353e29f853c6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad501f97eeec7f7d3353bfae838fbb6a8" id="r_ad501f97eeec7f7d3353bfae838fbb6a8"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8">GetRow</a> () const</td></tr>
<tr class="separator:ad501f97eeec7f7d3353bfae838fbb6a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea" id="r_abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a> () const</td></tr>
<tr class="memdesc:abdd82460187dca8d3e5d66f5d5c529ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get child count. <br /></td></tr>
<tr class="separator:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a> (std::size_t index) const</td></tr>
<tr class="memdesc:a4727ff801a2d1b9323c5ae50a35457a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get child by index. <a href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">More...</a><br /></td></tr>
<tr class="memitem:a4727ff801a2d1b9323c5ae50a35457a6" id="r_a4727ff801a2d1b9323c5ae50a35457a6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a> (std::size_t index) const</td></tr>
<tr class="memdesc:a4727ff801a2d1b9323c5ae50a35457a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get child by index. <br /></td></tr>
<tr class="separator:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classTreeNode.html">TreeNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">GetChild</a> (std::size_t index)</td></tr>
<tr class="memdesc:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get mutable child by index. <a href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">More...</a><br /></td></tr>
<tr class="memitem:a81047bd7d2a4cc96b9ef5e20d0d63b5f" id="r_a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classTreeNode.html">TreeNode</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">GetChild</a> (std::size_t index)</td></tr>
<tr class="memdesc:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get mutable child by index. <br /></td></tr>
<tr class="separator:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16">NodeType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a> () const</td></tr>
<tr class="memdesc:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get node type. <a href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">More...</a><br /></td></tr>
<tr class="memitem:afa2f4b0aafa12d3d41ed00df8e0250c9" id="r_afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16">NodeType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a> () const</td></tr>
<tr class="memdesc:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get node type. <br /></td></tr>
<tr class="separator:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a> () const</td></tr>
<tr class="memdesc:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get display name. <a href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">More...</a><br /></td></tr>
<tr class="memitem:aaac5b8d9dc9e5ae1f367d1adbcf20e18" id="r_aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a> () const</td></tr>
<tr class="memdesc:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get display name. <br /></td></tr>
<tr class="separator:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc503b40004764163605d6dbdb4ef811"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structFrameInfo.html">FrameInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a> () const</td></tr>
<tr class="memdesc:afc503b40004764163605d6dbdb4ef811"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get frame payload if node is frame. <a href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">More...</a><br /></td></tr>
<tr class="memitem:afc503b40004764163605d6dbdb4ef811" id="r_afc503b40004764163605d6dbdb4ef811"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structFrameInfo.html">FrameInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a> () const</td></tr>
<tr class="memdesc:afc503b40004764163605d6dbdb4ef811"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get frame payload if node is frame. <br /></td></tr>
<tr class="separator:afc503b40004764163605d6dbdb4ef811"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a226518612d0d00b5988a2c44fc21d3f1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structSignalInfo.html">SignalInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a> () const</td></tr>
<tr class="memdesc:a226518612d0d00b5988a2c44fc21d3f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get signal payload if node is signal. <a href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">More...</a><br /></td></tr>
<tr class="memitem:a226518612d0d00b5988a2c44fc21d3f1" id="r_a226518612d0d00b5988a2c44fc21d3f1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structSignalInfo.html">SignalInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a> () const</td></tr>
<tr class="memdesc:a226518612d0d00b5988a2c44fc21d3f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get signal payload if node is signal. <br /></td></tr>
<tr class="separator:a226518612d0d00b5988a2c44fc21d3f1"><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 >Tree node for later use in model/view or other hierarchy consumers. </p>
<div class="textblock"><p>Tree node for later use in model/view or other hierarchy consumers. </p>
<p class="definition">Definition at line <a class="el" href="tree__node_8h_source.html#l00035">35</a> of file <a class="el" href="tree__node_8h_source.html">tree_node.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a984a98d5ccf7ef1f5a18094c6821f35d" name="a984a98d5ccf7ef1f5a18094c6821f35d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">&#9670;&nbsp;</a></span>TreeNode() <span class="overload">[1/3]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">&#9670;&#160;</a></span>TreeNode() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -170,7 +181,7 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a id="a8e38dd591d8801d7ee3a7dbad90c67fc" name="a8e38dd591d8801d7ee3a7dbad90c67fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e38dd591d8801d7ee3a7dbad90c67fc">&#9670;&nbsp;</a></span>TreeNode() <span class="overload">[2/3]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8e38dd591d8801d7ee3a7dbad90c67fc">&#9670;&#160;</a></span>TreeNode() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -201,12 +212,12 @@ Public Member Functions</h2></td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00022">22</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00018">18</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="ab9f00f5253d56461bb2d420fd639c5ae" name="ab9f00f5253d56461bb2d420fd639c5ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9f00f5253d56461bb2d420fd639c5ae">&#9670;&nbsp;</a></span>TreeNode() <span class="overload">[3/3]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab9f00f5253d56461bb2d420fd639c5ae">&#9670;&#160;</a></span>TreeNode() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -237,13 +248,13 @@ Public Member Functions</h2></td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00030">30</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00022">22</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a6161f2ebb92184eab4215d121870e788" name="a6161f2ebb92184eab4215d121870e788"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6161f2ebb92184eab4215d121870e788">&#9670;&nbsp;</a></span>AddChild()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6161f2ebb92184eab4215d121870e788">&#9670;&#160;</a></span>AddChild()</h2>
<div class="memitem">
<div class="memproto">
@@ -266,12 +277,52 @@ Public Member Functions</h2></td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00038">38</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00026">26</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="aa48fbc17903eb8cfa40353e29f853c6f" name="aa48fbc17903eb8cfa40353e29f853c6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa48fbc17903eb8cfa40353e29f853c6f">&#9670;&#160;</a></span>GetParent()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classTreeNode.html">TreeNode</a> * TreeNode::GetParent </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Non-owning parent; nullptr for a detached node or the root. </p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00068">68</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="ad501f97eeec7f7d3353bfae838fbb6a8" name="ad501f97eeec7f7d3353bfae838fbb6a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad501f97eeec7f7d3353bfae838fbb6a8">&#9670;&#160;</a></span>GetRow()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::size_t TreeNode::GetRow </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Zero-based sibling position; zero for a detached node or the root. </p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00072">72</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="abdd82460187dca8d3e5d66f5d5c529ea" name="abdd82460187dca8d3e5d66f5d5c529ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abdd82460187dca8d3e5d66f5d5c529ea">&#9670;&nbsp;</a></span>GetChildCount()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#abdd82460187dca8d3e5d66f5d5c529ea">&#9670;&#160;</a></span>GetChildCount()</h2>
<div class="memitem">
<div class="memproto">
@@ -288,12 +339,12 @@ Public Member Functions</h2></td></tr>
<p>Get child count. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of children. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00043">43</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00034">34</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="a4727ff801a2d1b9323c5ae50a35457a6" name="a4727ff801a2d1b9323c5ae50a35457a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4727ff801a2d1b9323c5ae50a35457a6">&#9670;&nbsp;</a></span>GetChild() <span class="overload">[1/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4727ff801a2d1b9323c5ae50a35457a6">&#9670;&#160;</a></span>GetChild() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -317,12 +368,12 @@ Public Member Functions</h2></td></tr>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00047">47</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00038">38</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="a81047bd7d2a4cc96b9ef5e20d0d63b5f" name="a81047bd7d2a4cc96b9ef5e20d0d63b5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81047bd7d2a4cc96b9ef5e20d0d63b5f">&#9670;&nbsp;</a></span>GetChild() <span class="overload">[2/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a81047bd7d2a4cc96b9ef5e20d0d63b5f">&#9670;&#160;</a></span>GetChild() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -346,12 +397,12 @@ Public Member Functions</h2></td></tr>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00054">54</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00045">45</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="afa2f4b0aafa12d3d41ed00df8e0250c9" name="afa2f4b0aafa12d3d41ed00df8e0250c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa2f4b0aafa12d3d41ed00df8e0250c9">&#9670;&nbsp;</a></span>GetType()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afa2f4b0aafa12d3d41ed00df8e0250c9">&#9670;&#160;</a></span>GetType()</h2>
<div class="memitem">
<div class="memproto">
@@ -368,12 +419,12 @@ Public Member Functions</h2></td></tr>
<p>Get node type. </p>
<dl class="section return"><dt>Returns</dt><dd>Node type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00061">61</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00052">52</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="aaac5b8d9dc9e5ae1f367d1adbcf20e18" name="aaac5b8d9dc9e5ae1f367d1adbcf20e18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaac5b8d9dc9e5ae1f367d1adbcf20e18">&#9670;&nbsp;</a></span>GetName()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aaac5b8d9dc9e5ae1f367d1adbcf20e18">&#9670;&#160;</a></span>GetName()</h2>
<div class="memitem">
<div class="memproto">
@@ -390,12 +441,12 @@ Public Member Functions</h2></td></tr>
<p>Get display name. </p>
<dl class="section return"><dt>Returns</dt><dd>Node name. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00065">65</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00056">56</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="afc503b40004764163605d6dbdb4ef811" name="afc503b40004764163605d6dbdb4ef811"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc503b40004764163605d6dbdb4ef811">&#9670;&nbsp;</a></span>GetFrame()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afc503b40004764163605d6dbdb4ef811">&#9670;&#160;</a></span>GetFrame()</h2>
<div class="memitem">
<div class="memproto">
@@ -412,12 +463,12 @@ Public Member Functions</h2></td></tr>
<p>Get frame payload if node is frame. </p>
<dl class="section return"><dt>Returns</dt><dd>Pointer to frame info or nullptr. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00069">69</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00060">60</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
<a id="a226518612d0d00b5988a2c44fc21d3f1" name="a226518612d0d00b5988a2c44fc21d3f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a226518612d0d00b5988a2c44fc21d3f1">&#9670;&nbsp;</a></span>GetSignal()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a226518612d0d00b5988a2c44fc21d3f1">&#9670;&#160;</a></span>GetSignal()</h2>
<div class="memitem">
<div class="memproto">
@@ -434,7 +485,7 @@ Public Member Functions</h2></td></tr>
<p>Get signal payload if node is signal. </p>
<dl class="section return"><dt>Returns</dt><dd>Pointer to signal info or nullptr. </dd></dl>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00073">73</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00064">64</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
</div>
</div>
@@ -448,7 +499,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="classTreeNode.html">TreeNode</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
View File
@@ -4,6 +4,8 @@ var classTreeNode =
[ "TreeNode", "classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc", null ],
[ "TreeNode", "classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae", null ],
[ "AddChild", "classTreeNode.html#a6161f2ebb92184eab4215d121870e788", null ],
[ "GetParent", "classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f", null ],
[ "GetRow", "classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8", null ],
[ "GetChildCount", "classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea", null ],
[ "GetChild", "classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6", null ],
[ "GetChild", "classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f", null ],
+116
View File
@@ -0,0 +1,116 @@
<!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('classTypeFactory.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">TypeFactory&lt; ClassId, BaseClass, Args &gt; Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BasePtr</b> typedef (defined in <a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>classes</b> (defined in <a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4">contains</a>(const ClassId &amp;id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a>(const ClassId &amp;id, Args... args) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a>(const ClassId &amp;id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CreatorFn</b> typedef (defined in <a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a>(const ClassId &amp;id)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>TypeFactory</b>()=default (defined in <a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory&lt; ClassId, BaseClass, Args &gt;</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>
+432
View File
@@ -0,0 +1,432 @@
<!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: TypeFactory&lt; ClassId, BaseClass, Args &gt; Class Template 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('classTypeFactory.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="#pro-attribs">Protected Attributes</a> &#124;
<a href="classTypeFactory-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">TypeFactory&lt; ClassId, BaseClass, Args &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Registry-based factory for creating objects by runtime identifier.
<a href="classTypeFactory.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="typefactory_8h_source.html">typefactory.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 TypeFactory&lt; ClassId, BaseClass, Args &gt;:</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="classTypeFactory__inherit__graph.svg" width="286" height="408"><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:a33b404da3e19ea7e1245b8a4975721bf" id="r_a33b404da3e19ea7e1245b8a4975721bf"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a33b404da3e19ea7e1245b8a4975721bf">BasePtr</a> = std::shared_ptr&lt; BaseClass &gt;</td></tr>
<tr class="separator:a33b404da3e19ea7e1245b8a4975721bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a650022aac1e2f30af5bc554a5663939f" id="r_a650022aac1e2f30af5bc554a5663939f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a650022aac1e2f30af5bc554a5663939f">CreatorFn</a> = BasePtr(*)(Args...)</td></tr>
<tr class="separator:a650022aac1e2f30af5bc554a5663939f"><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:ad6d85795285ee21193ac03e1b24762d3" id="r_ad6d85795285ee21193ac03e1b24762d3"><td class="memTemplParams" colspan="2">template&lt;class Derived &gt; </td></tr>
<tr class="memitem:ad6d85795285ee21193ac03e1b24762d3"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a> (const ClassId &amp;id)</td></tr>
<tr class="memdesc:ad6d85795285ee21193ac03e1b24762d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a Derived type under the given id. <br /></td></tr>
<tr class="separator:ad6d85795285ee21193ac03e1b24762d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad82f537569ece3d3a4a376523fa94473" id="r_ad82f537569ece3d3a4a376523fa94473"><td class="memItemLeft" align="right" valign="top">CreatorFn&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a> (const ClassId &amp;id) const</td></tr>
<tr class="memdesc:ad82f537569ece3d3a4a376523fa94473"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns creator function for the given id. <br /></td></tr>
<tr class="separator:ad82f537569ece3d3a4a376523fa94473"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f43b03d6e3a0fd503fdec01ecf62e9f" id="r_a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="memItemLeft" align="right" valign="top">BasePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a> (const ClassId &amp;id, Args... args) const</td></tr>
<tr class="memdesc:a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an instance for the given id using provided arguments. <br /></td></tr>
<tr class="separator:a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a119ad2956abe146213c6ca124d8dd4" id="r_a1a119ad2956abe146213c6ca124d8dd4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4">contains</a> (const ClassId &amp;id) const</td></tr>
<tr class="memdesc:a1a119ad2956abe146213c6ca124d8dd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether an id is registered. <br /></td></tr>
<tr class="separator:a1a119ad2956abe146213c6ca124d8dd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a5f119fe61c1cb9f4725ce746e4a047b3" id="r_a5f119fe61c1cb9f4725ce746e4a047b3"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; ClassId, CreatorFn &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a5f119fe61c1cb9f4725ce746e4a047b3">classes</a></td></tr>
<tr class="separator:a5f119fe61c1cb9f4725ce746e4a047b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;class ClassId, class BaseClass, class... Args&gt;<br />
class TypeFactory&lt; ClassId, BaseClass, Args &gt;</div><p>Registry-based factory for creating objects by runtime identifier. </p>
<p>Allows registering derived types and instantiating them using a ClassId key.</p>
<p>Notes:</p><ul>
<li>Not thread-safe. Register types during initialization phase only.</li>
<li>Re-registering the same id overwrites the previous entry ("last wins").</li>
<li>ClassId must be hashable (std::hash&lt;ClassId&gt; specialization must exist).</li>
</ul>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">ClassId</td><td>-Unique class identifier type (e.g. std::string, int, enum). </td></tr>
<tr><td class="paramname">BaseClass</td><td>-Base type for all created objects. </td></tr>
<tr><td class="paramname">Arg</td><td>- Constructor arguments forwarded to registered derived types (by value).</td></tr>
</table>
</dd>
</dl>
<p>Usage example: </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>Base {</div>
<div class="line"> <span class="keyword">virtual</span> ~Base() = <span class="keywordflow">default</span>;</div>
<div class="line"> <span class="keyword">virtual</span> <span class="keywordtype">int</span> get() = 0;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>Derived1 : Base {</div>
<div class="line"> <span class="keyword">explicit</span> Derived1(<span class="keywordtype">int</span> start) : m_start(start) {}</div>
<div class="line"> <span class="keywordtype">int</span> get()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> m_start + 1; }</div>
<div class="line"> <span class="keywordtype">int</span> m_start = 0;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>Derived2 : Base {</div>
<div class="line"> <span class="keyword">explicit</span> Derived2(<span class="keywordtype">int</span> start) : m_start(start) {}</div>
<div class="line"> <span class="keywordtype">int</span> get()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> m_start + 2; }</div>
<div class="line"> <span class="keywordtype">int</span> m_start = 0;</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><a class="code hl_class" href="classTypeFactory.html">TypeFactory&lt;std::string, Base, int&gt;</a> factory;</div>
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a>&lt;Derived1&gt;(<span class="stringliteral">&quot;one&quot;</span>);</div>
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a>&lt;Derived2&gt;(<span class="stringliteral">&quot;two&quot;</span>);</div>
<div class="line"> </div>
<div class="line">std::shared_ptr&lt;Base&gt; a = factory.<a class="code hl_function" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a>(<span class="stringliteral">&quot;one&quot;</span>, 10);</div>
<div class="line">std::shared_ptr&lt;Base&gt; b = factory.<a class="code hl_function" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a>(<span class="stringliteral">&quot;two&quot;</span>)(10); <span class="comment">// advanced API: get creator function</span></div>
<div class="line"> </div>
<div class="line">(void)a-&gt;get();</div>
<div class="line">(void)b-&gt;get();</div>
<div class="ttc" id="aclassTypeFactory_html"><div class="ttname"><a href="classTypeFactory.html">TypeFactory</a></div><div class="ttdoc">Registry-based factory for creating objects by runtime identifier.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00059">typefactory.h:59</a></div></div>
<div class="ttc" id="aclassTypeFactory_html_a3f43b03d6e3a0fd503fdec01ecf62e9f"><div class="ttname"><a href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">TypeFactory::create</a></div><div class="ttdeci">BasePtr create(const ClassId &amp;id, Args... args) const</div><div class="ttdoc">Creates an instance for the given id using provided arguments.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00097">typefactory.h:97</a></div></div>
<div class="ttc" id="aclassTypeFactory_html_ad6d85795285ee21193ac03e1b24762d3"><div class="ttname"><a href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">TypeFactory::registerType</a></div><div class="ttdeci">void registerType(const ClassId &amp;id)</div><div class="ttdoc">Registers a Derived type under the given id.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00076">typefactory.h:76</a></div></div>
<div class="ttc" id="aclassTypeFactory_html_ad82f537569ece3d3a4a376523fa94473"><div class="ttname"><a href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">TypeFactory::creator</a></div><div class="ttdeci">CreatorFn creator(const ClassId &amp;id) const</div><div class="ttdoc">Returns creator function for the given id.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00089">typefactory.h:89</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00059">59</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a33b404da3e19ea7e1245b8a4975721bf" name="a33b404da3e19ea7e1245b8a4975721bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33b404da3e19ea7e1245b8a4975721bf">&#9670;&#160;</a></span>BasePtr</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::BasePtr = std::shared_ptr&lt;BaseClass&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00061">61</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div>
</div>
<a id="a650022aac1e2f30af5bc554a5663939f" name="a650022aac1e2f30af5bc554a5663939f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a650022aac1e2f30af5bc554a5663939f">&#9670;&#160;</a></span>CreatorFn</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::CreatorFn = BasePtr (*)(Args...)</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00062">62</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ad6d85795285ee21193ac03e1b24762d3" name="ad6d85795285ee21193ac03e1b24762d3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6d85795285ee21193ac03e1b24762d3">&#9670;&#160;</a></span>registerType()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<div class="memtemplate">
template&lt;class Derived &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::registerType </td>
<td>(</td>
<td class="paramtype">const ClassId &amp;&#160;</td>
<td class="paramname"><em>id</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>Registers a Derived type under the given id. </p>
<p>Requirements (checked at compile-time):</p><ul>
<li>Derived must inherit from BaseClass</li>
<li>Derived must be constructible from Args...</li>
</ul>
<p>Re-registering the same id overwrites the previous entry ("last wins"). </p>
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00076">76</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div>
</div>
<a id="ad82f537569ece3d3a4a376523fa94473" name="ad82f537569ece3d3a4a376523fa94473"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad82f537569ece3d3a4a376523fa94473">&#9670;&#160;</a></span>creator()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">CreatorFn <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::creator </td>
<td>(</td>
<td class="paramtype">const ClassId &amp;&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td> const</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>Returns creator function for the given id. </p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::out_of_range</td><td>when id is not registered. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00089">89</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="typefactory_8h_source.html#l00097">TypeFactory&lt; ClassId, BaseClass, Args &gt;::create()</a>.</p>
</div>
</div>
<a id="a3f43b03d6e3a0fd503fdec01ecf62e9f" name="a3f43b03d6e3a0fd503fdec01ecf62e9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f43b03d6e3a0fd503fdec01ecf62e9f">&#9670;&#160;</a></span>create()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">BasePtr <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::create </td>
<td>(</td>
<td class="paramtype">const ClassId &amp;&#160;</td>
<td class="paramname"><em>id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args...&#160;</td>
<td class="paramname"><em>args</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">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Creates an instance for the given id using provided arguments. </p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::out_of_range</td><td>when id is not registered. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00097">97</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
<p class="reference">References <a class="el" href="typefactory_8h_source.html#l00089">TypeFactory&lt; ClassId, BaseClass, Args &gt;::creator()</a>.</p>
</div>
</div>
<a id="a1a119ad2956abe146213c6ca124d8dd4" name="a1a119ad2956abe146213c6ca124d8dd4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a119ad2956abe146213c6ca124d8dd4">&#9670;&#160;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::contains </td>
<td>(</td>
<td class="paramtype">const ClassId &amp;&#160;</td>
<td class="paramname"><em>id</em></td><td>)</td>
<td> const</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>Checks whether an id is registered. </p>
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00104">104</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a5f119fe61c1cb9f4725ce746e4a047b3" name="a5f119fe61c1cb9f4725ce746e4a047b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f119fe61c1cb9f4725ce746e4a047b3">&#9670;&#160;</a></span>classes</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class ClassId , class BaseClass , class... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::unordered_map&lt;ClassId, CreatorFn&gt; <a class="el" href="classTypeFactory.html">TypeFactory</a>&lt; ClassId, BaseClass, Args &gt;::classes</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00110">110</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="typefactory_8h_source.html">typefactory.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="classTypeFactory.html">TypeFactory</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>
+7
View File
@@ -0,0 +1,7 @@
var classTypeFactory =
[
[ "registerType", "classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3", null ],
[ "creator", "classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473", null ],
[ "create", "classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f", null ],
[ "contains", "classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4", null ]
];
@@ -0,0 +1,5 @@
<map id="TypeFactory&lt; ClassId, BaseClass, Args &gt;" name="TypeFactory&lt; ClassId, BaseClass, Args &gt;">
<area shape="rect" id="Node000001" title="Registry&#45;based factory for creating objects by runtime identifier." alt="" coords="15,5,173,165"/>
<area shape="rect" id="Node000002" href="$classTypeFactory.html" title=" " alt="" coords="5,243,183,403"/>
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="97,179,97,242,91,242,91,179"/>
</map>
@@ -0,0 +1 @@
2bdf782ef56b34458cf192f8210c073e
Loaded 100 of 407 files, more files were not shown because too many files have changed in this diff. Show more