Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bce707daf6 | ||
|
|
a6016248f8 | ||
|
|
ef8e21db2e | ||
|
|
21d6f12163 | ||
|
|
1d56a37090 | ||
|
|
344beaf58c | ||
|
|
8bf5dcff30 | ||
|
|
3dd9230fca | ||
|
|
a0938cb29c | ||
|
|
a533d9aa00 | ||
|
|
e5d818d9b2 | ||
|
|
65142fdfe3 | ||
|
|
f17ddb6aad | ||
|
|
0067cb4ddd | ||
|
|
03dc8f2a13 | ||
|
|
6cd99768ae | ||
|
|
1163277b17 | ||
|
|
b91cf4aae5 | ||
|
|
8d82b13dad | ||
|
|
88b5883dda | ||
|
|
3bd9339baf | ||
|
|
69074e3321 | ||
|
|
2c057b631d |
No files matched your search
@@ -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
|
||||
@@ -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).
|
||||
@@ -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`)
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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 "ed) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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 &database, const RawCanFrame &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 &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 &line, DbcParseContext &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 &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< TreeNode > 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 &id)</arglist>
|
||||
</member>
|
||||
<member kind="function">
|
||||
<type>CreatorFn</type>
|
||||
<name>creator</name>
|
||||
<anchorfile>classTypeFactory.html</anchorfile>
|
||||
<anchor>ad82f537569ece3d3a4a376523fa94473</anchor>
|
||||
<arglist>(const ClassId &id) const</arglist>
|
||||
</member>
|
||||
<member kind="function">
|
||||
<type>BasePtr</type>
|
||||
<name>create</name>
|
||||
<anchorfile>classTypeFactory.html</anchorfile>
|
||||
<anchor>a3f43b03d6e3a0fd503fdec01ecf62e9f</anchor>
|
||||
<arglist>(const ClassId &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 &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>
|
||||
@@ -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
|
||||
@@ -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&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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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>
|
||||
|
||||
@@ -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" ]
|
||||
];
|
||||
|
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&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&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&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 &line, DbcParseContext &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>
|
||||
@@ -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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||
<tr class="separator:aa4fce77b585a441d251d8535ef7a51a6"><td class="memSeparator" colspan="2"> </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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 |
@@ -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&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>
|
||||
|
||||
@@ -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&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> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &source) const</td></tr>
|
||||
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &source) const</td></tr>
|
||||
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft"> </td><td class="mdescRight">Build runtime decode database. <br /></td></tr>
|
||||
<tr class="separator:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memSeparator" colspan="2"> </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">◆ </a></span>Build()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a2bc6386dfb5e58976c42e22c19ec471b">◆ </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>
|
||||
|
||||
@@ -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&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>
|
||||
|
||||
@@ -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&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> |
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<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> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, std::uint32_t canId, bool isExtended) const</td></tr>
|
||||
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft"> </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> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, std::uint32_t canId, bool isExtended) const</td></tr>
|
||||
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft"> </td><td class="mdescRight">Find frame definition by CAN ID. <br /></td></tr>
|
||||
<tr class="separator:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &frame) const</td></tr>
|
||||
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &frame) const</td></tr>
|
||||
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft"> </td><td class="mdescRight">Decode one raw CAN frame. <br /></td></tr>
|
||||
<tr class="separator:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memSeparator" colspan="2"> </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">◆ </a></span>FindFrame()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">◆ </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">◆ </a></span>Decode()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a345951ffe5d943a70d3a1ea1f39e74f7">◆ </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>
|
||||
|
||||
@@ -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&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&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&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 &line, DbcParseContext &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>
|
||||
@@ -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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcFrameHandler.html#a0d3f43bbcc5e191460bc31827e74ce89">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||
<tr class="separator:a0d3f43bbcc5e191460bc31827e74ce89"><td class="memSeparator" colspan="2"> </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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 |
@@ -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&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>
|
||||
|
||||
@@ -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&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> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &filePath) const</td></tr>
|
||||
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft"> </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> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &filePath) const</td></tr>
|
||||
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft"> </td><td class="mdescRight">Parse DBC file. <br /></td></tr>
|
||||
<tr class="separator:aef72826942c9095d653fafa435855e56"><td class="memSeparator" colspan="2"> </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">◆ </a></span>ParseFile()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aef72826942c9095d653fafa435855e56">◆ </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&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&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&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 &line, DbcParseContext &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>
|
||||
@@ -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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcSignalHandler.html#ad7d891ec1414fb645f85ccd410f2737b">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||
<tr class="separator:ad7d891ec1414fb645f85ccd410f2737b"><td class="memSeparator" colspan="2"> </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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&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&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&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 &line, DbcParseContext &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 &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>
|
||||
@@ -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&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&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&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> |
|
||||
<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 <<a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>></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<class Handler > </td></tr>
|
||||
<tr class="memitem:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a2c6e9a614ed747275d43bcccc50d0b2d">RegisterType</a> (const std::string &keyword)</td></tr>
|
||||
<tr class="separator:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a495c2d5c7ebb8103b1987cdd87c142ed" id="r_a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const</td></tr>
|
||||
<tr class="separator:a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2>
|
||||
<a id="a2f064359b59d8644b8a8196653d47482" name="a2f064359b59d8644b8a8196653d47482"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a2f064359b59d8644b8a8196653d47482">◆ </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">◆ </a></span>RegisterType()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class Handler > </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 & </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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>
|
||||
@@ -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&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&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&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 &line, DbcParseContext &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>
|
||||
@@ -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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><b>Handle</b> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const =0</td></tr>
|
||||
<tr class="separator:a3de86e1e27e9bcb0fe6f1460a8ba5739"><td class="memSeparator" colspan="2"> </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->Node2 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->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->Node3 -->
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->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->Node4 -->
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->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->Node5 -->
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->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->Node6 -->
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->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->Node7 -->
|
||||
<g id="edge6_Node000001_Node000007" class="edge">
|
||||
<title>Node1->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->Node2 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->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->Node3 -->
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->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->Node4 -->
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->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->Node5 -->
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->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->Node6 -->
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->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->Node7 -->
|
||||
<g id="edge6_Node000001_Node000007" class="edge">
|
||||
<title>Node1->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 |
@@ -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&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>
|
||||
|
||||
@@ -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&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< <a class="el" href="classTreeNode.html">TreeNode</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &database) const</td></tr>
|
||||
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft"> </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< <a class="el" href="classTreeNode.html">TreeNode</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &database) const</td></tr>
|
||||
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft"> </td><td class="mdescRight">Build tree representation of parsed DBC data. <br /></td></tr>
|
||||
<tr class="separator:a7e57d067d831b14b383947fd125edd4b"><td class="memSeparator" colspan="2"> </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">◆ </a></span>Build()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a7e57d067d831b14b383947fd125edd4b">◆ </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>
|
||||
|
||||
@@ -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&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&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&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 &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 &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 &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 &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 &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 &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< TreeNode > 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>
|
||||
@@ -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&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&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&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> |
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<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 <<a class="el" href="dbc__tree__model_8h_source.html">dbc_tree_model.h</a>></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  </td><td class="memItemRight" valign="bottom"><b>Column</b> { <br />
|
||||
  <b>Name</b>
|
||||
, <b>CanId</b>
|
||||
, <b>PayloadLength</b>
|
||||
, <b>StartBit</b>
|
||||
, <br />
|
||||
  <b>BitLength</b>
|
||||
, <b>ByteOrder</b>
|
||||
, <b>Signed</b>
|
||||
, <b>Unit</b>
|
||||
, <br />
|
||||
  <b>Comment</b>
|
||||
, <b>ColumnCount</b>
|
||||
<br />
|
||||
}</td></tr>
|
||||
<tr class="separator:a5e31be609fae4d7dfdd79140f56069ae"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a0f360d424848c6c39f2312e6209b0dfd" id="r_a0f360d424848c6c39f2312e6209b0dfd"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>Role</b> { <br />
|
||||
  <b>NodeTypeRole</b> = Qt::UserRole + 1
|
||||
, <b>CanIdRole</b>
|
||||
, <b>PayloadLengthRole</b>
|
||||
, <b>StartBitRole</b>
|
||||
, <br />
|
||||
  <b>BitLengthRole</b>
|
||||
, <b>LittleEndianRole</b>
|
||||
, <b>SignedRole</b>
|
||||
, <b>UnitRole</b>
|
||||
, <br />
|
||||
  <b>CommentRole</b>
|
||||
, <b>ValueDescriptionsRole</b>
|
||||
, <b>ExtendedRole</b>
|
||||
<br />
|
||||
}</td></tr>
|
||||
<tr class="separator:a0f360d424848c6c39f2312e6209b0dfd"><td class="memSeparator" colspan="2"> </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"> </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"> </td></tr>
|
||||
<tr class="memitem:a8cb5a81d456cdead42b75fd3462ee00a" id="r_a8cb5a81d456cdead42b75fd3462ee00a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8cb5a81d456cdead42b75fd3462ee00a">SetTree</a> (std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > root)</td></tr>
|
||||
<tr class="separator:a8cb5a81d456cdead42b75fd3462ee00a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a8caeb5ec6141eb3e446e48df3c70b3ad" id="r_a8caeb5ec6141eb3e446e48df3c70b3ad"><td class="memItemLeft" align="right" valign="top">QModelIndex </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8caeb5ec6141eb3e446e48df3c70b3ad">index</a> (int row, int column, const QModelIndex &parent=QModelIndex()) const override</td></tr>
|
||||
<tr class="separator:a8caeb5ec6141eb3e446e48df3c70b3ad"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae40bb8b8a26d205f178c6dd1134ff4b3" id="r_ae40bb8b8a26d205f178c6dd1134ff4b3"><td class="memItemLeft" align="right" valign="top">QModelIndex </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#ae40bb8b8a26d205f178c6dd1134ff4b3">parent</a> (const QModelIndex &child) const override</td></tr>
|
||||
<tr class="separator:ae40bb8b8a26d205f178c6dd1134ff4b3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a30bed0d65342917c19d9183da55af452" id="r_a30bed0d65342917c19d9183da55af452"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a30bed0d65342917c19d9183da55af452">rowCount</a> (const QModelIndex &parent=QModelIndex()) const override</td></tr>
|
||||
<tr class="separator:a30bed0d65342917c19d9183da55af452"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a397f885e7fd45c387825b4357b875c10" id="r_a397f885e7fd45c387825b4357b875c10"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a397f885e7fd45c387825b4357b875c10">columnCount</a> (const QModelIndex &parent=QModelIndex()) const override</td></tr>
|
||||
<tr class="separator:a397f885e7fd45c387825b4357b875c10"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aca81d05c81cc48c1185fc36659e96e5b" id="r_aca81d05c81cc48c1185fc36659e96e5b"><td class="memItemLeft" align="right" valign="top">QVariant </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#aca81d05c81cc48c1185fc36659e96e5b">data</a> (const QModelIndex &index, int role=Qt::DisplayRole) const override</td></tr>
|
||||
<tr class="separator:aca81d05c81cc48c1185fc36659e96e5b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aad5834e8edb00808cbfa498ea8c63fe9" id="r_aad5834e8edb00808cbfa498ea8c63fe9"><td class="memItemLeft" align="right" valign="top">QVariant </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"> </td></tr>
|
||||
<tr class="memitem:a8f7842a79144bdb24fa9c5fbdcd37295" id="r_a8f7842a79144bdb24fa9c5fbdcd37295"><td class="memItemLeft" align="right" valign="top">Qt::ItemFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeModel.html#a8f7842a79144bdb24fa9c5fbdcd37295">flags</a> (const QModelIndex &index) const override</td></tr>
|
||||
<tr class="separator:a8f7842a79144bdb24fa9c5fbdcd37295"><td class="memSeparator" colspan="2"> </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">◆ </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">◆ </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 & Destructor Documentation</h2>
|
||||
<a id="a4f7214b727d812885bf077352ec9ece1" name="a4f7214b727d812885bf077352ec9ece1"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a4f7214b727d812885bf077352ec9ece1">◆ </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 * </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">◆ </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< <a class="el" href="classTreeNode.html">TreeNode</a> > </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">◆ </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 </td>
|
||||
<td class="paramname"><em>row</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"><em>column</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const QModelIndex & </td>
|
||||
<td class="paramname"><em>parent</em> = <code>QModelIndex()</code> </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">◆ </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 & </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">◆ </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 & </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">◆ </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 & </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">◆ </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 & </td>
|
||||
<td class="paramname"><em>index</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"><em>role</em> = <code>Qt::DisplayRole</code> </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">◆ </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 </td>
|
||||
<td class="paramname"><em>section</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Qt::Orientation </td>
|
||||
<td class="paramname"><em>orientation</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"><em>role</em> = <code>Qt::DisplayRole</code> </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">◆ </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 & </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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&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&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&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 &line, DbcParseContext &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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcUnsupportedMultiplexingHandler.html#a9853fd67465f92ef587792986ea179ac">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||
<tr class="separator:a9853fd67465f92ef587792986ea179ac"><td class="memSeparator" colspan="2"> </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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&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&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&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 &line, DbcParseContext &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&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&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&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> |
|
||||
<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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||
<tr class="separator:a653e13364f396b54244edc2c0fdd831a"><td class="memSeparator" colspan="2"> </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">◆ </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 & </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> & </td>
|
||||
<td class="paramname"><em>context</em> </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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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->Node1 -->
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node2->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 |
@@ -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&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 &)=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 &&)=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 &&)=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 &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 &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 &)=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 &&)=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 &&)=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>
|
||||
|
||||
@@ -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&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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
|
||||
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft"> </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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
|
||||
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft"> </td><td class="mdescRight">Create root node. <br /></td></tr>
|
||||
<tr class="separator:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &frame)</td></tr>
|
||||
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft"> </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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &frame)</td></tr>
|
||||
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft"> </td><td class="mdescRight">Create frame node. <br /></td></tr>
|
||||
<tr class="separator:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &signal)</td></tr>
|
||||
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft"> </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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &signal)</td></tr>
|
||||
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft"> </td><td class="mdescRight">Create signal node. <br /></td></tr>
|
||||
<tr class="separator:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memSeparator" colspan="2"> </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>
|
||||
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
||||
<tr class="separator:a4d3054a033accf3e38ea132002fc35ff"><td class="memSeparator" colspan="2"> </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> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
||||
<tr class="separator:ad6ce97dcf532b452d520452b6d000daa"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a35724af755b5d0c43de40a723ef81ec1"><td class="memItemLeft" align="right" valign="top"><a id="a35724af755b5d0c43de40a723ef81ec1" name="a35724af755b5d0c43de40a723ef81ec1"></a>
|
||||
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
||||
<tr class="separator:a35724af755b5d0c43de40a723ef81ec1"><td class="memSeparator" colspan="2"> </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> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
||||
<tr class="separator:a88fbcbec9c64d888b19c5edb95059a95"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > child)</td></tr>
|
||||
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft"> </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>
|
||||
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=delete</td></tr>
|
||||
<tr class="separator:ad6095a87ec2bb2834041a5be0ca745fd"><td class="memSeparator" colspan="2"> </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> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=delete</td></tr>
|
||||
<tr class="separator:a9a3f8862ad7562e03e77b761eb94804c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a6161f2ebb92184eab4215d121870e788" id="r_a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > child)</td></tr>
|
||||
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft"> </td><td class="mdescRight">Add child node. <br /></td></tr>
|
||||
<tr class="separator:a6161f2ebb92184eab4215d121870e788"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t </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"> </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> * </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"> </td></tr>
|
||||
<tr class="memitem:ad501f97eeec7f7d3353bfae838fbb6a8" id="r_ad501f97eeec7f7d3353bfae838fbb6a8"><td class="memItemLeft" align="right" valign="top">std::size_t </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"> </td></tr>
|
||||
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea" id="r_abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t </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"> </td><td class="mdescRight">Get child count. <br /></td></tr>
|
||||
<tr class="separator:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> * </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"> </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> * </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"> </td><td class="mdescRight">Get child by index. <br /></td></tr>
|
||||
<tr class="separator:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classTreeNode.html">TreeNode</a> * </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"> </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> * </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"> </td><td class="mdescRight">Get mutable child by index. <br /></td></tr>
|
||||
<tr class="separator:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16">NodeType</a> </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"> </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> </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"> </td><td class="mdescRight">Get node type. <br /></td></tr>
|
||||
<tr class="separator:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memItemLeft" align="right" valign="top">const std::string & </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"> </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 & </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"> </td><td class="mdescRight">Get display name. <br /></td></tr>
|
||||
<tr class="separator:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:afc503b40004764163605d6dbdb4ef811"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structFrameInfo.html">FrameInfo</a> * </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"> </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> * </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"> </td><td class="mdescRight">Get frame payload if node is frame. <br /></td></tr>
|
||||
<tr class="separator:afc503b40004764163605d6dbdb4ef811"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a226518612d0d00b5988a2c44fc21d3f1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structSignalInfo.html">SignalInfo</a> * </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"> </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> * </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"> </td><td class="mdescRight">Get signal payload if node is signal. <br /></td></tr>
|
||||
<tr class="separator:a226518612d0d00b5988a2c44fc21d3f1"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2>
|
||||
<a id="a984a98d5ccf7ef1f5a18094c6821f35d" name="a984a98d5ccf7ef1f5a18094c6821f35d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">◆ </a></span>TreeNode() <span class="overload">[1/3]</span></h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">◆ </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">◆ </a></span>TreeNode() <span class="overload">[2/3]</span></h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a8e38dd591d8801d7ee3a7dbad90c67fc">◆ </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">◆ </a></span>TreeNode() <span class="overload">[3/3]</span></h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ab9f00f5253d56461bb2d420fd639c5ae">◆ </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">◆ </a></span>AddChild()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a6161f2ebb92184eab4215d121870e788">◆ </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">◆ </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">◆ </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">◆ </a></span>GetChildCount()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#abdd82460187dca8d3e5d66f5d5c529ea">◆ </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">◆ </a></span>GetChild() <span class="overload">[1/2]</span></h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a4727ff801a2d1b9323c5ae50a35457a6">◆ </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">◆ </a></span>GetChild() <span class="overload">[2/2]</span></h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a81047bd7d2a4cc96b9ef5e20d0d63b5f">◆ </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">◆ </a></span>GetType()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#afa2f4b0aafa12d3d41ed00df8e0250c9">◆ </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">◆ </a></span>GetName()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aaac5b8d9dc9e5ae1f367d1adbcf20e18">◆ </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">◆ </a></span>GetFrame()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#afc503b40004764163605d6dbdb4ef811">◆ </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">◆ </a></span>GetSignal()</h2>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a226518612d0d00b5988a2c44fc21d3f1">◆ </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>
|
||||
|
||||
@@ -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 ],
|
||||
|
||||
@@ -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&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&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&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< ClassId, BaseClass, Args > 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< ClassId, BaseClass, Args ></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< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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 &id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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 &id, Args... args) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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 &id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a>(const ClassId &id)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></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>
|
||||
@@ -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< ClassId, BaseClass, Args > 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&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&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&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> |
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<a href="#pro-attribs">Protected Attributes</a> |
|
||||
<a href="classTypeFactory-members.html">List of all members</a> </div>
|
||||
<div class="headertitle"><div class="title">TypeFactory< ClassId, BaseClass, Args > 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 <<a class="el" href="typefactory_8h_source.html">typefactory.h</a>></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< ClassId, BaseClass, Args >:</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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a33b404da3e19ea7e1245b8a4975721bf">BasePtr</a> = std::shared_ptr< BaseClass ></td></tr>
|
||||
<tr class="separator:a33b404da3e19ea7e1245b8a4975721bf"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a650022aac1e2f30af5bc554a5663939f" id="r_a650022aac1e2f30af5bc554a5663939f"><td class="memItemLeft" align="right" valign="top">using </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"> </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<class Derived > </td></tr>
|
||||
<tr class="memitem:ad6d85795285ee21193ac03e1b24762d3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a> (const ClassId &id)</td></tr>
|
||||
<tr class="memdesc:ad6d85795285ee21193ac03e1b24762d3"><td class="mdescLeft"> </td><td class="mdescRight">Registers a Derived type under the given id. <br /></td></tr>
|
||||
<tr class="separator:ad6d85795285ee21193ac03e1b24762d3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ad82f537569ece3d3a4a376523fa94473" id="r_ad82f537569ece3d3a4a376523fa94473"><td class="memItemLeft" align="right" valign="top">CreatorFn </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a> (const ClassId &id) const</td></tr>
|
||||
<tr class="memdesc:ad82f537569ece3d3a4a376523fa94473"><td class="mdescLeft"> </td><td class="mdescRight">Returns creator function for the given id. <br /></td></tr>
|
||||
<tr class="separator:ad82f537569ece3d3a4a376523fa94473"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a3f43b03d6e3a0fd503fdec01ecf62e9f" id="r_a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="memItemLeft" align="right" valign="top">BasePtr </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a> (const ClassId &id, Args... args) const</td></tr>
|
||||
<tr class="memdesc:a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="mdescLeft"> </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"> </td></tr>
|
||||
<tr class="memitem:a1a119ad2956abe146213c6ca124d8dd4" id="r_a1a119ad2956abe146213c6ca124d8dd4"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4">contains</a> (const ClassId &id) const</td></tr>
|
||||
<tr class="memdesc:a1a119ad2956abe146213c6ca124d8dd4"><td class="mdescLeft"> </td><td class="mdescRight">Checks whether an id is registered. <br /></td></tr>
|
||||
<tr class="separator:a1a119ad2956abe146213c6ca124d8dd4"><td class="memSeparator" colspan="2"> </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< ClassId, CreatorFn > </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"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><div class="compoundTemplParams">template<class ClassId, class BaseClass, class... Args><br />
|
||||
class TypeFactory< ClassId, BaseClass, Args ></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<ClassId> 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 <string></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<std::string, Base, int></a> factory;</div>
|
||||
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a><Derived1>(<span class="stringliteral">"one"</span>);</div>
|
||||
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a><Derived2>(<span class="stringliteral">"two"</span>);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">std::shared_ptr<Base> a = factory.<a class="code hl_function" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a>(<span class="stringliteral">"one"</span>, 10);</div>
|
||||
<div class="line">std::shared_ptr<Base> b = factory.<a class="code hl_function" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a>(<span class="stringliteral">"two"</span>)(10); <span class="comment">// advanced API: get creator function</span></div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">(void)a->get();</div>
|
||||
<div class="line">(void)b->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 &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 &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 &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">◆ </a></span>BasePtr</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </div>
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::BasePtr = std::shared_ptr<BaseClass></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">◆ </a></span>CreatorFn</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </div>
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::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">◆ </a></span>registerType()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </div>
|
||||
<div class="memtemplate">
|
||||
template<class Derived > </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>< ClassId, BaseClass, Args >::registerType </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const ClassId & </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">◆ </a></span>creator()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </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>< ClassId, BaseClass, Args >::creator </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const ClassId & </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< ClassId, BaseClass, Args >::create()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a3f43b03d6e3a0fd503fdec01ecf62e9f" name="a3f43b03d6e3a0fd503fdec01ecf62e9f"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a3f43b03d6e3a0fd503fdec01ecf62e9f">◆ </a></span>create()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </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>< ClassId, BaseClass, Args >::create </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const ClassId & </td>
|
||||
<td class="paramname"><em>id</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Args... </td>
|
||||
<td class="paramname"><em>args</em> </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< ClassId, BaseClass, Args >::creator()</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a1a119ad2956abe146213c6ca124d8dd4" name="a1a119ad2956abe146213c6ca124d8dd4"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a1a119ad2956abe146213c6ca124d8dd4">◆ </a></span>contains()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </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>< ClassId, BaseClass, Args >::contains </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const ClassId & </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">◆ </a></span>classes</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<div class="memtemplate">
|
||||
template<class ClassId , class BaseClass , class... Args> </div>
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">std::unordered_map<ClassId, CreatorFn> <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::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>
|
||||
@@ -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< ClassId, BaseClass, Args >" name="TypeFactory< ClassId, BaseClass, Args >">
|
||||
<area shape="rect" id="Node000001" title="Registry-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
|
||||