Compare commits

...
23 Commits
Author SHA1 Message Date
deeaitch c43222939f upfate doxygen 2026-10-20 13:40:44 -04:00
deeaitch a55d1c58ed simlyfy 2026-10-20 13:38:21 -04:00
deeaitch 849ce31e2f Closes #25 2026-10-20 13:21:43 -04:00
deeaitch e555ebb571 Closes #24 2026-10-20 13:12:30 -04:00
deeaitch fc97682b37 Closes #23 2026-10-20 13:06:55 -04:00
deeaitch 713276d34a Closes #22 2026-10-20 13:03:21 -04:00
deeaitch a202ba12ba update gitignore 2026-10-14 11:12:36 -04:00
deeaitch 4ae4e527b8 Closes #19 2026-10-14 10:41:17 -04:00
deeaitch d87c100398 #18 2026-10-14 10:32:44 -04:00
deeaitch 0b05152bcf Closes #17 2026-10-14 09:38:14 -04:00
deeaitch 6d6ace4315 Closes #16 2026-10-14 09:04:11 -04:00
deeaitch c3d3bd51fb Closes #16 2026-10-13 08:17:49 -04:00
deeaitch 7022c84941 Closes #15 2026-10-13 08:05:40 -04:00
deeaitch 0708316a37 Closes #14 2026-10-11 06:30:18 -04:00
deeaitch 51fcdb88ac Closes #13 2026-10-11 06:19:42 -04:00
deeaitch bce707daf6 Update documentation 2026-10-07 20:24:35 -04:00
deeaitch a6016248f8 Tests 2026-10-07 20:18:37 -04:00
deeaitch ef8e21db2e update documentation 2026-10-07 20:17:59 -04:00
deeaitch 21d6f12163 update documentation 2026-10-07 20:14:24 -04:00
deeaitch 1d56a37090 Additional tests 2026-10-07 19:52:28 -04:00
deeaitch 344beaf58c Adding some more tests 2026-10-07 19:43:17 -04:00
deeaitch 8bf5dcff30 Closes #12 2026-10-07 18:59:18 -04:00
deeaitch 3dd9230fca Closes #28 2026-10-07 18:50:11 -04:00
766 changed files with 79050 additions and 4618 deletions

No files matched your search

+3
View File
@@ -1 +1,4 @@
*.user
.project_rules
AGENTS.md
build
+630 -55
View File
@@ -20,14 +20,19 @@ 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
The core library uses C++17 and has no Qt dependency. Qt Core and Qt Test are
used by the regression tests; the optional adapter requires Qt Core. Live CAN acquisition, trace-file readers,
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.
[AGENTS.md](AGENTS.md) contains project instructions for coding agents,
including code style, build and test commands, and documentation requirements.
---
## High-Level Architecture
@@ -124,7 +129,7 @@ Doxyfile API documentation configuration
| 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` |
| Parser and dispatch | `core/dbc_parser.*`, `core/dbc_diagnostic.h`, `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.*` |
@@ -188,7 +193,7 @@ Notes:
- `signals` is a list of `SignalInfo`
- `isExtended` is determined during CAN ID normalization
- `pgn` is derived using simplified J1939 logic when applicable
- `pgn` is derived for extended frames only with explicit J1939 opt-in (see below)
---
@@ -236,7 +241,26 @@ has no metadata payload. The payload types are:
- `FrameInfo`
- `SignalInfo`
The tree supports browsing through the optional `DbcTreeModel` adapter.
The tree is independent of Qt and supports browsing through the optional
`DbcTreeModel` adapter. `GetParent()` returns a non-owning parent pointer;
`GetRow()` returns the zero-based sibling position (zero for a detached node or
root). `GetChild()` returns nullptr outside the child range, and `AddChild()`
ignores null children. Appending children preserves existing addresses and rows.
Nodes cannot be copied or moved. Transfer their `std::unique_ptr` ownership to
preserve parent links and addresses. `AddChild()` accepts an rvalue ownership
handle and rejects self/ancestor insertion and already-attached children with
`std::invalid_argument` before consuming ownership. There is no detach or
reparent operation; callers must supply exclusive ownership.
`GetFrameKey()` returns `std::optional<FrameKey>` for frame nodes and signals
directly attached to a frame. `GetSignalKey()` returns `std::optional<SignalKey>`
for those signals. Roots, detached signals, and signals without a frame parent
have no key. Keys use normalized CAN ID plus standard/extended type, and signal
keys also include the signal name. They match runtime definition keys, remain
independent of row order and frame display names, and survive source-database
changes or destruction. Renaming a signal changes its logical identity. Returned
keys are values and may be retained after destroying the tree.
It is **not** the primary runtime decode structure.
@@ -319,7 +343,7 @@ This structure is used directly by the decoder.
## `FrameKey`
Fast lookup key for runtime frame matching.
Stable identifier for runtime frame matching and application state.
Fields:
@@ -332,22 +356,41 @@ This matters because the same numeric identifier must not be confused between st
## `DecodeDatabase`
Top-level runtime decode container.
Immutable runtime snapshot with a private frame index. Build it with
`DbcDecodeBuilder::Build(parsed)` or construct it from `std::vector<DecodeFrame>`.
Construction validates all definitions and duplicate keys before building the lookup
index or publishing the snapshot, and throws
`std::invalid_argument` for invalid metadata, including manually supplied data:
Fields:
- Normalized CAN IDs must fit 11 bits for standard frames or 29 bits for extended
frames. DBC's bit-31 encoding flag must already be removed.
- Frame keys must be unique; signal names must be unique within their frame.
- Signal lengths must be 1–64 bits, with Intel/Motorola layouts entirely inside
the declared payload. Bit coordinates use overflow-safe 64-bit arithmetic.
- Byte order, numeric type, and multiplexing role must be valid enum values.
- Factor, offset, minimum, and maximum must be finite; minimum must not exceed
maximum. Zero and negative factors are allowed.
- Multiplexing requires one unsigned selector when branches are present, with
branch values in its raw range. Signals may overlap only when they are branches
selected by different raw values, including mixed byte orders.
- `frames`
- `frameIndexByKey`
`dlc` remains a byte count in the storage range 0–255; construction imposes no
additional CAN/CAN FD payload limit. A zero-byte frame may contain no signals.
Both `DbcDecodeBuilder::Build` and the direct constructor apply these rules.
Construction copies the input, including nested metadata, even for rvalue input.
Saved mutable aliases into that input cannot modify definitions or invalidate the
lookup index. Database copies still share the frozen snapshot; a failed
construction or replacement leaves the previous snapshot and its lookups intact.
Conceptually:
- `GetFrames()` returns a borrowed `const std::vector<DecodeFrame>&`.
- `FindFrame(FrameKey)` returns `std::shared_ptr<const DecodeFrame>`.
- `FindSignal(SignalKey)` returns `std::shared_ptr<const DecodeSignal>`.
- Missing definitions return an empty handle.
- Copying a database shares its snapshot; replacing it installs another snapshot.
```text
DecodeDatabase
├── vector<DecodeFrame>
└── unordered_map<FrameKey, index>
```
This gives the decoder fast access to a frame definition using CAN ID and frame type.
Frame lookup uses a hash index; signal lookup scans the matched frame's signals.
Decoding shares the snapshot without copying definitions or allocating ownership
objects per signal.
---
@@ -378,6 +421,7 @@ Represents one decoded signal result.
Fields:
- `definition`
- `key`
- `rawValue`
- `physicalValue`
- `valid`
@@ -391,12 +435,13 @@ Fields:
`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.
`valid` before using the physical value. Raw data is also available when
`status == PhysicalConversionFailed`; other invalid results have no decoded numeric data.
Use `std::get` when the numeric type is known, or `std::get_if` to handle both:
```cpp
if (const auto *value = std::get_if<std::int64_t>(&decodedSignal.rawValue)) {
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);
@@ -424,17 +469,115 @@ Represents one decoded frame result.
Fields:
- `definition`
- `key`
- `signals`
- `valid`
- `status`
`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`.
invalid even when the frame is valid. An unknown or ambiguous frame returns `valid == false`,
a null definition, its requested key, and an empty signal list. A successful PGN
match uses the DBC definition key for the frame and its signals.
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.
`FrameDecodeStatus` summarizes the result:
| Status | Meaning |
| --- | --- |
| `UnknownFrame` | No exact CAN ID/type match or eligible PGN match |
| `AmbiguousFrame` | No exact match and multiple J1939 definitions share the PGN |
| `InsufficientPayload` | Actual byte count is less than the declared `dlc` |
| `SignalErrors` | Payload is long enough, but at least one signal failed |
| `Valid` | Payload is long enough and every signal is valid or inactive |
Short-payload status takes precedence over signal errors; inspect each signal's
status for the individual cause. `valid` retains its existing meaning of a matched
definition and does not imply `status == FrameDecodeStatus::Valid`.
Payload policy uses `dlc` as a byte count, including for CAN FD; it is not the
encoded wire DLC. A shorter payload is never padded: all signals whose bytes are
available still decode, even if other signals fail. A longer payload is accepted;
bytes beyond `dlc` are ignored. Signal bit layouts must fit the declared `dlc`, so
extra bytes cannot rescue an invalid definition. Empty payloads and zero-byte
frame definitions follow the same rules. Results include every signal in definition
order, preserving successful values and definition handles on partial failures.
The decoder applies factor and offset; it does not clamp physical values to the
declared minimum and maximum. Non-finite conversion results (NaN or positive/
negative infinity), including overflow with finite factor/offset, produce
`PhysicalConversionFailed`. The exact raw value and non-finite `physicalValue`
remain available, while signal `valid` is false. Non-finite numeric parameters are
rejected during database construction. Finite parameters can still overflow during
conversion; conversion failure of a selector does not prevent raw branch selection.
### Definition ownership and reload
`DecodedFrameValue::definition` and `DecodedSignalValue::definition` are owning
`std::shared_ptr<const ...>` handles. Each handle retains the immutable runtime
snapshot. Definitions remain valid until the last database copy, lookup handle,
or decoded result owning that snapshot is released. An independently copied
signal result retains its definition even after the parent frame result is
removed. Copying or moving results preserves ownership.
Reload by assigning a newly built database. Stored results continue to describe
the old DBC, including its units, scaling, comments, and `VAL_` descriptions;
subsequent decoding uses the new DBC. Removed definitions cannot be found in the
new database, but old results safely retain their old definitions. Keeping even
one signal handle retains the whole old snapshot; release stored results when
that metadata is no longer needed.
`GetFrames()` is a borrowed view. References, iterators, and raw pointers obtained
from it or from a handle's `.get()` do not retain ownership. Keep an owning handle
or an unchanged database copy while using them. Constructor input is copied and
may be changed independently afterward. The raw string pointer from
`GetValueDescription()` follows the same rule: keep the signal definition handle
alive while using the string.
Parsed `DbcDatabase`/`FrameInfo`/`SignalInfo` remain ordinary mutable value
containers: borrowed pointers follow standard vector invalidation rules. Builders
copy their metadata, so parsed input may be changed or destroyed after building.
Tree nodes own metadata copies; the Qt model owns its tree and invalidates model
indexes on reset. Runtime handles do not depend on the parsed database or tree.
Synchronize replacement of a shared database variable with decoding; immutable
snapshots do not make concurrent assignment to the same object safe.
### Stable frame and signal identifiers
`DecodedFrameValue::key` is a `FrameKey` (normalized `canId`, `isExtended`), also
available through `DecodeFrame::GetKey()`. `DecodedSignalValue::key` is a
`SignalKey` (frame key, exact case-sensitive signal name). Both are value types
with equality and hashers (`FrameKeyHasher`, `SignalKeyHasher`) for application
maps and saved selections. Construct the same keys from parsed metadata when
needed; do not use addresses or vector positions as identifiers.
Keys stay equal across reloads and reordering when their components stay equal.
Frame renaming and changes to units, bit layout, scaling, or descriptions do not
change a key. Changing a CAN ID/frame type or renaming a signal produces a new
key. The same name in different frames and standard/extended frames with the
same numeric CAN ID remain distinct. Keys identify definitions within one logical
DBC database; applications combining databases must add their own database ID.
A key is not a version identifier: matching keys in different snapshots may have
different metadata. Use `valid`/the definition handle to distinguish a matched
result; default keys alone do not indicate successful decoding.
```cpp
DecodeDatabase runtime = DbcDecodeBuilder().Build(parsed);
DecodedFrameValue stored = DbcDecoder().Decode(runtime, rawFrame);
if (stored.valid && !stored.signals.empty()) {
DecodedSignalValue saved = stored.signals.front();
SignalKey selection = saved.key;
runtime = DbcDecodeBuilder().Build(parser.ParseFile("updated.dbc"));
std::shared_ptr<const DecodeSignal> current = runtime.FindSignal(selection);
// saved.definition retains old metadata; current holds new metadata or is empty.
}
```
**API migration:** replace reads of `runtime.frames` with `runtime.GetFrames()`.
To edit runtime definitions, prepare a vector and construct a new database;
`frameIndexByKey` is now private and built automatically. `DbcDecoder::FindFrame`
and result `definition` fields now use owning handles instead of raw pointers;
`definition->name`, boolean/null checks, and existing decode calls remain usable.
Use `.get()` only for temporary raw-pointer interoperation with an owner alive.
---
@@ -468,6 +611,103 @@ The current parser supports the following DBC elements:
- `VAL_` signal value descriptions
- basic `M` / `mN` multiplexing
### Structured diagnostics
`ParseFileWithDiagnostics(path)` returns `DbcParseResult` containing `database`
and `diagnostics`. Each `DbcDiagnostic` has `severity`, `code`, `filePath`,
`lineNumber`, and `message`. Paths preserve the caller's supplied spelling.
Lines are one-based physical lines, including blank lines; file-level errors use zero.
```cpp
const DbcParser parser;
const DbcParseResult result = parser.ParseFileWithDiagnostics("example.dbc");
for (const DbcDiagnostic &diagnostic : result.diagnostics) {
std::cerr << diagnostic.filePath << ":" << diagnostic.lineNumber
<< ": " << diagnostic.message << '\n';
}
if (!result.HasErrors()) {
const DecodeDatabase runtime = DbcDecodeBuilder().Build(result.database);
// Inspect warnings before relying on decoding results.
}
```
| Severity / code | Meaning |
| --- | --- |
| `Error` / `FileOpenError` | Input cannot be opened |
| `Error` / `FileReadError` | Input cannot be read completely |
| `Error` / `InvalidStatement` | Invalid frame/signal definition or comment, unresolved comment reference, duplicate, or payload violation |
| `Error` / `InvalidValueDescription` | Invalid `VAL_` syntax, duplicate value, or unresolved reference |
| `Error` / `InvalidMultiplexing` | Selector, branch range, or signal overlap validation failed |
| `Warning` / `UnsupportedStatement` | Unregistered statement skipped; decoding or metadata may be incomplete |
| `Error` / `UnsupportedStatement` | Extended multiplexing (`SG_MUL_VAL_`) rejected |
Parsing stops at the first error and returns an empty database, together with
any preceding warnings and the error. Deferred comment, `VAL_`, and multiplexing errors
retain their original source lines. Invalid signal markers use `InvalidStatement`.
`HasErrors()` checks severity; warnings alone do not make a parse fail.
Unknown statements are reported conservatively, including `SIG_VALTYPE_`,
attribute relation forms (`BA_REL_`, `BA_DEF_REL_`), signal types/references,
environment variables, named `VAL_TABLE_` tables, and vendor extensions. For
example, ignoring `SIG_VALTYPE_` may decode a floating-point signal as an integer.
The parser does not implement the warned features; consumers should review warnings.
### Attributes and frame metadata
`BA_DEF_`, `BA_DEF_DEF_`, and `BA_` support database, `BO_`, `SG_`,
`BU_`, and `EV_` scopes with `INT`, `HEX`, `FLOAT`, `STRING`, and `ENUM`
definitions. Integer/HEX values use decimal signed 64-bit numbers; floating
values are finite and locale independent. ENUM assignments use zero-based indices;
defaults accept an index or a quoted label. Strings support escaped quotes and
backslashes. Each statement occupies one physical line and ends with `;`.
```dbc
BA_DEF_ BO_ "VFrameFormat" ENUM "StandardCAN","ExtendedCAN","StandardCAN_FD";
BA_DEF_DEF_ "VFrameFormat" "StandardCAN";
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 10000;
BA_DEF_DEF_ "GenMsgCycleTime" 100;
BA_ "GenMsgCycleTime" BO_ 256 20;
```
Definitions, defaults, assignments, and frame/signal declarations may appear in
any order. Defaults apply to every object of the defined scope; explicit values
override them, with the last repeated assignment winning. Duplicate definitions
or defaults, undefined names, wrong types/scopes, out-of-range values, and missing
frame/signal targets produce `Error / InvalidAttribute` at the source line.
`DbcDatabase::attributeDefinitions` retains types, ranges, enum labels, and defaults;
`attributeAssignments` retains explicit values and targets. Effective values are
available in `attributes` on the database, frames and signals. Node/environment
assignments are retained by name without checking declarations; their defaults
remain on the definitions. Frame/signal attributes are copied into runtime
snapshots and tree payloads. Other valid attributes remain available as metadata
without changing decoding.
`FrameInfo` and `DecodeFrame` expose optional `frameFormat` (the enum label) and
`cycleTimeMs` (`GenMsgCycleTime`, unsigned 32-bit milliseconds). Missing values
remain unset; zero cycle time means unspecified. `StandardCAN` and `ExtendedCAN`
are recognized. Other format labels, including CAN FD and `J1939PG`, are preserved
with `Warning / UnsupportedAttribute` when effective on a frame. A supported
format conflicting with the encoded `BO_` ID also warns. Warnings identify the
assignment or default line. Attributes do not change CAN ID normalization or
automatically enable CAN FD or J1939 decoding; J1939 still requires parser opt-in.
Use `ParseFileWithDiagnostics()` to review these warnings.
Common `VERSION`, `NS_`, `BS_`, and `BU_` headers produce no diagnostics.
Single-token symbols inside the `NS_` declaration list are quiet regardless of
indentation, even when they name unsupported syntax. Frame, signal, bus, and
node definitions or a line with arguments end the list. Actual unsupported
statements outside that list are reported.
Node and bus metadata are not stored. Other comment forms (`CM_`, `CM_ BU_`,
`CM_ EV_`) are ignored by the comment handler. Frame and signal comments may span
physical lines and resolve after definitions are read; other supported statements
require one physical line.
`ParseFile(path)` remains compatible: it returns the database, discards warnings,
and throws `std::runtime_error` on the first error with the existing `path:line:`
format. Use `ParseFileWithDiagnostics` to see skipped syntax. Resource failures
such as allocation errors may still throw.
---
## Supported DBC Syntax
@@ -514,7 +754,8 @@ 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.
DBC grammar coverage is still planned. File-open exceptions contain the path but
no line number. The structured diagnostic API uses line zero for file-level errors.
---
@@ -558,13 +799,16 @@ 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
and scientific notation. Conversion is independent of the application's C and
C++ locales: the decimal separator is always a dot (`.`), and comma decimals
and digit grouping are rejected. The entire numeric token must be valid; hexadecimal
numbers, NaN, infinity, conversion overflow, and conversion underflow (including
subnormal values) 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.
Duplicate frame keys and signal names within a frame are rejected.
Invalid signal definitions stop parsing with `path:line: description`, including
when the signal exceeds the declared payload length.
@@ -609,12 +853,14 @@ Each result has `SignalDecodeStatus status`:
| `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 |
| `InvalidDefinition` | Defensive decoder check failed; invalid definitions are rejected during database construction |
| `PhysicalConversionFailed` | Raw value is available, but the converted physical value is NaN or infinity |
All statuses except `Valid` have `valid == false`; their numeric fields contain
no decoded data and `GetValueDescription()` returns nullptr. Check `status` to
All statuses except `Valid` have `valid == false` and `GetValueDescription()`
returns nullptr. `PhysicalConversionFailed` preserves extracted raw data and the
non-finite conversion result; other invalid statuses have no decoded numeric data. 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
manually receive the same selector and non-overlap validation as parsed files. Extended and nested
multiplexing are outside this stage and are explicitly rejected, rather than
silently decoded as unconditional signals.
@@ -639,6 +885,19 @@ Stored in:
- `FrameInfo::comment`
- `SignalInfo::comment`
Comments accept spaces and tabs between fields, quotes and backslashes escaped
with a preceding backslash, and text spanning multiple physical lines. Newlines, blank
lines, and indentation inside quoted text are preserved; CRLF becomes LF.
Comments may appear before their frame or signal definitions. References use the
same decimal CAN ID validation and normalization as `BO_`, including reserved-bit
and overflow checks and distinct standard/extended targets. Repeated comments
apply in statement order, so the last comment wins, including empty text.
Malformed supported comments (including invalid escapes, missing quotes or
semicolon, and trailing text) and missing frame/signal references produce an
`InvalidStatement` error at the comment's starting line. Failed parses return an
empty database; `ParseFile` throws with the same source location.
---
## CAN ID Normalization
@@ -659,17 +918,55 @@ This is important both for correct lookup and for future interoperability with l
---
## PGN Extraction
## J1939 Opt-in and PGN Lookup
PGN is derived only when the frame is treated as extended.
Extended CAN identifiers do not imply J1939. The default parser leaves `hasPgn`
false and `pgn` zero, and decoding uses exact normalized CAN ID and frame type.
Enable J1939 interpretation explicitly for a file:
The current logic is simplified J1939 extraction:
```cpp
DbcParserOptions options;
options.enableJ1939 = true;
const DbcDatabase parsed = DbcParser(options).ParseFile("vehicle.dbc");
const DecodeDatabase runtime = DbcDecodeBuilder().Build(parsed);
```
- `pf`
- `ps`
- `dp`
Both parser entry points honor this option. Standard frames remain ordinary CAN.
For mixed-protocol files, parse with the default options, then set `hasPgn = true`
and `pgn = ExtractJ1939Pgn(frame.canId)` (from `j1939.h`) only on known J1939
extended definitions before building the runtime snapshot. The same explicit
metadata enables J1939 for manually constructed `DecodeFrame` definitions.
Runtime construction rejects `hasPgn` on standard frames or an inconsistent PGN.
No DBC attribute automatically enables J1939 interpretation.
This is enough for a practical start but should not be treated as full J1939 validation.
PGN extraction retains both data-page bits (CAN ID bits 25–24) and PF:
- PDU1 (`PF < 240`): PS is the destination address and is zeroed in the PGN.
- PDU2 (`PF >= 240`): PS is the group extension and remains part of the PGN.
- Priority and source address are excluded in both cases. This follows the
[Linux J1939 PGN layout](https://docs.kernel.org/networking/j1939.html).
`DecodeDatabase::FindFrame(FrameKey)` stays an exact lookup.
`FindFrameByPgn(pgn)` returns a `PgnLookupResult` with an owning `definition`
handle for one eligible definition. No match returns a null handle with
`ambiguous == false`; multiple definitions return a null handle with
`ambiguous == true`. Copies and returned handles retain the immutable snapshot.
`DbcDecoder::FindFrame` and both `Decode` overloads first try the exact ID/type.
Only when that fails for a valid normalized extended ID do they try PGN lookup
among definitions with `hasPgn == true`. A unique PGN can therefore match a
changed source address or priority, and for PDU1 a changed destination address.
A changed PDU2 group extension does not match. Exact matches win even when the
PGN is ambiguous, including exact matches to ordinary extended CAN definitions.
Multiple PGN candidates are never resolved by order, source, or payload:
`FindFrame` returns null and `Decode` returns `AmbiguousFrame` without decoding
signals or validating the selection. Missing candidates return `UnknownFrame`.
On success, decoded frame/signal keys belong to the matched DBC definition;
selected-signal decoding also expects those definition keys. Keep the input
`RawCanFrame` if the received address/ID is needed separately. This feature does
not implement transport-protocol reassembly, address claiming, or full J1939
validation.
---
@@ -854,6 +1151,8 @@ lines:
- `SG_` → `DbcSignalHandler`
- `CM_` → `DbcCommentHandler`
- `VAL_` → `DbcValueDescriptionHandler`
- `SG_MUL_VAL_` → `DbcUnsupportedMultiplexingHandler`
- `VERSION`, `NS_`, `BS_`, `BU_` → `DbcHeaderHandler` (also accepts attached colons)
Grammar implementations live in `core/dbc_statement_handler.cpp`; their interface,
context, and dispatcher live in `core/dbc_statement_handler.h`. `core/typefactory.h`
@@ -875,8 +1174,8 @@ 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_` accepts spaces and tabs after its keyword; `CM_` retains its existing
policy requiring a literal space.
Unregistered keywords produce `UnsupportedStatement` warnings through
`ParseFileWithDiagnostics`. `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
@@ -897,7 +1196,8 @@ 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.
text, escape a quote or a backslash with a preceding 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`.
@@ -926,7 +1226,7 @@ if (const std::string *description = value.GetValueDescription()) {
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.
definition remains alive. A decoded signal owns its immutable definition across reload.
For metadata or standalone raw values, use
`FindValueDescription(signal.valueDescriptions, rawValue)`, where `rawValue` is
@@ -949,8 +1249,9 @@ Not supported yet:
- extended and nested multiplexing (`SG_MUL_VAL_`, `mNM`)
- named `VAL_TABLE_` tables and environment-variable value descriptions
- `BA_` attributes
- `BA_DEF_` definitions
- attribute relation forms (`BA_REL_`, `BA_DEF_REL_`)
- `SIG_VALTYPE_` floating-point signal types
- signal types/references (`SGTYPE_`, `SIG_TYPE_REF_`) and environment variables
- advanced comment handling
- full DBC grammar coverage
- full J1939 validation
@@ -958,13 +1259,15 @@ Not supported yet:
Additional behavior to account for:
- unregistered DBC keywords are ignored
- unregistered DBC keywords are skipped with warnings in the diagnostic API
- an `SG_` statement before the first frame is rejected
- duplicate frame and signal definitions are not rejected globally; ambiguous
`VAL_` references to them are 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
- comment handling is limited to frame and signal comments; references resolve
after definitions are read
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,
@@ -1002,7 +1305,7 @@ Recommended additions:
Recommended additions:
- basic multiplexing (implemented)
- attribute parsing
- attribute parsing (implemented for definitions, defaults and values)
- richer J1939 support
- CSV export of decoded traces
- optimized filtering and signal selection
@@ -1025,12 +1328,15 @@ 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.
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.
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.
Build out of source (Qt 6; use `qmake` for Qt 5):
Build out of source with Qt 6.8.2:
```sh
mkdir build
@@ -1061,8 +1367,15 @@ qmake is still the build tool; this target does not link Qt libraries.
### Optional Qt model adapter
Requires Qt 5.11 or newer (including Qt 6) for `QAbstractItemModelTester`.
The adapter itself links only Qt Core. Enable its library and focused QtTest suite:
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
@@ -1086,7 +1399,7 @@ directories when building separately. A widget application also needs `QT += wid
// Run after constructing QApplication; view owns the model through QObject.
QTreeView view;
auto *model = new DbcTreeModel(&view);
DbcTreeModel *model = new DbcTreeModel(&view);
model->SetTree(DbcTreeBuilder().Build(DbcParser().ParseFile("example.dbc")));
view.setModel(model);
view.expandAll();
@@ -1188,3 +1501,265 @@ 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.
`dbc_pipeline_test.cpp` follows temporary DBC fixtures through parsed metadata,
runtime frame/signal lookups, decoded raw/physical values and descriptions, and
tree nodes. It verifies all supported metadata in both builders, standard and
extended frames sharing a numeric ID, empty databases, comments, and replacement
with another fixture or an empty database.
## Code review and additional checks
Attribute numeric parsing shares one locale-independent converter for integer and
floating-point values. Default application skips unrelated scopes, CAN ID
normalization uses the validated identifier mask, and signal layout validation
owns the length checks. Statement handlers continue to use `TypeFactory`.
Core, adapter, example, and test C++ sources use explicit return types and contain
no lambdas. Public metadata and parser-state comments use Doxygen descriptions.
See [tests/README.md](tests/README.md#extended-validation) for attribute boundary
regressions, sanitizer commands, and the latest validation results.
## Measuring code coverage
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.
### GCC, gcov, and LCOV on Debian/Ubuntu
Install the build and report tools:
```sh
sudo apt install build-essential qt6-base-dev qt6-base-dev-tools qmake6 lcov
# Optional IDE:
sudo apt install qtcreator
```
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).
+23
View File
@@ -0,0 +1,23 @@
QMAKE_CXX.QT_COMPILER_STDCXX = 201703L
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 14
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
QMAKE_CXX.COMPILER_MACROS = \
QT_COMPILER_STDCXX \
QMAKE_GCC_MAJOR_VERSION \
QMAKE_GCC_MINOR_VERSION \
QMAKE_GCC_PATCH_VERSION
QMAKE_CXX.INCDIRS = \
/usr/include/c++/14 \
/usr/include/x86_64-linux-gnu/c++/14 \
/usr/include/c++/14/backward \
/usr/lib/gcc/x86_64-linux-gnu/14/include \
/usr/local/include \
/usr/include/x86_64-linux-gnu \
/usr/include
QMAKE_CXX.LIBDIRS = \
/usr/lib/gcc/x86_64-linux-gnu/14 \
/usr/lib/x86_64-linux-gnu \
/usr/lib \
/lib/x86_64-linux-gnu \
/lib
+642
View File
@@ -0,0 +1,642 @@
#############################################################################
# Makefile for building: dbc
# Generated by qmake (3.1) (Qt 6.8.2)
# Project: ../dbc.pro
# Template: subdirs
# Command: /usr/bin/qmake6 -o Makefile ../dbc.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
#############################################################################
MAKEFILE = Makefile
EQ = =
first: make_first
QMAKE = /usr/bin/qmake6
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
COPY = cp -f
COPY_FILE = cp -f
COPY_DIR = cp -f -R
INSTALL_FILE = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR = cp -f -R
QINSTALL = /usr/bin/qmake6 -install qinstall
QINSTALL_PROGRAM = /usr/bin/qmake6 -install qinstall -exe
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = dbc1.0.0
DISTDIR = /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/build-coverage/.tmp/dbc1.0.0
SUBTARGETS = \
sub-core \
sub-tests \
sub-tests-tree_tests-pro \
sub-qt \
sub-tests-model_tests-pro
sub-core-qmake_all: FORCE
@test -d core/ || mkdir -p core/
cd core/ && $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
cd core/ && $(MAKE) -f Makefile qmake_all
sub-core: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-core-make_first: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-core-all: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile all
sub-core-clean: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile clean
sub-core-distclean: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile distclean
sub-core-install_subtargets: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile install
sub-core-uninstall_subtargets: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile uninstall
sub-tests-qmake_all: sub-core-qmake_all FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
cd tests/ && $(MAKE) -f Makefile qmake_all
sub-tests: sub-core FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-tests-make_first: sub-core-make_first FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-tests-all: sub-core-all FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile all
sub-tests-clean: sub-core-clean FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile clean
sub-tests-distclean: sub-core-distclean FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile distclean
sub-tests-install_subtargets: sub-core-install_subtargets FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile install
sub-tests-uninstall_subtargets: sub-core-uninstall_subtargets FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile uninstall
sub-tests-tree_tests-pro-qmake_all: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
cd tests/ && $(MAKE) -f Makefile.tree_tests qmake_all
sub-tests-tree_tests-pro: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests
sub-tests-tree_tests-pro-make_first: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests
sub-tests-tree_tests-pro-all: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests all
sub-tests-tree_tests-pro-clean: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests clean
sub-tests-tree_tests-pro-distclean: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests distclean
sub-tests-tree_tests-pro-install_subtargets: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests install
sub-tests-tree_tests-pro-uninstall_subtargets: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests uninstall
sub-qt-qmake_all: sub-core-qmake_all FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
cd qt/ && $(MAKE) -f Makefile qmake_all
sub-qt: sub-core FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-qt-make_first: sub-core-make_first FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile
sub-qt-all: sub-core-all FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile all
sub-qt-clean: sub-core-clean FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile clean
sub-qt-distclean: sub-core-distclean FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile distclean
sub-qt-install_subtargets: sub-core-install_subtargets FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile install
sub-qt-uninstall_subtargets: sub-core-uninstall_subtargets FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile uninstall
sub-tests-model_tests-pro-qmake_all: sub-qt-qmake_all FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
cd tests/ && $(MAKE) -f Makefile.model_tests qmake_all
sub-tests-model_tests-pro: sub-qt FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests
sub-tests-model_tests-pro-make_first: sub-qt-make_first FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests
sub-tests-model_tests-pro-all: sub-qt-all FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests all
sub-tests-model_tests-pro-clean: sub-qt-clean FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests clean
sub-tests-model_tests-pro-distclean: sub-qt-distclean FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests distclean
sub-tests-model_tests-pro-install_subtargets: sub-qt-install_subtargets FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests install
sub-tests-model_tests-pro-uninstall_subtargets: sub-qt-uninstall_subtargets FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests uninstall
Makefile: ../dbc.pro /usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobuf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtcoretypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtguitypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufwellknowntypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlassetdownloader.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcompiler.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlintegration.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmllocalstorage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlnetwork.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetimport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3deffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3diblbaker.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticles.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysics.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3druntimerender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dxr.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2impl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2material.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universal.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2utils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicklayouts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickvectorimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjectsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_repparser.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxmlqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensorsquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_spatialaudio.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachineqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svgwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_texttospeech.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboard.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositoriviapplication.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorpresentationtime.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorwlshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorxdgshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannelquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webview.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webviewquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf \
../dbc.pro
$(QMAKE) -o Makefile ../dbc.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdf.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioning.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioningquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobuf.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtcoretypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtguitypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufwellknowntypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlassetdownloader.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcompiler.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlintegration.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmllocalstorage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmodels.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlnetwork.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlworkerscript.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlxmllistmodel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetimport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetutils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3deffects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpers.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3diblbaker.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticleeffects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticles.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysics.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3druntimerender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dutils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dxr.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basic.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusion.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imagine.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2impl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2material.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universal.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2utils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicklayouts.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickvectorimage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjectsqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_repparser.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxmlqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensorsquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialbus.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_spatialaudio.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachine.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachineqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svg.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svgwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_texttospeech.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboard.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositoriviapplication.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorpresentationtime.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorwlshell.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorxdgshell.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannelquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_websockets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webview.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webviewquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf:
../dbc.pro:
qmake: FORCE
@$(QMAKE) -o Makefile ../dbc.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
qmake_all: sub-core-qmake_all sub-tests-qmake_all sub-tests-tree_tests-pro-qmake_all sub-qt-qmake_all sub-tests-model_tests-pro-qmake_all FORCE
make_first: sub-core-make_first sub-tests-make_first sub-tests-tree_tests-pro-make_first sub-qt-make_first sub-tests-model_tests-pro-make_first FORCE
all: sub-core-all sub-tests-all sub-tests-tree_tests-pro-all sub-qt-all sub-tests-model_tests-pro-all FORCE
clean: sub-core-clean sub-tests-clean sub-tests-tree_tests-pro-clean sub-qt-clean sub-tests-model_tests-pro-clean FORCE
distclean: sub-core-distclean sub-tests-distclean sub-tests-tree_tests-pro-distclean sub-qt-distclean sub-tests-model_tests-pro-distclean FORCE
-$(DEL_FILE) Makefile
-$(DEL_FILE) .qmake.stash
install_subtargets: sub-core-install_subtargets sub-tests-install_subtargets sub-tests-tree_tests-pro-install_subtargets sub-qt-install_subtargets sub-tests-model_tests-pro-install_subtargets FORCE
uninstall_subtargets: sub-core-uninstall_subtargets sub-tests-uninstall_subtargets sub-tests-tree_tests-pro-uninstall_subtargets sub-qt-uninstall_subtargets sub-tests-model_tests-pro-uninstall_subtargets FORCE
sub-core-check:
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile check
sub-tests-check: sub-core-check
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile check
sub-tests-tree_tests-pro-check:
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests check
sub-qt-check: sub-core-check
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile check
sub-tests-model_tests-pro-check: sub-qt-check
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests check
check: sub-core-check sub-tests-check sub-tests-tree_tests-pro-check sub-qt-check sub-tests-model_tests-pro-check
sub-core-benchmark:
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile benchmark
sub-tests-benchmark: sub-core-benchmark
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile benchmark
sub-tests-tree_tests-pro-benchmark:
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.tree_tests benchmark
sub-qt-benchmark: sub-core-benchmark
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile benchmark
sub-tests-model_tests-pro-benchmark: sub-qt-benchmark
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -f Makefile.model_tests benchmark
benchmark: sub-core-benchmark sub-tests-benchmark sub-tests-tree_tests-pro-benchmark sub-qt-benchmark sub-tests-model_tests-pro-benchmark
install:install_subtargets FORCE
uninstall: uninstall_subtargets FORCE
FORCE:
.SUFFIXES:
dist: distdir FORCE
(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
distdir: sub-core-distdir sub-tests-distdir sub-tests-tree_tests-pro-distdir sub-qt-distdir sub-tests-model_tests-pro-distdir FORCE
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri /usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_ Line truncated
sub-core-distdir: FORCE
@test -d core/ || mkdir -p core/
cd core/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/core
sub-tests-distdir: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/tests
sub-tests-tree_tests-pro-distdir: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.tree_tests || $(QMAKE) -o Makefile.tree_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/tree_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -e -f Makefile.tree_tests distdir DISTDIR=$(DISTDIR)/tests
sub-qt-distdir: FORCE
@test -d qt/ || mkdir -p qt/
cd qt/ && ( test -e Makefile || $(QMAKE) -o Makefile /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/qt.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -e -f Makefile distdir DISTDIR=$(DISTDIR)/qt
sub-tests-model_tests-pro-distdir: FORCE
@test -d tests/ || mkdir -p tests/
cd tests/ && ( test -e Makefile.model_tests || $(QMAKE) -o Makefile.model_tests /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tests/model_tests.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage ) && $(MAKE) -e -f Makefile.model_tests distdir DISTDIR=$(DISTDIR)/tests
File diff suppressed because it is too large. Load diff
+842
View File
@@ -0,0 +1,842 @@
#############################################################################
# Makefile for building: libdbc_core.a
# Generated by qmake (3.1) (Qt 6.8.2)
# Project: ../../core/core.pro
# Template: lib
# Command: /usr/bin/qmake6 -o Makefile ../../core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
#############################################################################
MAKEFILE = Makefile
EQ = =
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES =
CFLAGS = -pipe -g -fPIC -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe --coverage -fprofile-abs-path -g -fPIC -std=gnu++1z -Wall -Wextra $(DEFINES)
INCPATH = -I../../core -I. -I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++
QMAKE = /usr/bin/qmake6
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
COPY = cp -f
COPY_FILE = cp -f
COPY_DIR = cp -f -R
INSTALL_FILE = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR = cp -f -R
QINSTALL = /usr/bin/qmake6 -install qinstall
QINSTALL_PROGRAM = /usr/bin/qmake6 -install qinstall -exe
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = dbc_core1.0.0
DISTDIR = /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/build-coverage/core/.tmp/dbc_core1.0.0
AR = ar cqs
RANLIB =
SED = sed
STRIP = strip
####### Output directory
OBJECTS_DIR = ./
####### Files
SOURCES = ../../core/dbc_attributes.cpp \
../../core/decode_database.cpp \
../../core/dbc_decode_builder.cpp \
../../core/dbc_decoder.cpp \
../../core/dbc_parser.cpp \
../../core/dbc_statement_handler.cpp \
../../core/dbc_tree_builder.cpp \
../../core/tree_node.cpp
OBJECTS = dbc_attributes.o \
decode_database.o \
dbc_decode_builder.o \
dbc_decoder.o \
dbc_parser.o \
dbc_statement_handler.o \
dbc_tree_builder.o \
tree_node.o
DIST = /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobuf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtcoretypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtguitypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufwellknowntypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlassetdownloader.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcompiler.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlintegration.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmllocalstorage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlnetwork.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetimport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3deffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3diblbaker.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticles.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysics.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3druntimerender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dxr.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2impl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2material.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universal.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2utils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicklayouts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickvectorimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjectsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_repparser.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxmlqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensorsquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_spatialaudio.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachineqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svgwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_texttospeech.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboard.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositoriviapplication.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorpresentationtime.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorwlshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorxdgshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannelquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webview.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webviewquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf \
../../.qmake.stash \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf \
../../../core/core_files.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf \
../../../core/core.pro /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/attributes.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/j1939.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_layout.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/multiplexing.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_database.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decode_builder.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_tree_builder.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/frame_info.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/value_descriptions.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/text_utils.h \
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h ../../core/dbc_attributes.cpp \
../../core/decode_database.cpp \
../../core/dbc_decode_builder.cpp \
../../core/dbc_decoder.cpp \
../../core/dbc_parser.cpp \
../../core/dbc_statement_handler.cpp \
../../core/dbc_tree_builder.cpp \
../../core/tree_node.cpp
QMAKE_TARGET = dbc_core
DESTDIR =
TARGET = libdbc_core.a
first: all
####### Build rules
staticlib: $(TARGET)
libdbc_core.a: $(OBJECTS) $(OBJCOMP)
-$(DEL_FILE) $(TARGET)
$(AR) $(DESTDIR)$(TARGET) $(OBJECTS)
Makefile: ../../core/core.pro /usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobuf.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtcoretypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtguitypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufwellknowntypes.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlassetdownloader.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcompiler.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlintegration.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmllocalstorage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlnetwork.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3d.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetimport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3deffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3diblbaker.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticles.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysics.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3druntimerender.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dutils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dxr.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basic.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2impl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2material.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universal.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2utils.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicklayouts.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickvectorimage.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjects.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjectsqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_repparser.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxmlqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensorsquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialbus.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialport.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_spatialaudio.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachine.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachineqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svgwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_texttospeech.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboard.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositoriviapplication.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorpresentationtime.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorwlshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorxdgshell.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannelquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webview.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webviewquick.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf \
../.qmake.stash \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf \
../../core/core_files.pri \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf \
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf \
../../core/core.pro
$(QMAKE) -o Makefile ../../core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3danimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dcore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dextras.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dinput.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dlogic.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickanimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickextras.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickinput.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickrender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene2d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3dquickscene3d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_3drender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_bluetooth.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_charts.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_chartsqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualization.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_datavisualizationqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_example_icons_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphs.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_graphswidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpc.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_grpcquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_help.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_httpserver.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_hunspellinputmethod.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsanimation.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsfolderlistmodel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsplatform.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labsqmlmodels.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssettings.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labssharedimage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_labswavefrontmesh.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_linguist.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_location.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_networkauth.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_nfc.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdf.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioning.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_positioningquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobuf.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtcoretypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufqtguitypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_protobufwellknowntypes.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlassetdownloader.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcompiler.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlcore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlintegration.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmllocalstorage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmeta_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlmodels.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlnetwork.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlworkerscript.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_qmlxmllistmodel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3d.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetimport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dassetutils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3deffects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpers.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3diblbaker.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticleeffects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dparticles.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysics.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3druntimerender.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dutils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quick3dxr.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basic.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusion.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imagine.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2impl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2material.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universal.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickdialogs2utils.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicklayouts.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimeline_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickvectorimage.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjects.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_remoteobjectsqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_repparser.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_scxmlqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sensorsquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialbus.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_serialport.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_shadertools_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_spatialaudio.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachine.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_statemachineqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svg.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_svgwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_texttospeech.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboard.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositoriviapplication.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorpresentationtime.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorwlshell.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_waylandcompositorxdgshell.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webchannelquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_websockets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webview.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_webviewquick.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf:
../.qmake.stash:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf:
../../core/core_files.pri:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf:
/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf:
../../core/core.pro:
qmake: FORCE
@$(QMAKE) -o Makefile ../../core/core.pro CONFIG+=dbc_qt CONFIG+=debug CONFIG-=release 'QMAKE_CXXFLAGS+=--coverage -fprofile-abs-path' QMAKE_LFLAGS+=--coverage
qmake_all: FORCE
all: Makefile libdbc_core.a
dist: distdir FORCE
(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
distdir: FORCE
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
clean: compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core
distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile
####### Sub-libraries
check: first
benchmark: first
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean:
####### Compile
dbc_attributes.o: ../../core/dbc_attributes.cpp ../../core/dbc_statement_handler.h \
../../core/dbc_database.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/dbc_diagnostic.h \
../../core/typefactory.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_attributes.o ../../core/dbc_attributes.cpp
decode_database.o: ../../core/decode_database.cpp ../../core/decode_database.h \
../../core/attributes.h \
../../core/definition_key.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/j1939.h \
../../core/signal_layout.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o decode_database.o ../../core/decode_database.cpp
dbc_decode_builder.o: ../../core/dbc_decode_builder.cpp ../../core/dbc_decode_builder.h \
../../core/dbc_database.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/decode_database.h \
../../core/definition_key.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_decode_builder.o ../../core/dbc_decode_builder.cpp
dbc_decoder.o: ../../core/dbc_decoder.cpp ../../core/dbc_decoder.h \
../../core/decode_database.h \
../../core/attributes.h \
../../core/definition_key.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/j1939.h \
../../core/signal_layout.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_decoder.o ../../core/dbc_decoder.cpp
dbc_parser.o: ../../core/dbc_parser.cpp ../../core/dbc_parser.h \
../../core/dbc_diagnostic.h \
../../core/dbc_database.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/dbc_statement_handler.h \
../../core/typefactory.h \
../../core/text_utils.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_parser.o ../../core/dbc_parser.cpp
dbc_statement_handler.o: ../../core/dbc_statement_handler.cpp ../../core/dbc_statement_handler.h \
../../core/dbc_database.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/dbc_diagnostic.h \
../../core/typefactory.h \
../../core/j1939.h \
../../core/text_utils.h \
../../core/signal_layout.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_statement_handler.o ../../core/dbc_statement_handler.cpp
dbc_tree_builder.o: ../../core/dbc_tree_builder.cpp ../../core/dbc_tree_builder.h \
../../core/dbc_database.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h \
../../core/tree_node.h \
../../core/definition_key.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dbc_tree_builder.o ../../core/dbc_tree_builder.cpp
tree_node.o: ../../core/tree_node.cpp ../../core/tree_node.h \
../../core/definition_key.h \
../../core/frame_info.h \
../../core/attributes.h \
../../core/signal_info.h \
../../core/multiplexing.h \
../../core/value_descriptions.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tree_node.o ../../core/tree_node.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:
.SUFFIXES:
Binary file not shown.
Whitespace-only changes.
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

+1
View File
@@ -0,0 +1 @@
genhtml coverage.info --branch-coverage --demangle-cpp --output-directory html --quiet
@@ -0,0 +1,253 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_attributes.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_attributes.cpp<span style="font-size: 80%;"> (<a href="dbc_attributes.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.8&nbsp;%</td>
<td class="headerCovTableEntry">260</td>
<td class="headerCovTableEntry">257</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntry">20</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">73.5&nbsp;%</td>
<td class="headerCovTableEntry">604</td>
<td class="headerCovTableEntry">444</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_attributes.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L232">(anonymous namespace)::ApplyDefault(DbcDatabase&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, AttributeDefinition const&amp;)</a></td>
<td class="coverFnHi">15</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L212">(anonymous namespace)::Target(DbcDatabase&amp;, AttributeAssignment const&amp;)</a></td>
<td class="coverFnHi">15</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L203">(anonymous namespace)::ParseId(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, AttributeAssignment&amp;)</a></td>
<td class="coverFnHi">32</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L225">(anonymous namespace)::ValidateCycleTime(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, std::variant&lt;long, double, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L97">(anonymous namespace)::ParseScope(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">110</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L93">(anonymous namespace)::IsScope(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">115</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L121">(anonymous namespace)::Value((anonymous namespace)::Token const&amp;, AttributeDefinition const&amp;, bool)</a></td>
<td class="coverFnHi">204</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L196">(anonymous namespace)::FindDefinition(DbcDatabase&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">218</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L83">(anonymous namespace)::AttributeTokens::End() const</a></td>
<td class="coverFnHi">245</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L82">(anonymous namespace)::AttributeTokens::Empty() const</a></td>
<td class="coverFnHi">262</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L76">(anonymous namespace)::AttributeTokens::Quoted()</a></td>
<td class="coverFnHi">315</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L146">(anonymous namespace)::Define((anonymous namespace)::AttributeTokens&amp;, DbcDatabase&amp;)</a></td>
<td class="coverFnHi">393</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L253">DbcParseContext::ResolveAttributes(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, std::vector&lt;DbcDiagnostic, std::allocator&lt;DbcDiagnostic&gt; &gt;&amp;)</a></td>
<td class="coverFnHi">549</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L64">(anonymous namespace)::AttributeTokens::AttributeTokens(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L12">(anonymous namespace)::Tokenize(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L249">DbcAttributeHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L106">long (anonymous namespace)::ParseNumber&lt;long&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">866</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_attributes.cpp.gcov.html#L106">double (anonymous namespace)::ParseNumber&lt;double&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">239</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_attributes.cpp.gcov.html#L106">long (anonymous namespace)::ParseNumber&lt;long&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">627</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L70">(anonymous namespace)::AttributeTokens::Word()</a></td>
<td class="coverFnHi">1681</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L65">(anonymous namespace)::AttributeTokens::Take()</a></td>
<td class="coverFnHi">2639</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,253 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_attributes.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_attributes.cpp<span style="font-size: 80%;"> (<a href="dbc_attributes.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.8&nbsp;%</td>
<td class="headerCovTableEntry">260</td>
<td class="headerCovTableEntry">257</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntry">20</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">73.5&nbsp;%</td>
<td class="headerCovTableEntry">604</td>
<td class="headerCovTableEntry">444</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_attributes.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L232">(anonymous namespace)::ApplyDefault(DbcDatabase&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, AttributeDefinition const&amp;)</a></td>
<td class="coverFnHi">15</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L64">(anonymous namespace)::AttributeTokens::AttributeTokens(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L82">(anonymous namespace)::AttributeTokens::Empty() const</a></td>
<td class="coverFnHi">262</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L83">(anonymous namespace)::AttributeTokens::End() const</a></td>
<td class="coverFnHi">245</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L76">(anonymous namespace)::AttributeTokens::Quoted()</a></td>
<td class="coverFnHi">315</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L65">(anonymous namespace)::AttributeTokens::Take()</a></td>
<td class="coverFnHi">2639</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L70">(anonymous namespace)::AttributeTokens::Word()</a></td>
<td class="coverFnHi">1681</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L146">(anonymous namespace)::Define((anonymous namespace)::AttributeTokens&amp;, DbcDatabase&amp;)</a></td>
<td class="coverFnHi">393</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L196">(anonymous namespace)::FindDefinition(DbcDatabase&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">218</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L93">(anonymous namespace)::IsScope(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">115</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L203">(anonymous namespace)::ParseId(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, AttributeAssignment&amp;)</a></td>
<td class="coverFnHi">32</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L97">(anonymous namespace)::ParseScope(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">110</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L212">(anonymous namespace)::Target(DbcDatabase&amp;, AttributeAssignment const&amp;)</a></td>
<td class="coverFnHi">15</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L12">(anonymous namespace)::Tokenize(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L225">(anonymous namespace)::ValidateCycleTime(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, std::variant&lt;long, double, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L121">(anonymous namespace)::Value((anonymous namespace)::Token const&amp;, AttributeDefinition const&amp;, bool)</a></td>
<td class="coverFnHi">204</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L249">DbcAttributeHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">621</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L253">DbcParseContext::ResolveAttributes(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, std::vector&lt;DbcDiagnostic, std::allocator&lt;DbcDiagnostic&gt; &gt;&amp;)</a></td>
<td class="coverFnHi">549</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_attributes.cpp.gcov.html#L106">long (anonymous namespace)::ParseNumber&lt;long&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">866</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_attributes.cpp.gcov.html#L106">double (anonymous namespace)::ParseNumber&lt;double&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">239</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_attributes.cpp.gcov.html#L106">long (anonymous namespace)::ParseNumber&lt;long&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">627</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,451 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_attributes.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_attributes.cpp<span style="font-size: 80%;"> (source / <a href="dbc_attributes.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.8&nbsp;%</td>
<td class="headerCovTableEntry">260</td>
<td class="headerCovTableEntry">257</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntry">20</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">73.5&nbsp;%</td>
<td class="headerCovTableEntry">604</td>
<td class="headerCovTableEntry">444</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #include &quot;dbc_statement_handler.h&quot;</span>
<span id="L3"><span class="lineNum"> 3</span> : : #include &lt;charconv&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : : #include &lt;cmath&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &lt;limits&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : : #include &lt;set&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : : </span>
<span id="L8"><span class="lineNum"> 8</span> : : namespace {</span>
<span id="L9"><span class="lineNum"> 9</span> : : struct Token {</span>
<span id="L10"><span class="lineNum"> 10</span> : : std::string text;</span>
<span id="L11"><span class="lineNum"> 11</span> : : bool quoted = false;</span>
<span id="L12"><span class="lineNum"> 12</span> : : };</span>
<span id="L13"><span class="lineNum"> 13</span> : : </span>
<span id="L14"><span class="lineNum"> 14</span> :<span class="tlaGNC"> 621 : std::vector&lt;Token&gt; Tokenize(const std::string &amp;text) {</span></span>
<span id="L15"><span class="lineNum"> 15</span> :<span class="tlaGNC"> 621 : std::vector&lt;Token&gt; tokens;</span></span>
<span id="L16"><span class="lineNum"> 16</span> :<span class="tlaGNC"> 621 : std::size_t index = 0U;</span></span>
<span id="L17"><span class="lineNum"> 17</span> [<span class="tlaGBC" title="Branch 0 was taken 5528 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 613 times"> + </span>]:<span class="tlaGNC"> 6141 : while (index &lt; text.size()) {</span></span>
<span id="L18"><span class="lineNum"> 18</span> :<span class="tlaGNC"> 5528 : const char character = text[index++];</span></span>
<span id="L19"><span class="lineNum"> 19</span> [<span class="tlaGBC" title="Branch 0 was taken 3390 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2138 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 3390 times"> + </span>]:<span class="tlaGNC"> 5528 : if (character == ' ' || character == '\t')</span></span>
<span id="L20"><span class="lineNum"> 20</span> :<span class="tlaGNC"> 2138 : continue;</span></span>
<span id="L21"><span class="lineNum"> 21</span> :<span class="tlaGNC"> 3390 : Token token;</span></span>
<span id="L22"><span class="lineNum"> 22</span> [<span class="tlaGBC" title="Branch 0 was taken 652 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2738 times"> + </span>]:<span class="tlaGNC"> 3390 : if (character == '&quot;') {</span></span>
<span id="L23"><span class="lineNum"> 23</span> :<span class="tlaGNC"> 652 : token.quoted = true;</span></span>
<span id="L24"><span class="lineNum"> 24</span> :<span class="tlaGNC"> 652 : bool closed = false;</span></span>
<span id="L25"><span class="lineNum"> 25</span> [<span class="tlaGBC" title="Branch 0 was taken 1936 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 1938 : while (index &lt; text.size()) {</span></span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 1936 : char next = text[index++];</span></span>
<span id="L27"><span class="lineNum"> 27</span> [<span class="tlaGBC" title="Branch 0 was taken 648 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1288 times"> + </span>]:<span class="tlaGNC"> 1936 : if (next == '&quot;') {</span></span>
<span id="L28"><span class="lineNum"> 28</span> :<span class="tlaGNC"> 648 : closed = true;</span></span>
<span id="L29"><span class="lineNum"> 29</span> :<span class="tlaGNC"> 648 : break;</span></span>
<span id="L30"><span class="lineNum"> 30</span> : : }</span>
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1284 times"> + </span>]:<span class="tlaGNC"> 1288 : if (next == '\\') {</span></span>
<span id="L32"><span class="lineNum"> 32</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 4 : if (index == text.size())</span></span>
<span id="L33"><span class="lineNum"> 33</span> [<span class="tlaUNC" title="Branch 0 was not executed"> # </span><span class="tlaUNC" title="Branch 1 was not executed"> # </span>]:<span class="tlaUNC"> 0 : throw std::runtime_error(&quot;Incomplete attribute escape.&quot;);</span></span>
<span id="L34"><span class="lineNum"> 34</span> :<span class="tlaGNC"> 4 : next = text[index++];</span></span>
<span id="L35"><span class="lineNum"> 35</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span>]:<span class="tlaGNC"> 4 : if (next != '&quot;' &amp;&amp; next != '\\')</span></span>
<span id="L36"><span class="lineNum"> 36</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Invalid attribute escape.&quot;);</span></span>
<span id="L37"><span class="lineNum"> 37</span> : : }</span>
<span id="L38"><span class="lineNum"> 38</span> [<span class="tlaGBC" title="Branch 0 was taken 1286 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1286 : token.text += next;</span></span>
<span id="L39"><span class="lineNum"> 39</span> : : }</span>
<span id="L40"><span class="lineNum"> 40</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 648 times"> + </span>]:<span class="tlaGNC"> 650 : if (!closed)</span></span>
<span id="L41"><span class="lineNum"> 41</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unterminated attribute string.&quot;);</span></span>
<span id="L42"><span class="lineNum"> 42</span> [<span class="tlaGBC" title="Branch 0 was taken 33 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 615 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 33 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1296 : if (index &lt; text.size() &amp;&amp; text[index] != ' ' &amp;&amp; text[index] != '\t' &amp;&amp;</span></span>
<span id="L43"><span class="lineNum"> 43</span> [<span class="tlaGBC" title="Branch 0 was taken 648 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 10 times"> + </span> :<span class="tlaGNC"> 1296 : text[index] != ',' &amp;&amp; text[index] != ';')</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 646 times"> + </span>]
<span id="L44"><span class="lineNum"> 44</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing separator after attribute string.&quot;);</span></span>
<span id="L45"><span class="lineNum"> 45</span> [<span class="tlaGBC" title="Branch 0 was taken 2125 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 613 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2115 times"> + </span>]:<span class="tlaGNC"> 2738 : } else if (character == ';' || character == ',') {</span></span>
<span id="L46"><span class="lineNum"> 46</span> [<span class="tlaGBC" title="Branch 0 was taken 623 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 623 : token.text = character;</span></span>
<span id="L47"><span class="lineNum"> 47</span> : : } else {</span>
<span id="L48"><span class="lineNum"> 48</span> [<span class="tlaGBC" title="Branch 0 was taken 2115 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2115 : token.text = character;</span></span>
<span id="L49"><span class="lineNum"> 49</span> [<span class="tlaGBC" title="Branch 0 was taken 7618 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1521 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 7618 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 18280 : while (index &lt; text.size() &amp;&amp; text[index] != ' ' &amp;&amp; text[index] != '\t' &amp;&amp;</span></span>
<span id="L50"><span class="lineNum"> 50</span> [<span class="tlaGBC" title="Branch 0 was taken 9139 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 7028 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 590 times"> + </span> :<span class="tlaGNC"> 18280 : text[index] != ';' &amp;&amp; text[index] != ',') {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 7028 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 7028 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2113 times"> + </span>]
<span id="L51"><span class="lineNum"> 51</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 7026 times"> + </span>]:<span class="tlaGNC"> 7028 : if (text[index] == '&quot;')</span></span>
<span id="L52"><span class="lineNum"> 52</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing separator before attribute string.&quot;);</span></span>
<span id="L53"><span class="lineNum"> 53</span> [<span class="tlaGBC" title="Branch 0 was taken 7026 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7026 : token.text += text[index++];</span></span>
<span id="L54"><span class="lineNum"> 54</span> : : }</span>
<span id="L55"><span class="lineNum"> 55</span> : : }</span>
<span id="L56"><span class="lineNum"> 56</span> [<span class="tlaGBC" title="Branch 0 was taken 3382 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3382 : tokens.push_back(token);</span></span>
<span id="L57"><span class="lineNum"> 57</span> :<span class="tlaGNC"> 3390 : }</span></span>
<span id="L58"><span class="lineNum"> 58</span> [<span class="tlaGBC" title="Branch 0 was taken 613 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 613 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 613 : if (tokens.empty() || tokens.back().quoted || tokens.back().text != &quot;;&quot;)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 613 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 611 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 611 times"> + </span>]
<span id="L59"><span class="lineNum"> 59</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Attribute statement requires a semicolon.&quot;);</span></span>
<span id="L60"><span class="lineNum"> 60</span> :<span class="tlaGNC"> 611 : tokens.pop_back();</span></span>
<span id="L61"><span class="lineNum"> 61</span> :<span class="tlaGNC"> 611 : return tokens;</span></span>
<span id="L62"><span class="lineNum"> 62</span> :<span class="tlaGNC"> 10 : }</span></span>
<span id="L63"><span class="lineNum"> 63</span> : : </span>
<span id="L64"><span class="lineNum"> 64</span> : : class AttributeTokens {</span>
<span id="L65"><span class="lineNum"> 65</span> : : public:</span>
<span id="L66"><span class="lineNum"> 66</span> :<span class="tlaGNC"> 621 : explicit AttributeTokens(const std::string &amp;line) : tokens(Tokenize(line)) {}</span></span>
<span id="L67"><span class="lineNum"> 67</span> :<span class="tlaGNC"> 2639 : Token Take() {</span></span>
<span id="L68"><span class="lineNum"> 68</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2635 times"> + </span>]:<span class="tlaGNC"> 2639 : if (position == tokens.size())</span></span>
<span id="L69"><span class="lineNum"> 69</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Incomplete attribute statement.&quot;);</span></span>
<span id="L70"><span class="lineNum"> 70</span> :<span class="tlaGNC"> 2635 : return tokens[position++];</span></span>
<span id="L71"><span class="lineNum"> 71</span> : : }</span>
<span id="L72"><span class="lineNum"> 72</span> :<span class="tlaGNC"> 1681 : std::string Word() {</span></span>
<span id="L73"><span class="lineNum"> 73</span> [<span class="tlaGBC" title="Branch 0 was taken 1681 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1681 : const Token token = Take();</span></span>
<span id="L74"><span class="lineNum"> 74</span> [<span class="tlaGBC" title="Branch 0 was taken 1679 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 1679 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1681 : if (token.quoted || token.text == &quot;,&quot; || token.text == &quot;;&quot;)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1679 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 1679 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaUNC" title="Branch 8 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1679 times"> + </span><span class="tlaGBC" title="Branch 10 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 1679 times"> + </span>]
<span id="L75"><span class="lineNum"> 75</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Expected an attribute keyword or number.&quot;);</span></span>
<span id="L76"><span class="lineNum"> 76</span> [<span class="tlaGBC" title="Branch 0 was taken 1679 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3358 : return token.text;</span></span>
<span id="L77"><span class="lineNum"> 77</span> :<span class="tlaGNC"> 1681 : }</span></span>
<span id="L78"><span class="lineNum"> 78</span> :<span class="tlaGNC"> 315 : std::string Quoted() {</span></span>
<span id="L79"><span class="lineNum"> 79</span> [<span class="tlaGBC" title="Branch 0 was taken 311 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 315 : const Token token = Take();</span></span>
<span id="L80"><span class="lineNum"> 80</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 309 times"> + </span>]:<span class="tlaGNC"> 311 : if (!token.quoted)</span></span>
<span id="L81"><span class="lineNum"> 81</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Expected a quoted attribute name or string.&quot;);</span></span>
<span id="L82"><span class="lineNum"> 82</span> [<span class="tlaGBC" title="Branch 0 was taken 309 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 618 : return token.text;</span></span>
<span id="L83"><span class="lineNum"> 83</span> :<span class="tlaGNC"> 311 : }</span></span>
<span id="L84"><span class="lineNum"> 84</span> :<span class="tlaGNC"> 262 : bool Empty() const { return position == tokens.size(); }</span></span>
<span id="L85"><span class="lineNum"> 85</span> :<span class="tlaGNC"> 245 : void End() const {</span></span>
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 245 times"> + </span>]:<span class="tlaGNC"> 245 : if (!Empty())</span></span>
<span id="L87"><span class="lineNum"> 87</span> [<span class="tlaUNC" title="Branch 0 was not executed"> # </span><span class="tlaUNC" title="Branch 1 was not executed"> # </span>]:<span class="tlaUNC"> 0 : throw std::runtime_error(&quot;Unexpected trailing attribute fields.&quot;);</span></span>
<span id="L88"><span class="lineNum"> 88</span> :<span class="tlaGNC"> 245 : }</span></span>
<span id="L89"><span class="lineNum"> 89</span> : : </span>
<span id="L90"><span class="lineNum"> 90</span> : : private:</span>
<span id="L91"><span class="lineNum"> 91</span> : : std::vector&lt;Token&gt; tokens;</span>
<span id="L92"><span class="lineNum"> 92</span> : : std::size_t position = 0U;</span>
<span id="L93"><span class="lineNum"> 93</span> : : };</span>
<span id="L94"><span class="lineNum"> 94</span> : : </span>
<span id="L95"><span class="lineNum"> 95</span> :<span class="tlaGNC"> 115 : bool IsScope(const std::string &amp;text) {</span></span>
<span id="L96"><span class="lineNum"> 96</span> [<span class="tlaGBC" title="Branch 0 was taken 88 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 27 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 83 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span> :<span class="tlaGNC"> 115 : return text == &quot;BO_&quot; || text == &quot;SG_&quot; || text == &quot;BU_&quot; || text == &quot;EV_&quot;;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 82 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 6 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 7 was taken 81 times"> + </span>]
<span id="L97"><span class="lineNum"> 97</span> : : }</span>
<span id="L98"><span class="lineNum"> 98</span> : : </span>
<span id="L99"><span class="lineNum"> 99</span> :<span class="tlaGNC"> 110 : AttributeScope ParseScope(const std::string &amp;text) {</span></span>
<span id="L100"><span class="lineNum"> 100</span> [<span class="tlaGBC" title="Branch 0 was taken 93 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 17 times"> + </span>]:<span class="tlaGNC"> 110 : if (text == &quot;BO_&quot;) return AttributeScope::Frame;</span></span>
<span id="L101"><span class="lineNum"> 101</span> [<span class="tlaGBC" title="Branch 0 was taken 11 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6 times"> + </span>]:<span class="tlaGNC"> 17 : if (text == &quot;SG_&quot;) return AttributeScope::Signal;</span></span>
<span id="L102"><span class="lineNum"> 102</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 6 : if (text == &quot;BU_&quot;) return AttributeScope::Node;</span></span>
<span id="L103"><span class="lineNum"> 103</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 4 : if (text == &quot;EV_&quot;) return AttributeScope::Environment;</span></span>
<span id="L104"><span class="lineNum"> 104</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unsupported attribute scope: &quot; + text);</span></span>
<span id="L105"><span class="lineNum"> 105</span> : : }</span>
<span id="L106"><span class="lineNum"> 106</span> : : </span>
<span id="L107"><span class="lineNum"> 107</span> : : template&lt;class Numeric&gt;</span>
<span id="L108"><span class="lineNum"> 108</span> :<span class="tlaGNC"> 866 : Numeric ParseNumber(const std::string &amp;text) {</span></span>
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 866 : const char *begin = text.data();</span></span>
<span id="L110"><span class="lineNum"> 110</span> :<span class="tlaGNC"> 866 : const char *end = begin + text.size();</span></span>
<span id="L111"><span class="lineNum"> 111</span> [<span class="tlaGBC" title="Branch 0 was taken 866 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 78 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 788 times"> + </span>]:<span class="tlaGNC"> 866 : if (begin != end &amp;&amp; *begin == '+') {</span></span>
<span id="L112"><span class="lineNum"> 112</span> :<span class="tlaGNC"> 78 : ++begin;</span></span>
<span id="L113"><span class="lineNum"> 113</span> [<span class="tlaGBC" title="Branch 0 was taken 54 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 30 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 24 times"> + </span> :<span class="tlaGNC"> 78 : if (begin != end &amp;&amp; (*begin == '-' || *begin == '+'))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 6 times"> + </span>]
<span id="L114"><span class="lineNum"> 114</span> [<span class="tlaGBC" title="Branch 0 was taken 48 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 48 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 48 : throw std::runtime_error(&quot;Invalid attribute number: &quot; + text);</span></span>
<span id="L115"><span class="lineNum"> 115</span> : : }</span>
<span id="L116"><span class="lineNum"> 116</span> :<span class="tlaGNC"> 818 : Numeric value = 0;</span></span>
<span id="L117"><span class="lineNum"> 117</span> [<span class="tlaGBC" title="Branch 0 was taken 595 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 818 : const std::from_chars_result parsed = std::from_chars(begin, end, value);</span></span>
<span id="L118"><span class="lineNum"> 118</span> [<span class="tlaGBC" title="Branch 0 was taken 794 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 664 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 130 times"> + </span> :<span class="tlaGNC"> 818 : if (begin == end || parsed.ec != std::errc() || parsed.ptr != end || !std::isfinite(value))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 576 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 88 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 28 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 548 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 270 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 548 times"> + </span>]
<span id="L119"><span class="lineNum"> 119</span> [<span class="tlaGBC" title="Branch 0 was taken 270 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 270 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 270 : throw std::runtime_error(&quot;Invalid attribute number: &quot; + text);</span></span>
<span id="L120"><span class="lineNum"> 120</span> :<span class="tlaGNC"> 548 : return value;</span></span>
<span id="L121"><span class="lineNum"> 121</span> : : }</span>
<span id="L122"><span class="lineNum"> 122</span> : : </span>
<span id="L123"><span class="lineNum"> 123</span> :<span class="tlaGNC"> 204 : AttributeValue Value(const Token &amp;token, const AttributeDefinition &amp;definition, bool isDefault) {</span></span>
<span id="L124"><span class="lineNum"> 124</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 198 times"> + </span>]:<span class="tlaGNC"> 204 : if (definition.type == AttributeType::String) {</span></span>
<span id="L125"><span class="lineNum"> 125</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6 : if (!token.quoted) throw std::runtime_error(&quot;Attribute STRING requires quoted text.&quot;);</span></span>
<span id="L126"><span class="lineNum"> 126</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : return token.text;</span></span>
<span id="L127"><span class="lineNum"> 127</span> : : }</span>
<span id="L128"><span class="lineNum"> 128</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 188 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span> :<span class="tlaGNC"> 198 : if (definition.type == AttributeType::Enum &amp;&amp; isDefault &amp;&amp; token.quoted) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 1 time"> + </span>]
<span id="L129"><span class="lineNum"> 129</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 9 : for (std::size_t index = 0U; index &lt; definition.enumValues.size(); ++index) {</span></span>
<span id="L130"><span class="lineNum"> 130</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span>]:<span class="tlaGNC"> 7 : if (definition.enumValues[index] == token.text)</span></span>
<span id="L131"><span class="lineNum"> 131</span> :<span class="tlaGNC"> 2 : return static_cast&lt;std::int64_t&gt;(index);</span></span>
<span id="L132"><span class="lineNum"> 132</span> : : }</span>
<span id="L133"><span class="lineNum"> 133</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unknown attribute ENUM default label.&quot;);</span></span>
<span id="L134"><span class="lineNum"> 134</span> : : }</span>
<span id="L135"><span class="lineNum"> 135</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 192 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 194 : if (token.quoted) throw std::runtime_error(&quot;Numeric attribute requires an unquoted number.&quot;);</span></span>
<span id="L136"><span class="lineNum"> 136</span> [<span class="tlaGBC" title="Branch 0 was taken 53 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 139 times"> + </span>]:<span class="tlaGNC"> 192 : if (definition.type == AttributeType::Float) {</span></span>
<span id="L137"><span class="lineNum"> 137</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 48 times"> + </span>]:<span class="tlaGNC"> 53 : const double value = ParseNumber&lt;double&gt;(token.text);</span></span>
<span id="L138"><span class="lineNum"> 138</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 3 times"> + </span>]:<span class="tlaGNC"> 5 : if (value &lt; definition.minimum || value &gt; definition.maximum)</span></span>
<span id="L139"><span class="lineNum"> 139</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Attribute FLOAT value outside definition range.&quot;);</span></span>
<span id="L140"><span class="lineNum"> 140</span> :<span class="tlaGNC"> 3 : return value;</span></span>
<span id="L141"><span class="lineNum"> 141</span> : : }</span>
<span id="L142"><span class="lineNum"> 142</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 108 times"> + </span>]:<span class="tlaGNC"> 139 : const std::int64_t value = ParseNumber&lt;std::int64_t&gt;(token.text);</span></span>
<span id="L143"><span class="lineNum"> 143</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 27 times"> + </span>]:<span class="tlaGNC"> 31 : if (value &lt; definition.integerMinimum || value &gt; definition.integerMaximum)</span></span>
<span id="L144"><span class="lineNum"> 144</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Attribute integer/ENUM value outside definition range.&quot;);</span></span>
<span id="L145"><span class="lineNum"> 145</span> :<span class="tlaGNC"> 27 : return value;</span></span>
<span id="L146"><span class="lineNum"> 146</span> : : }</span>
<span id="L147"><span class="lineNum"> 147</span> : : </span>
<span id="L148"><span class="lineNum"> 148</span> :<span class="tlaGNC"> 393 : void Define(AttributeTokens &amp;tokens, DbcDatabase &amp;database) {</span></span>
<span id="L149"><span class="lineNum"> 149</span> :<span class="tlaGNC"> 393 : AttributeDefinition definition;</span></span>
<span id="L150"><span class="lineNum"> 150</span> [<span class="tlaGBC" title="Branch 0 was taken 393 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 393 : const Token first = tokens.Take();</span></span>
<span id="L151"><span class="lineNum"> 151</span> [<span class="tlaGBC" title="Branch 0 was taken 393 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 393 : std::string name = first.text;</span></span>
<span id="L152"><span class="lineNum"> 152</span> [<span class="tlaGBC" title="Branch 0 was taken 76 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 317 times"> + </span>]:<span class="tlaGNC"> 393 : if (!first.quoted) {</span></span>
<span id="L153"><span class="lineNum"> 153</span> [<span class="tlaGBC" title="Branch 0 was taken 74 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 76 : definition.scope = ParseScope(first.text);</span></span>
<span id="L154"><span class="lineNum"> 154</span> [<span class="tlaGBC" title="Branch 0 was taken 72 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 74 : name = tokens.Quoted();</span></span>
<span id="L155"><span class="lineNum"> 155</span> : : }</span>
<span id="L156"><span class="lineNum"> 156</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 389 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 389 : if (name.empty()) throw std::runtime_error(&quot;Empty attribute name.&quot;);</span></span>
<span id="L157"><span class="lineNum"> 157</span> [<span class="tlaGBC" title="Branch 0 was taken 387 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 389 : const std::string type = tokens.Word();</span></span>
<span id="L158"><span class="lineNum"> 158</span> [<span class="tlaGBC" title="Branch 0 was taken 387 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 230 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 157 times"> + </span> :<span class="tlaGNC"> 387 : if (type == &quot;INT&quot; || type == &quot;HEX&quot;) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 230 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 98 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 132 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 255 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 132 times"> + </span>]
<span id="L159"><span class="lineNum"> 159</span> [<span class="tlaGBC" title="Branch 0 was taken 255 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 157 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 98 times"> + </span>]:<span class="tlaGNC"> 255 : definition.type = type == &quot;INT&quot; ? AttributeType::Integer : AttributeType::Hex;</span></span>
<span id="L160"><span class="lineNum"> 160</span> [<span class="tlaGBC" title="Branch 0 was taken 255 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 201 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 54 times"> + </span>]:<span class="tlaGNC"> 309 : definition.integerMinimum = ParseNumber&lt;std::int64_t&gt;(tokens.Word());</span></span>
<span id="L161"><span class="lineNum"> 161</span> [<span class="tlaGBC" title="Branch 0 was taken 201 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 145 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 56 times"> + </span>]:<span class="tlaGNC"> 257 : definition.integerMaximum = ParseNumber&lt;std::int64_t&gt;(tokens.Word());</span></span>
<span id="L162"><span class="lineNum"> 162</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 143 times"> + </span>]:<span class="tlaGNC"> 145 : if (definition.integerMinimum &gt; definition.integerMaximum)</span></span>
<span id="L163"><span class="lineNum"> 163</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Reversed attribute integer range.&quot;);</span></span>
<span id="L164"><span class="lineNum"> 164</span> [<span class="tlaGBC" title="Branch 0 was taken 132 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 106 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 26 times"> + </span>]:<span class="tlaGNC"> 132 : } else if (type == &quot;FLOAT&quot;) {</span></span>
<span id="L165"><span class="lineNum"> 165</span> :<span class="tlaGNC"> 106 : definition.type = AttributeType::Float;</span></span>
<span id="L166"><span class="lineNum"> 166</span> [<span class="tlaGBC" title="Branch 0 was taken 106 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 80 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 26 times"> + </span>]:<span class="tlaGNC"> 132 : definition.minimum = ParseNumber&lt;double&gt;(tokens.Word());</span></span>
<span id="L167"><span class="lineNum"> 167</span> [<span class="tlaGBC" title="Branch 0 was taken 80 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 54 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 26 times"> + </span>]:<span class="tlaGNC"> 106 : definition.maximum = ParseNumber&lt;double&gt;(tokens.Word());</span></span>
<span id="L168"><span class="lineNum"> 168</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 52 times"> + </span>]:<span class="tlaGNC"> 54 : if (definition.minimum &gt; definition.maximum)</span></span>
<span id="L169"><span class="lineNum"> 169</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Reversed attribute FLOAT range.&quot;);</span></span>
<span id="L170"><span class="lineNum"> 170</span> [<span class="tlaGBC" title="Branch 0 was taken 26 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 11 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 15 times"> + </span>]:<span class="tlaGNC"> 26 : } else if (type == &quot;STRING&quot;) {</span></span>
<span id="L171"><span class="lineNum"> 171</span> :<span class="tlaGNC"> 11 : definition.type = AttributeType::String;</span></span>
<span id="L172"><span class="lineNum"> 172</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span>]:<span class="tlaGNC"> 15 : } else if (type == &quot;ENUM&quot;) {</span></span>
<span id="L173"><span class="lineNum"> 173</span> :<span class="tlaGNC"> 13 : definition.type = AttributeType::Enum;</span></span>
<span id="L174"><span class="lineNum"> 174</span> :<span class="tlaGNC"> 13 : std::set&lt;std::string&gt; labels;</span></span>
<span id="L175"><span class="lineNum"> 175</span> : : for (;;) {</span>
<span id="L176"><span class="lineNum"> 176</span> [<span class="tlaGBC" title="Branch 0 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 23 : const std::string label = tokens.Quoted();</span></span>
<span id="L177"><span class="lineNum"> 177</span> [<span class="tlaGBC" title="Branch 0 was taken 19 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 17 times"> + </span>]:<span class="tlaGNC"> 19 : if (!labels.insert(label).second)</span></span>
<span id="L178"><span class="lineNum"> 178</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Duplicate attribute ENUM label.&quot;);</span></span>
<span id="L179"><span class="lineNum"> 179</span> [<span class="tlaGBC" title="Branch 0 was taken 17 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 17 : definition.enumValues.push_back(label);</span></span>
<span id="L180"><span class="lineNum"> 180</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 17 : if (tokens.Empty()) break;</span></span>
<span id="L181"><span class="lineNum"> 181</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 10 : const Token separator = tokens.Take();</span></span>
<span id="L182"><span class="lineNum"> 182</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 10 : if (separator.quoted || separator.text != &quot;,&quot;) throw std::runtime_error(&quot;Expected ENUM comma.&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 4 was not taken"> - </span><span class="tlaGBC" title="Branch 5 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaGBC" title="Branch 7 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 8 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L183"><span class="lineNum"> 183</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 7 times"> + </span>]:<span class="tlaGNC"> 29 : }</span></span>
<span id="L184"><span class="lineNum"> 184</span> :<span class="tlaGNC"> 7 : definition.integerMaximum = static_cast&lt;std::int64_t&gt;(definition.enumValues.size() - 1U);</span></span>
<span id="L185"><span class="lineNum"> 185</span> :<span class="tlaGNC"> 13 : } else {</span></span>
<span id="L186"><span class="lineNum"> 186</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unsupported attribute definition type: &quot; + type);</span></span>
<span id="L187"><span class="lineNum"> 187</span> : : }</span>
<span id="L188"><span class="lineNum"> 188</span> [<span class="tlaGBC" title="Branch 0 was taken 213 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 213 : tokens.End();</span></span>
<span id="L189"><span class="lineNum"> 189</span> [<span class="tlaGBC" title="Branch 0 was taken 213 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 209 times"> + </span> :<span class="tlaGNC"> 213 : if (name == &quot;VFrameFormat&quot; &amp;&amp; (definition.scope != AttributeScope::Frame || definition.type != AttributeType::Enum))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 211 times"> + </span>]
<span id="L190"><span class="lineNum"> 190</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;VFrameFormat requires a BO_ ENUM definition.&quot;);</span></span>
<span id="L191"><span class="lineNum"> 191</span> [<span class="tlaGBC" title="Branch 0 was taken 211 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 203 times"> + </span> :<span class="tlaGNC"> 217 : if (name == &quot;GenMsgCycleTime&quot; &amp;&amp; (definition.scope != AttributeScope::Frame ||</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 209 times"> + </span>]
<span id="L192"><span class="lineNum"> 192</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6 : (definition.type != AttributeType::Integer &amp;&amp; definition.type != AttributeType::Hex)))</span></span>
<span id="L193"><span class="lineNum"> 193</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;GenMsgCycleTime requires a BO_ integer definition.&quot;);</span></span>
<span id="L194"><span class="lineNum"> 194</span> [<span class="tlaGBC" title="Branch 0 was taken 209 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 207 times"> + </span>]:<span class="tlaGNC"> 209 : if (!database.attributeDefinitions.emplace(name, definition).second)</span></span>
<span id="L195"><span class="lineNum"> 195</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Duplicate attribute definition: &quot; + name);</span></span>
<span id="L196"><span class="lineNum"> 196</span> :<span class="tlaGNC"> 945 : }</span></span>
<span id="L197"><span class="lineNum"> 197</span> : : </span>
<span id="L198"><span class="lineNum"> 198</span> :<span class="tlaGNC"> 218 : AttributeDefinition &amp;FindDefinition(DbcDatabase &amp;database, const std::string &amp;name) {</span></span>
<span id="L199"><span class="lineNum"> 199</span> [<span class="tlaGBC" title="Branch 0 was taken 218 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 218 : const std::map&lt;std::string, AttributeDefinition&gt;::iterator found = database.attributeDefinitions.find(name);</span></span>
<span id="L200"><span class="lineNum"> 200</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 214 times"> + </span>]:<span class="tlaGNC"> 218 : if (found == database.attributeDefinitions.end())</span></span>
<span id="L201"><span class="lineNum"> 201</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Undefined attribute: &quot; + name);</span></span>
<span id="L202"><span class="lineNum"> 202</span> :<span class="tlaGNC"> 428 : return found-&gt;second;</span></span>
<span id="L203"><span class="lineNum"> 203</span> : : }</span>
<span id="L204"><span class="lineNum"> 204</span> : : </span>
<span id="L205"><span class="lineNum"> 205</span> :<span class="tlaGNC"> 32 : void ParseId(const std::string &amp;text, AttributeAssignment &amp;assignment) {</span></span>
<span id="L206"><span class="lineNum"> 206</span> :<span class="tlaGNC"> 32 : const std::int64_t raw = ParseNumber&lt;std::int64_t&gt;(text);</span></span>
<span id="L207"><span class="lineNum"> 207</span> [<span class="tlaGBC" title="Branch 0 was taken 30 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 28 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span> :<span class="tlaGNC"> 32 : if (raw &lt; 0 || raw &gt; std::numeric_limits&lt;std::uint32_t&gt;::max() || (raw &amp; 0x60000000U) != 0)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 26 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 26 times"> + </span>]
<span id="L208"><span class="lineNum"> 208</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6 : throw std::runtime_error(&quot;Invalid attribute CAN ID.&quot;);</span></span>
<span id="L209"><span class="lineNum"> 209</span> :<span class="tlaGNC"> 26 : const std::uint32_t id = static_cast&lt;std::uint32_t&gt;(raw);</span></span>
<span id="L210"><span class="lineNum"> 210</span> :<span class="tlaGNC"> 26 : assignment.canId = id &amp; 0x1fffffffU;</span></span>
<span id="L211"><span class="lineNum"> 211</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 24 times"> + </span>]:<span class="tlaGNC"> 26 : assignment.isExtended = (id &amp; 0x80000000U) != 0U || id &gt; 0x7ffU;</span></span>
<span id="L212"><span class="lineNum"> 212</span> :<span class="tlaGNC"> 26 : }</span></span>
<span id="L213"><span class="lineNum"> 213</span> : : </span>
<span id="L214"><span class="lineNum"> 214</span> :<span class="tlaGNC"> 15 : AttributeMap &amp;Target(DbcDatabase &amp;database, const AttributeAssignment &amp;assignment) {</span></span>
<span id="L215"><span class="lineNum"> 215</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 12 times"> + </span>]:<span class="tlaGNC"> 15 : if (assignment.scope == AttributeScope::Database) return database.attributes;</span></span>
<span id="L216"><span class="lineNum"> 216</span> [<span class="tlaGBC" title="Branch 0 was taken 14 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 16 : for (FrameInfo &amp;frame: database.frames) {</span></span>
<span id="L217"><span class="lineNum"> 217</span> [<span class="tlaGBC" title="Branch 0 was taken 12 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 10 times"> + </span>]:<span class="tlaGNC"> 14 : if (frame.canId != assignment.canId || frame.isExtended != assignment.isExtended) continue;</span></span>
<span id="L218"><span class="lineNum"> 218</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span>]:<span class="tlaGNC"> 11 : if (assignment.scope == AttributeScope::Frame) return frame.attributes;</span></span>
<span id="L219"><span class="lineNum"> 219</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 3 : for (SignalInfo &amp;signal: frame.signals) {</span></span>
<span id="L220"><span class="lineNum"> 220</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : if (signal.name == assignment.targetName) return signal.attributes;</span></span>
<span id="L221"><span class="lineNum"> 221</span> : : }</span>
<span id="L222"><span class="lineNum"> 222</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unresolved attribute signal: &quot; + assignment.targetName);</span></span>
<span id="L223"><span class="lineNum"> 223</span> : : }</span>
<span id="L224"><span class="lineNum"> 224</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unresolved attribute frame.&quot;);</span></span>
<span id="L225"><span class="lineNum"> 225</span> : : }</span>
<span id="L226"><span class="lineNum"> 226</span> : : </span>
<span id="L227"><span class="lineNum"> 227</span> :<span class="tlaGNC"> 36 : void ValidateCycleTime(const std::string &amp;name, const AttributeValue &amp;value) {</span></span>
<span id="L228"><span class="lineNum"> 228</span> [<span class="tlaGBC" title="Branch 0 was taken 28 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 8 times"> + </span>]:<span class="tlaGNC"> 36 : if (name != &quot;GenMsgCycleTime&quot;) return;</span></span>
<span id="L229"><span class="lineNum"> 229</span> :<span class="tlaGNC"> 8 : const std::int64_t milliseconds = std::get&lt;std::int64_t&gt;(value);</span></span>
<span id="L230"><span class="lineNum"> 230</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 4 times"> + </span> :<span class="tlaGNC"> 8 : if (milliseconds &lt; 0 || milliseconds &gt; std::numeric_limits&lt;std::uint32_t&gt;::max())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 4 times"> + </span>]
<span id="L231"><span class="lineNum"> 231</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;GenMsgCycleTime must fit unsigned 32-bit milliseconds.&quot;);</span></span>
<span id="L232"><span class="lineNum"> 232</span> : : }</span>
<span id="L233"><span class="lineNum"> 233</span> : : </span>
<span id="L234"><span class="lineNum"> 234</span> :<span class="tlaGNC"> 15 : void ApplyDefault(DbcDatabase &amp;database, const std::string &amp;name, const AttributeDefinition &amp;definition) {</span></span>
<span id="L235"><span class="lineNum"> 235</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 15 times"> + </span>]:<span class="tlaGNC"> 15 : if (!definition.defaultValue) return;</span></span>
<span id="L236"><span class="lineNum"> 236</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 15 : if (definition.scope == AttributeScope::Database) {</span></span>
<span id="L237"><span class="lineNum"> 237</span> :<span class="tlaGNC"> 5 : database.attributes[name] = *definition.defaultValue;</span></span>
<span id="L238"><span class="lineNum"> 238</span> :<span class="tlaGNC"> 5 : return;</span></span>
<span id="L239"><span class="lineNum"> 239</span> : : }</span>
<span id="L240"><span class="lineNum"> 240</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span>]:<span class="tlaGNC"> 10 : if (definition.scope != AttributeScope::Frame &amp;&amp; definition.scope != AttributeScope::Signal)</span></span>
<span id="L241"><span class="lineNum"> 241</span> :<span class="tlaUNC"> 0 : return;</span></span>
<span id="L242"><span class="lineNum"> 242</span> [<span class="tlaGBC" title="Branch 0 was taken 18 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 28 : for (FrameInfo &amp;frame: database.frames) {</span></span>
<span id="L243"><span class="lineNum"> 243</span> [<span class="tlaGBC" title="Branch 0 was taken 14 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 14 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 18 : if (definition.scope == AttributeScope::Frame) frame.attributes[name] = *definition.defaultValue;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 14 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L244"><span class="lineNum"> 244</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 14 times"> + </span>]:<span class="tlaGNC"> 18 : if (definition.scope == AttributeScope::Signal) {</span></span>
<span id="L245"><span class="lineNum"> 245</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 6 : for (SignalInfo &amp;signal: frame.signals) signal.attributes[name] = *definition.defaultValue;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 4 times"> + </span>]
<span id="L246"><span class="lineNum"> 246</span> : : }</span>
<span id="L247"><span class="lineNum"> 247</span> : : }</span>
<span id="L248"><span class="lineNum"> 248</span> : : }</span>
<span id="L249"><span class="lineNum"> 249</span> : : }// namespace</span>
<span id="L250"><span class="lineNum"> 250</span> : : </span>
<span id="L251"><span class="lineNum"> 251</span> :<span class="tlaGNC"> 621 : void DbcAttributeHandler::Handle(const std::string &amp;line, DbcParseContext &amp;context) const {</span></span>
<span id="L252"><span class="lineNum"> 252</span> :<span class="tlaGNC"> 621 : context.pendingAttributes.push_back({line, context.lineNumber});</span></span>
<span id="L253"><span class="lineNum"> 253</span> [<span class="tlaGBC" title="Branch 0 was taken 621 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 621 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1242 : }</span></span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 4 was not taken"> - </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L254"><span class="lineNum"> 254</span> : : </span>
<span id="L255"><span class="lineNum"> 255</span> :<span class="tlaGNC"> 549 : void DbcParseContext::ResolveAttributes(const std::string &amp;filePath, std::vector&lt;DbcDiagnostic&gt; &amp;diagnostics) {</span></span>
<span id="L256"><span class="lineNum"> 256</span> :<span class="tlaGNC"> 549 : std::map&lt;std::string, std::size_t&gt; defaultLines;</span></span>
<span id="L257"><span class="lineNum"> 257</span> :<span class="tlaGNC"> 549 : std::vector&lt;std::size_t&gt; assignmentLines;</span></span>
<span id="L258"><span class="lineNum"> 258</span> : : // Resolve each phase independently of source ordering.</span>
<span id="L259"><span class="lineNum"> 259</span> :<span class="tlaGNC"> 549 : const char *keywords[] = {&quot;BA_DEF_&quot;, &quot;BA_DEF_DEF_&quot;, &quot;BA_&quot;};</span></span>
<span id="L260"><span class="lineNum"> 260</span> [<span class="tlaGBC" title="Branch 0 was taken 1177 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 163 times"> + </span>]:<span class="tlaGNC"> 1340 : for (const char *phase: keywords) {</span></span>
<span id="L261"><span class="lineNum"> 261</span> [<span class="tlaGBC" title="Branch 0 was taken 1303 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 791 times"> + </span>]:<span class="tlaGNC"> 2094 : for (const PendingAttribute &amp;pending: pendingAttributes) {</span></span>
<span id="L262"><span class="lineNum"> 262</span> [<span class="tlaGBC" title="Branch 0 was taken 1303 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1303 : const std::string keyword = pending.statement.substr(0U, pending.statement.find_first_of(&quot; \t&quot;));</span></span>
<span id="L263"><span class="lineNum"> 263</span> [<span class="tlaGBC" title="Branch 0 was taken 1303 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 682 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 621 times"> + </span>]:<span class="tlaGNC"> 1303 : if (keyword != phase) continue;</span></span>
<span id="L264"><span class="lineNum"> 264</span> : : try {</span>
<span id="L265"><span class="lineNum"> 265</span> [<span class="tlaGBC" title="Branch 0 was taken 611 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 621 : AttributeTokens tokens(pending.statement);</span></span>
<span id="L266"><span class="lineNum"> 266</span> [<span class="tlaGBC" title="Branch 0 was taken 611 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 611 : tokens.Word();</span></span>
<span id="L267"><span class="lineNum"> 267</span> [<span class="tlaGBC" title="Branch 0 was taken 611 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 393 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 218 times"> + </span>]:<span class="tlaGNC"> 611 : if (keyword == &quot;BA_DEF_&quot;) {</span></span>
<span id="L268"><span class="lineNum"> 268</span> [<span class="tlaGBC" title="Branch 0 was taken 207 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 186 times"> + </span>]:<span class="tlaGNC"> 393 : Define(tokens, database);</span></span>
<span id="L269"><span class="lineNum"> 269</span> :<span class="tlaGNC"> 207 : continue;</span></span>
<span id="L270"><span class="lineNum"> 270</span> : : }</span>
<span id="L271"><span class="lineNum"> 271</span> [<span class="tlaGBC" title="Branch 0 was taken 218 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 218 : const std::string name = tokens.Quoted();</span></span>
<span id="L272"><span class="lineNum"> 272</span> [<span class="tlaGBC" title="Branch 0 was taken 214 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 218 : AttributeDefinition &amp;definition = FindDefinition(database, name);</span></span>
<span id="L273"><span class="lineNum"> 273</span> [<span class="tlaGBC" title="Branch 0 was taken 214 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 99 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 115 times"> + </span>]:<span class="tlaGNC"> 214 : if (keyword == &quot;BA_DEF_DEF_&quot;) {</span></span>
<span id="L274"><span class="lineNum"> 274</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 97 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 99 : if (definition.defaultValue) throw std::runtime_error(&quot;Duplicate attribute default: &quot; + name);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L275"><span class="lineNum"> 275</span> [<span class="tlaGBC" title="Branch 0 was taken 97 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 17 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 80 times"> + </span>]:<span class="tlaGNC"> 177 : definition.defaultValue = Value(tokens.Take(), definition, true);</span></span>
<span id="L276"><span class="lineNum"> 276</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 17 : ValidateCycleTime(name, *definition.defaultValue);</span></span>
<span id="L277"><span class="lineNum"> 277</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 15 : tokens.End();</span></span>
<span id="L278"><span class="lineNum"> 278</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 15 : defaultLines[name] = pending.lineNumber;</span></span>
<span id="L279"><span class="lineNum"> 279</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 15 : ApplyDefault(database, name, definition);</span></span>
<span id="L280"><span class="lineNum"> 280</span> :<span class="tlaGNC"> 15 : continue;</span></span>
<span id="L281"><span class="lineNum"> 281</span> : : }</span>
<span id="L282"><span class="lineNum"> 282</span> :<span class="tlaGNC"> 115 : AttributeAssignment assignment;</span></span>
<span id="L283"><span class="lineNum"> 283</span> [<span class="tlaGBC" title="Branch 0 was taken 115 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 115 : assignment.name = name;</span></span>
<span id="L284"><span class="lineNum"> 284</span> [<span class="tlaGBC" title="Branch 0 was taken 115 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 115 : Token value = tokens.Take();</span></span>
<span id="L285"><span class="lineNum"> 285</span> [<span class="tlaGBC" title="Branch 0 was taken 115 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 115 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 115 : if (!value.quoted &amp;&amp; IsScope(value.text)) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 34 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 81 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 34 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 81 times"> + </span>]
<span id="L286"><span class="lineNum"> 286</span> [<span class="tlaGBC" title="Branch 0 was taken 34 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 34 : assignment.scope = ParseScope(value.text);</span></span>
<span id="L287"><span class="lineNum"> 287</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 27 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span>]:<span class="tlaGNC"> 34 : if (assignment.scope == AttributeScope::Frame || assignment.scope == AttributeScope::Signal)</span></span>
<span id="L288"><span class="lineNum"> 288</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 26 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 6 times"> + </span>]:<span class="tlaGNC"> 38 : ParseId(tokens.Word(), assignment);</span></span>
<span id="L289"><span class="lineNum"> 289</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 21 times"> + </span>]:<span class="tlaGNC"> 28 : if (assignment.scope != AttributeScope::Frame)</span></span>
<span id="L290"><span class="lineNum"> 290</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7 : assignment.targetName = tokens.Word();</span></span>
<span id="L291"><span class="lineNum"> 291</span> [<span class="tlaGBC" title="Branch 0 was taken 28 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 28 : value = tokens.Take();</span></span>
<span id="L292"><span class="lineNum"> 292</span> : : }</span>
<span id="L293"><span class="lineNum"> 293</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 107 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 109 : if (assignment.scope != definition.scope) throw std::runtime_error(&quot;Attribute assignment scope differs from definition.&quot;);</span></span>
<span id="L294"><span class="lineNum"> 294</span> [<span class="tlaGBC" title="Branch 0 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 88 times"> + </span>]:<span class="tlaGNC"> 107 : assignment.value = Value(value, definition, false);</span></span>
<span id="L295"><span class="lineNum"> 295</span> [<span class="tlaGBC" title="Branch 0 was taken 17 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 19 : ValidateCycleTime(name, assignment.value);</span></span>
<span id="L296"><span class="lineNum"> 296</span> [<span class="tlaGBC" title="Branch 0 was taken 17 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 17 : tokens.End();</span></span>
<span id="L297"><span class="lineNum"> 297</span> : : // Repeated explicit assignments use the last value, matching comments.</span>
<span id="L298"><span class="lineNum"> 298</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 15 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span>]:<span class="tlaGNC"> 17 : if (assignment.scope != AttributeScope::Node &amp;&amp; assignment.scope != AttributeScope::Environment)</span></span>
<span id="L299"><span class="lineNum"> 299</span> [<span class="tlaGBC" title="Branch 0 was taken 11 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 11 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 15 : Target(database, assignment)[name] = assignment.value;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 11 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L300"><span class="lineNum"> 300</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 13 : database.attributeAssignments.push_back(assignment);</span></span>
<span id="L301"><span class="lineNum"> 301</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 13 : assignmentLines.push_back(pending.lineNumber);</span></span>
<span id="L302"><span class="lineNum"> 302</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 15 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 222 times"> + </span> :<span class="tlaGNC"> 1406 : } catch (const std::exception &amp;error) {</span></span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 4 was not taken"> - </span><span class="tlaGBC" title="Branch 5 was taken 386 times"> + </span>]
<span id="L303"><span class="lineNum"> 303</span> [<span class="tlaGBC" title="Branch 0 was taken 386 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 386 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1158 : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidAttribute, filePath, pending.lineNumber, error.what());</span></span>
<span id="L304"><span class="lineNum"> 304</span> :<span class="tlaGNC"> 386 : }</span></span>
<span id="L305"><span class="lineNum"> 305</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 904 times"> + </span>]:<span class="tlaGNC"> 1303 : }</span></span>
<span id="L306"><span class="lineNum"> 306</span> : : }</span>
<span id="L307"><span class="lineNum"> 307</span> [<span class="tlaGBC" title="Branch 0 was taken 179 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 163 times"> + </span>]:<span class="tlaGNC"> 342 : for (FrameInfo &amp;frame: database.frames) {</span></span>
<span id="L308"><span class="lineNum"> 308</span> [<span class="tlaGBC" title="Branch 0 was taken 12 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 179 times"> + </span>]:<span class="tlaGNC"> 191 : for (const AttributeMap::value_type &amp;attribute: frame.attributes) {</span></span>
<span id="L309"><span class="lineNum"> 309</span> [<span class="tlaGBC" title="Branch 0 was taken 12 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span> :<span class="tlaGNC"> 16 : if (attribute.first != &quot;VFrameFormat&quot; &amp;&amp; attribute.first != &quot;GenMsgCycleTime&quot;) continue;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 3 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 9 times"> + </span>]
<span id="L310"><span class="lineNum"> 310</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 9 : std::size_t line = defaultLines[attribute.first];</span></span>
<span id="L311"><span class="lineNum"> 311</span> [<span class="tlaGBC" title="Branch 0 was taken 28 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 9 times"> + </span>]:<span class="tlaGNC"> 37 : for (std::size_t index = 0U; index &lt; database.attributeAssignments.size(); ++index) {</span></span>
<span id="L312"><span class="lineNum"> 312</span> :<span class="tlaGNC"> 28 : const AttributeAssignment &amp;assignment = database.attributeAssignments[index];</span></span>
<span id="L313"><span class="lineNum"> 313</span> [<span class="tlaGBC" title="Branch 0 was taken 12 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 40 : if (assignment.name == attribute.first &amp;&amp; assignment.scope == AttributeScope::Frame &amp;&amp;</span></span>
<span id="L314"><span class="lineNum"> 314</span> [<span class="tlaGBC" title="Branch 0 was taken 12 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 9 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 3 times"> + </span> :<span class="tlaGNC"> 40 : assignment.canId == frame.canId &amp;&amp; assignment.isExtended == frame.isExtended)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 23 times"> + </span>]
<span id="L315"><span class="lineNum"> 315</span> :<span class="tlaGNC"> 5 : line = assignmentLines[index];</span></span>
<span id="L316"><span class="lineNum"> 316</span> : : }</span>
<span id="L317"><span class="lineNum"> 317</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 9 : const std::int64_t value = std::get&lt;std::int64_t&gt;(attribute.second);</span></span>
<span id="L318"><span class="lineNum"> 318</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span>]:<span class="tlaGNC"> 9 : if (attribute.first == &quot;GenMsgCycleTime&quot;) {</span></span>
<span id="L319"><span class="lineNum"> 319</span> :<span class="tlaGNC"> 4 : frame.cycleTimeMs = static_cast&lt;std::uint32_t&gt;(value);</span></span>
<span id="L320"><span class="lineNum"> 320</span> :<span class="tlaGNC"> 4 : continue;</span></span>
<span id="L321"><span class="lineNum"> 321</span> : : }</span>
<span id="L322"><span class="lineNum"> 322</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 5 : frame.frameFormat = database.attributeDefinitions.at(attribute.first).enumValues[static_cast&lt;std::size_t&gt;(value)];</span></span>
<span id="L323"><span class="lineNum"> 323</span> :<span class="tlaGNC"> 5 : const std::string &amp;format = *frame.frameFormat;</span></span>
<span id="L324"><span class="lineNum"> 324</span> :<span class="tlaGNC"> 5 : std::string warning;</span></span>
<span id="L325"><span class="lineNum"> 325</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span> :<span class="tlaGNC"> 5 : if (format != &quot;StandardCAN&quot; &amp;&amp; format != &quot;ExtendedCAN&quot;)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 3 times"> + </span>]
<span id="L326"><span class="lineNum"> 326</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : warning = &quot;Unsupported VFrameFormat '&quot; + format + &quot;' is preserved; decoding may be incomplete.&quot;;</span></span>
<span id="L327"><span class="lineNum"> 327</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span>]:<span class="tlaGNC"> 3 : else if ((format == &quot;ExtendedCAN&quot;) != frame.isExtended)</span></span>
<span id="L328"><span class="lineNum"> 328</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1 : warning = &quot;VFrameFormat '&quot; + format + &quot;' conflicts with the BO_ CAN ID; ID interpretation is unchanged.&quot;;</span></span>
<span id="L329"><span class="lineNum"> 329</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 5 : if (!warning.empty())</span></span>
<span id="L330"><span class="lineNum"> 330</span> :<span class="tlaGNC"> 3 : diagnostics.push_back({DbcDiagnosticSeverity::Warning, DbcDiagnosticCode::UnsupportedAttribute, filePath, line, warning});</span></span>
<span id="L331"><span class="lineNum"> 331</span> :<span class="tlaGNC"> 5 : }</span></span>
<span id="L332"><span class="lineNum"> 332</span> : : }</span>
<span id="L333"><span class="lineNum"> 333</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 938 : }</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decode_builder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decode_builder.cpp<span style="font-size: 80%;"> (<a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">62.5&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">25</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_decode_builder.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decode_builder.cpp.gcov.html#L13">DbcDecodeBuilder::Build(DbcDatabase const&amp;) const</a></td>
<td class="coverFnHi">108</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decode_builder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decode_builder.cpp<span style="font-size: 80%;"> (<a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">62.5&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">25</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_decode_builder.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decode_builder.cpp.gcov.html#L13">DbcDecodeBuilder::Build(DbcDatabase const&amp;) const</a></td>
<td class="coverFnHi">108</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,146 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decode_builder.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decode_builder.cpp<span style="font-size: 80%;"> (source / <a href="dbc_decode_builder.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">62.5&nbsp;%</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">25</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file dbc_decode_builder.cpp</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief Conversion of parsed metadata to runtime definitions.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #include &quot;dbc_decode_builder.h&quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : : #include &lt;utility&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : : </span>
<span id="L15"><span class="lineNum"> 15</span> :<span class="tlaGNC"> 108 : DecodeDatabase DbcDecodeBuilder::Build(const DbcDatabase &amp;source) const {</span></span>
<span id="L16"><span class="lineNum"> 16</span> :<span class="tlaGNC"> 108 : std::vector&lt;DecodeFrame&gt; frames;</span></span>
<span id="L17"><span class="lineNum"> 17</span> [<span class="tlaGBC" title="Branch 0 was taken 108 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 108 : frames.reserve(source.frames.size());</span></span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 108 times"> + </span>]:<span class="tlaGNC"> 248 : for (const FrameInfo &amp;sourceFrame: source.frames) {</span></span>
<span id="L20"><span class="lineNum"> 20</span> :<span class="tlaGNC"> 140 : DecodeFrame targetFrame;</span></span>
<span id="L21"><span class="lineNum"> 21</span> : : </span>
<span id="L22"><span class="lineNum"> 22</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.attributes = sourceFrame.attributes;</span></span>
<span id="L23"><span class="lineNum"> 23</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.frameFormat = sourceFrame.frameFormat;</span></span>
<span id="L24"><span class="lineNum"> 24</span> :<span class="tlaGNC"> 140 : targetFrame.cycleTimeMs = sourceFrame.cycleTimeMs;</span></span>
<span id="L25"><span class="lineNum"> 25</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.name = sourceFrame.name;</span></span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 140 : targetFrame.canId = sourceFrame.canId;</span></span>
<span id="L27"><span class="lineNum"> 27</span> :<span class="tlaGNC"> 140 : targetFrame.isExtended = sourceFrame.isExtended;</span></span>
<span id="L28"><span class="lineNum"> 28</span> :<span class="tlaGNC"> 140 : targetFrame.dlc = sourceFrame.dlc;</span></span>
<span id="L29"><span class="lineNum"> 29</span> :<span class="tlaGNC"> 140 : targetFrame.pgn = sourceFrame.pgn;</span></span>
<span id="L30"><span class="lineNum"> 30</span> :<span class="tlaGNC"> 140 : targetFrame.hasPgn = sourceFrame.hasPgn;</span></span>
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.transmitter = sourceFrame.transmitter;</span></span>
<span id="L32"><span class="lineNum"> 32</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.comment = sourceFrame.comment;</span></span>
<span id="L33"><span class="lineNum"> 33</span> : : </span>
<span id="L34"><span class="lineNum"> 34</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : targetFrame.signals.reserve(sourceFrame.signals.size());</span></span>
<span id="L35"><span class="lineNum"> 35</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 140 times"> + </span>]:<span class="tlaGNC"> 313 : for (const SignalInfo &amp;sourceSignal: sourceFrame.signals) {</span></span>
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 173 : DecodeSignal targetSignal;</span></span>
<span id="L37"><span class="lineNum"> 37</span> : : </span>
<span id="L38"><span class="lineNum"> 38</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.attributes = sourceSignal.attributes;</span></span>
<span id="L39"><span class="lineNum"> 39</span> :<span class="tlaGNC"> 173 : targetSignal.multiplexing = sourceSignal.multiplexing;</span></span>
<span id="L40"><span class="lineNum"> 40</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.name = sourceSignal.name;</span></span>
<span id="L41"><span class="lineNum"> 41</span> :<span class="tlaGNC"> 173 : targetSignal.startBit = sourceSignal.startBit;</span></span>
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 173 : targetSignal.length = sourceSignal.length;</span></span>
<span id="L43"><span class="lineNum"> 43</span> [<span class="tlaGBC" title="Branch 0 was taken 155 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 18 times"> + </span>]:<span class="tlaGNC"> 173 : targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;</span></span>
<span id="L44"><span class="lineNum"> 44</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 167 times"> + </span>]:<span class="tlaGNC"> 173 : targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;</span></span>
<span id="L45"><span class="lineNum"> 45</span> :<span class="tlaGNC"> 173 : targetSignal.factor = sourceSignal.factor;</span></span>
<span id="L46"><span class="lineNum"> 46</span> :<span class="tlaGNC"> 173 : targetSignal.offset = sourceSignal.offset;</span></span>
<span id="L47"><span class="lineNum"> 47</span> :<span class="tlaGNC"> 173 : targetSignal.minimum = sourceSignal.minimum;</span></span>
<span id="L48"><span class="lineNum"> 48</span> :<span class="tlaGNC"> 173 : targetSignal.maximum = sourceSignal.maximum;</span></span>
<span id="L49"><span class="lineNum"> 49</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.unit = sourceSignal.unit;</span></span>
<span id="L50"><span class="lineNum"> 50</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.receivers = sourceSignal.receivers;</span></span>
<span id="L51"><span class="lineNum"> 51</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.comment = sourceSignal.comment;</span></span>
<span id="L52"><span class="lineNum"> 52</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetSignal.valueDescriptions = sourceSignal.valueDescriptions;</span></span>
<span id="L53"><span class="lineNum"> 53</span> : : </span>
<span id="L54"><span class="lineNum"> 54</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 173 : targetFrame.signals.push_back(std::move(targetSignal));</span></span>
<span id="L55"><span class="lineNum"> 55</span> :<span class="tlaGNC"> 173 : }</span></span>
<span id="L56"><span class="lineNum"> 56</span> : : </span>
<span id="L57"><span class="lineNum"> 57</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : frames.push_back(std::move(targetFrame));</span></span>
<span id="L58"><span class="lineNum"> 58</span> :<span class="tlaGNC"> 140 : }</span></span>
<span id="L59"><span class="lineNum"> 59</span> : : </span>
<span id="L60"><span class="lineNum"> 60</span> [<span class="tlaGBC" title="Branch 0 was taken 68 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 40 times"> + </span>]:<span class="tlaGNC"> 176 : return DecodeDatabase(frames);</span></span>
<span id="L61"><span class="lineNum"> 61</span> :<span class="tlaGNC"> 108 : }</span></span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,181 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.cpp<span style="font-size: 80%;"> (<a href="dbc_decoder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">94.9&nbsp;%</td>
<td class="headerCovTableEntry">156</td>
<td class="headerCovTableEntry">148</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">72.8&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">115</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_decoder.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L39">DbcDecoder::Decode(DecodeDatabase const&amp;, RawCanFrame const&amp;, std::vector&lt;SignalKey, std::allocator&lt;SignalKey&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">12</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L18">DbcDecoder::FindFrame(DecodeDatabase const&amp;, unsigned int, bool) const</a></td>
<td class="coverFnHi">32</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L250">DbcDecoder::SignExtend(unsigned long, unsigned int)</a></td>
<td class="coverFnHi">81</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L216">DbcDecoder::ExtractMotorola(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, unsigned int, unsigned int, unsigned long&amp;)</a></td>
<td class="coverFnHi">3138</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L193">DbcDecoder::ExtractIntel(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, unsigned int, unsigned int, unsigned long&amp;)</a></td>
<td class="coverFnHi">3242</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L111">DbcDecoder::ReadSelector(DecodeFrame const&amp;, RawCanFrame const&amp;)</a></td>
<td class="coverFnHi">6341</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L131">DbcDecoder::DecodeOneSignal(DecodeSignal const&amp;, unsigned char, RawCanFrame const&amp;, DbcDecoder::SelectorState const&amp;)</a></td>
<td class="coverFnHi">6375</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L181">DbcDecoder::ExtractUnsigned(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, DecodeSignal const&amp;, unsigned long&amp;)</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L34">DbcDecoder::Decode(DecodeDatabase const&amp;, RawCanFrame const&amp;) const</a></td>
<td class="coverFnHi">6396</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L99">DbcDecoder::IsValidDefinition(DecodeSignal const&amp;, unsigned char)</a></td>
<td class="coverFnHi">6396</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L45">DbcDecoder::DecodeImpl(DecodeDatabase const&amp;, RawCanFrame const&amp;, std::vector&lt;SignalKey, std::allocator&lt;SignalKey&gt; &gt; const*) const</a></td>
<td class="coverFnHi">6408</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L24">DbcDecoder::ResolveFrame(DecodeDatabase const&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">6440</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,181 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.cpp<span style="font-size: 80%;"> (<a href="dbc_decoder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">94.9&nbsp;%</td>
<td class="headerCovTableEntry">156</td>
<td class="headerCovTableEntry">148</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">72.8&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">115</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_decoder.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L34">DbcDecoder::Decode(DecodeDatabase const&amp;, RawCanFrame const&amp;) const</a></td>
<td class="coverFnHi">6396</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L39">DbcDecoder::Decode(DecodeDatabase const&amp;, RawCanFrame const&amp;, std::vector&lt;SignalKey, std::allocator&lt;SignalKey&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">12</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L45">DbcDecoder::DecodeImpl(DecodeDatabase const&amp;, RawCanFrame const&amp;, std::vector&lt;SignalKey, std::allocator&lt;SignalKey&gt; &gt; const*) const</a></td>
<td class="coverFnHi">6408</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L131">DbcDecoder::DecodeOneSignal(DecodeSignal const&amp;, unsigned char, RawCanFrame const&amp;, DbcDecoder::SelectorState const&amp;)</a></td>
<td class="coverFnHi">6375</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L193">DbcDecoder::ExtractIntel(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, unsigned int, unsigned int, unsigned long&amp;)</a></td>
<td class="coverFnHi">3242</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L216">DbcDecoder::ExtractMotorola(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, unsigned int, unsigned int, unsigned long&amp;)</a></td>
<td class="coverFnHi">3138</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L181">DbcDecoder::ExtractUnsigned(std::vector&lt;unsigned char, std::allocator&lt;unsigned char&gt; &gt; const&amp;, DecodeSignal const&amp;, unsigned long&amp;)</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L18">DbcDecoder::FindFrame(DecodeDatabase const&amp;, unsigned int, bool) const</a></td>
<td class="coverFnHi">32</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L99">DbcDecoder::IsValidDefinition(DecodeSignal const&amp;, unsigned char)</a></td>
<td class="coverFnHi">6396</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L111">DbcDecoder::ReadSelector(DecodeFrame const&amp;, RawCanFrame const&amp;)</a></td>
<td class="coverFnHi">6341</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L24">DbcDecoder::ResolveFrame(DecodeDatabase const&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">6440</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.cpp.gcov.html#L250">DbcDecoder::SignExtend(unsigned long, unsigned int)</a></td>
<td class="coverFnHi">81</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,353 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.cpp<span style="font-size: 80%;"> (source / <a href="dbc_decoder.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">94.9&nbsp;%</td>
<td class="headerCovTableEntry">156</td>
<td class="headerCovTableEntry">148</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">72.8&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">115</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file dbc_decoder.cpp</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief CAN signal extraction and physical value conversion.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #include &quot;dbc_decoder.h&quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : : #include &quot;j1939.h&quot;</span>
<span id="L14"><span class="lineNum"> 14</span> : : #include &quot;signal_layout.h&quot;</span>
<span id="L15"><span class="lineNum"> 15</span> : : #include &lt;cmath&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : : #include &lt;stdexcept&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : : #include &lt;unordered_set&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : : #include &lt;utility&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : : </span>
<span id="L20"><span class="lineNum"> 20</span> :<span class="tlaGNC"> 32 : std::shared_ptr&lt;const DecodeFrame&gt; DbcDecoder::FindFrame(const DecodeDatabase &amp;database,</span></span>
<span id="L21"><span class="lineNum"> 21</span> : : std::uint32_t canId,</span>
<span id="L22"><span class="lineNum"> 22</span> : : bool isExtended) const {</span>
<span id="L23"><span class="lineNum"> 23</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 32 : return ResolveFrame(database, canId, isExtended).definition;</span></span>
<span id="L24"><span class="lineNum"> 24</span> : : }</span>
<span id="L25"><span class="lineNum"> 25</span> : : </span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 6440 : PgnLookupResult DbcDecoder::ResolveFrame(const DecodeDatabase &amp;database,</span></span>
<span id="L27"><span class="lineNum"> 27</span> : : std::uint32_t canId, bool isExtended) {</span>
<span id="L28"><span class="lineNum"> 28</span> [<span class="tlaGBC" title="Branch 0 was taken 6440 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6440 : const std::shared_ptr&lt;const DecodeFrame&gt; exact = database.FindFrame(FrameKey(canId, isExtended));</span></span>
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 6335 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 105 times"> + </span>]:<span class="tlaGNC"> 6440 : if (exact)</span></span>
<span id="L30"><span class="lineNum"> 30</span> :<span class="tlaGNC"> 6335 : return {exact, false};</span></span>
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 87 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 18 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 80 times"> + </span>]:<span class="tlaGNC"> 105 : if (!isExtended || canId &gt; 0x1FFFFFFFU)</span></span>
<span id="L32"><span class="lineNum"> 32</span> :<span class="tlaGNC"> 25 : return {};</span></span>
<span id="L33"><span class="lineNum"> 33</span> [<span class="tlaGBC" title="Branch 0 was taken 80 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 80 : return database.FindFrameByPgn(ExtractJ1939Pgn(canId));</span></span>
<span id="L34"><span class="lineNum"> 34</span> :<span class="tlaGNC"> 6440 : }</span></span>
<span id="L35"><span class="lineNum"> 35</span> : : </span>
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 6396 : DecodedFrameValue DbcDecoder::Decode(const DecodeDatabase &amp;database,</span></span>
<span id="L37"><span class="lineNum"> 37</span> : : const RawCanFrame &amp;frame) const {</span>
<span id="L38"><span class="lineNum"> 38</span> :<span class="tlaGNC"> 6396 : return DecodeImpl(database, frame, nullptr);</span></span>
<span id="L39"><span class="lineNum"> 39</span> : : }</span>
<span id="L40"><span class="lineNum"> 40</span> : : </span>
<span id="L41"><span class="lineNum"> 41</span> :<span class="tlaGNC"> 12 : DecodedFrameValue DbcDecoder::Decode(const DecodeDatabase &amp;database,</span></span>
<span id="L42"><span class="lineNum"> 42</span> : : const RawCanFrame &amp;frame,</span>
<span id="L43"><span class="lineNum"> 43</span> : : const std::vector&lt;SignalKey&gt; &amp;selection) const {</span>
<span id="L44"><span class="lineNum"> 44</span> :<span class="tlaGNC"> 12 : return DecodeImpl(database, frame, &amp;selection);</span></span>
<span id="L45"><span class="lineNum"> 45</span> : : }</span>
<span id="L46"><span class="lineNum"> 46</span> : : </span>
<span id="L47"><span class="lineNum"> 47</span> :<span class="tlaGNC"> 6408 : DecodedFrameValue DbcDecoder::DecodeImpl(const DecodeDatabase &amp;database,</span></span>
<span id="L48"><span class="lineNum"> 48</span> : : const RawCanFrame &amp;frame,</span>
<span id="L49"><span class="lineNum"> 49</span> : : const std::vector&lt;SignalKey&gt; *selection) const {</span>
<span id="L50"><span class="lineNum"> 50</span> :<span class="tlaGNC"> 6408 : DecodedFrameValue result;</span></span>
<span id="L51"><span class="lineNum"> 51</span> :<span class="tlaGNC"> 6408 : result.key = FrameKey(frame.canId, frame.isExtended);</span></span>
<span id="L52"><span class="lineNum"> 52</span> [<span class="tlaGBC" title="Branch 0 was taken 6408 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6408 : const PgnLookupResult match = ResolveFrame(database, frame.canId, frame.isExtended);</span></span>
<span id="L53"><span class="lineNum"> 53</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6400 times"> + </span>]:<span class="tlaGNC"> 6408 : if (match.ambiguous) {</span></span>
<span id="L54"><span class="lineNum"> 54</span> :<span class="tlaGNC"> 8 : result.status = FrameDecodeStatus::AmbiguousFrame;</span></span>
<span id="L55"><span class="lineNum"> 55</span> :<span class="tlaGNC"> 8 : return result;</span></span>
<span id="L56"><span class="lineNum"> 56</span> : : }</span>
<span id="L57"><span class="lineNum"> 57</span> :<span class="tlaGNC"> 6400 : const std::shared_ptr&lt;const DecodeFrame&gt; definition = match.definition;</span></span>
<span id="L58"><span class="lineNum"> 58</span> [<span class="tlaGBC" title="Branch 0 was taken 55 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6345 times"> + </span>]:<span class="tlaGNC"> 6400 : if (definition == nullptr)</span></span>
<span id="L59"><span class="lineNum"> 59</span> :<span class="tlaGNC"> 55 : return result;</span></span>
<span id="L60"><span class="lineNum"> 60</span> :<span class="tlaGNC"> 6345 : result.key = definition-&gt;GetKey();</span></span>
<span id="L61"><span class="lineNum"> 61</span> : : </span>
<span id="L62"><span class="lineNum"> 62</span> :<span class="tlaGNC"> 6345 : std::vector&lt;const DecodeSignal *&gt; selected;</span></span>
<span id="L63"><span class="lineNum"> 63</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6337 times"> + </span>]:<span class="tlaGNC"> 6345 : if (selection != nullptr) {</span></span>
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 8 : selected.reserve(selection-&gt;size());</span></span>
<span id="L65"><span class="lineNum"> 65</span> :<span class="tlaGNC"> 8 : std::unordered_set&lt;SignalKey, SignalKeyHasher&gt; keys;</span></span>
<span id="L66"><span class="lineNum"> 66</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 12 : for (const SignalKey &amp;key: *selection) {</span></span>
<span id="L67"><span class="lineNum"> 67</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 8 : if (!(key.frame == result.key))</span></span>
<span id="L68"><span class="lineNum"> 68</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::invalid_argument(&quot;Selected signal belongs to another frame: &quot; + key.name);</span></span>
<span id="L69"><span class="lineNum"> 69</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 4 times"> + </span>]:<span class="tlaGNC"> 4 : if (!keys.insert(key).second)</span></span>
<span id="L70"><span class="lineNum"> 70</span> [<span class="tlaUNC" title="Branch 0 was not executed"> # </span><span class="tlaUNC" title="Branch 1 was not executed"> # </span><span class="tlaUNC" title="Branch 2 was not executed"> # </span><span class="tlaUNC" title="Branch 3 was not executed"> # </span>]:<span class="tlaUNC"> 0 : throw std::invalid_argument(&quot;Duplicate selected signal: &quot; + key.name);</span></span>
<span id="L71"><span class="lineNum"> 71</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : const std::shared_ptr&lt;const DecodeSignal&gt; signal = database.FindSignal(key);</span></span>
<span id="L72"><span class="lineNum"> 72</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span>]:<span class="tlaGNC"> 4 : if (!signal)</span></span>
<span id="L73"><span class="lineNum"> 73</span> [<span class="tlaUNC" title="Branch 0 was not executed"> # </span><span class="tlaUNC" title="Branch 1 was not executed"> # </span><span class="tlaUNC" title="Branch 2 was not executed"> # </span><span class="tlaUNC" title="Branch 3 was not executed"> # </span>]:<span class="tlaUNC"> 0 : throw std::invalid_argument(&quot;Unknown selected signal: &quot; + key.name);</span></span>
<span id="L74"><span class="lineNum"> 74</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : selected.push_back(signal.get());</span></span>
<span id="L75"><span class="lineNum"> 75</span> :<span class="tlaGNC"> 4 : }</span></span>
<span id="L76"><span class="lineNum"> 76</span> :<span class="tlaGNC"> 8 : }</span></span>
<span id="L77"><span class="lineNum"> 77</span> : : </span>
<span id="L78"><span class="lineNum"> 78</span> :<span class="tlaGNC"> 6341 : result.definition = definition;</span></span>
<span id="L79"><span class="lineNum"> 79</span> :<span class="tlaGNC"> 6341 : result.valid = true;</span></span>
<span id="L80"><span class="lineNum"> 80</span> :<span class="tlaGNC"> 6341 : result.status = frame.data.size() &lt; definition-&gt;dlc</span></span>
<span id="L81"><span class="lineNum"> 81</span> [<span class="tlaGBC" title="Branch 0 was taken 6238 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 103 times"> + </span>]:<span class="tlaGNC"> 6341 : ? FrameDecodeStatus::InsufficientPayload</span></span>
<span id="L82"><span class="lineNum"> 82</span> : : : FrameDecodeStatus::Valid;</span>
<span id="L83"><span class="lineNum"> 83</span> : : </span>
<span id="L84"><span class="lineNum"> 84</span> [<span class="tlaGBC" title="Branch 0 was taken 6341 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6341 : const SelectorState selector = ReadSelector(*definition, frame);</span></span>
<span id="L85"><span class="lineNum"> 85</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6337 times"> + </span>]:<span class="tlaGNC"> 6341 : const std::size_t count = selection != nullptr ? selected.size() : definition-&gt;signals.size();</span></span>
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaGBC" title="Branch 0 was taken 6341 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6341 : result.signals.reserve(count);</span></span>
<span id="L87"><span class="lineNum"> 87</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6341 times"> + </span>]:<span class="tlaGNC"> 12716 : for (std::size_t index = 0U; index &lt; count; ++index) {</span></span>
<span id="L88"><span class="lineNum"> 88</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6371 times"> + </span>]:<span class="tlaGNC"> 6375 : const DecodeSignal &amp;signal = selection != nullptr ? *selected[index] : definition-&gt;signals[index];</span></span>
<span id="L89"><span class="lineNum"> 89</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6375 : DecodedSignalValue decoded = DecodeOneSignal(signal, definition-&gt;dlc, frame, selector);</span></span>
<span id="L90"><span class="lineNum"> 90</span> [<span class="tlaGBC" title="Branch 0 was taken 44 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6331 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 31 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 13 times"> + </span>]:<span class="tlaGNC"> 6375 : if (!decoded.valid &amp;&amp; decoded.status != SignalDecodeStatus::Inactive &amp;&amp;</span></span>
<span id="L91"><span class="lineNum"> 91</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 26 times"> + </span>]:<span class="tlaGNC"> 31 : result.status == FrameDecodeStatus::Valid)</span></span>
<span id="L92"><span class="lineNum"> 92</span> :<span class="tlaGNC"> 5 : result.status = FrameDecodeStatus::SignalErrors;</span></span>
<span id="L93"><span class="lineNum"> 93</span> :<span class="tlaGNC"> 6375 : decoded.definition = std::shared_ptr&lt;const DecodeSignal&gt;(definition, &amp;signal);</span></span>
<span id="L94"><span class="lineNum"> 94</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6375 : decoded.key = SignalKey(result.key, signal.name);</span></span>
<span id="L95"><span class="lineNum"> 95</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6375 : result.signals.push_back(std::move(decoded));</span></span>
<span id="L96"><span class="lineNum"> 96</span> :<span class="tlaGNC"> 6375 : }</span></span>
<span id="L97"><span class="lineNum"> 97</span> : : </span>
<span id="L98"><span class="lineNum"> 98</span> :<span class="tlaGNC"> 6341 : return result;</span></span>
<span id="L99"><span class="lineNum"> 99</span> :<span class="tlaGNC"> 6420 : }</span></span>
<span id="L100"><span class="lineNum"> 100</span> : : </span>
<span id="L101"><span class="lineNum"> 101</span> :<span class="tlaGNC"> 6396 : bool DbcDecoder::IsValidDefinition(const DecodeSignal &amp;signal, std::uint8_t dlc) {</span></span>
<span id="L102"><span class="lineNum"> 102</span> [<span class="tlaGBC" title="Branch 0 was taken 3144 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3252 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3144 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6396 : if ((signal.byteOrder != ByteOrder::Intel &amp;&amp; signal.byteOrder != ByteOrder::Motorola) ||</span></span>
<span id="L103"><span class="lineNum"> 103</span> [<span class="tlaGBC" title="Branch 0 was taken 85 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6311 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 85 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6396 : (signal.valueType != ValueType::Unsigned &amp;&amp; signal.valueType != ValueType::Signed) ||</span></span>
<span id="L104"><span class="lineNum"> 104</span> [<span class="tlaGBC" title="Branch 0 was taken 71 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6325 times"> + </span>]:<span class="tlaGNC"> 6396 : (signal.multiplexing.role != MultiplexRole::Unconditional &amp;&amp;</span></span>
<span id="L105"><span class="lineNum"> 105</span> [<span class="tlaGBC" title="Branch 0 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 42 times"> + </span>]:<span class="tlaGNC"> 71 : signal.multiplexing.role != MultiplexRole::Selector &amp;&amp;</span></span>
<span id="L106"><span class="lineNum"> 106</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span>]:<span class="tlaGNC"> 29 : signal.multiplexing.role != MultiplexRole::Branch))</span></span>
<span id="L107"><span class="lineNum"> 107</span> :<span class="tlaUNC"> 0 : return false;</span></span>
<span id="L108"><span class="lineNum"> 108</span> : : </span>
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 6396 : return IsValidSignalLayout(signal.startBit, signal.length,</span></span>
<span id="L110"><span class="lineNum"> 110</span> :<span class="tlaGNC"> 6396 : signal.byteOrder == ByteOrder::Intel, dlc);</span></span>
<span id="L111"><span class="lineNum"> 111</span> : : }</span>
<span id="L112"><span class="lineNum"> 112</span> : : </span>
<span id="L113"><span class="lineNum"> 113</span> :<span class="tlaGNC"> 6341 : DbcDecoder::SelectorState DbcDecoder::ReadSelector(const DecodeFrame &amp;definition,</span></span>
<span id="L114"><span class="lineNum"> 114</span> : : const RawCanFrame &amp;frame) {</span>
<span id="L115"><span class="lineNum"> 115</span> :<span class="tlaGNC"> 6341 : SelectorState selector;</span></span>
<span id="L116"><span class="lineNum"> 116</span> :<span class="tlaGNC"> 6341 : std::size_t count = 0U;</span></span>
<span id="L117"><span class="lineNum"> 117</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6341 times"> + </span>]:<span class="tlaGNC"> 12716 : for (const DecodeSignal &amp;signal: definition.signals) {</span></span>
<span id="L118"><span class="lineNum"> 118</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6354 times"> + </span>]:<span class="tlaGNC"> 6375 : if (signal.multiplexing.role == MultiplexRole::Selector) {</span></span>
<span id="L119"><span class="lineNum"> 119</span> :<span class="tlaGNC"> 21 : selector.definition = &amp;signal;</span></span>
<span id="L120"><span class="lineNum"> 120</span> :<span class="tlaGNC"> 21 : ++count;</span></span>
<span id="L121"><span class="lineNum"> 121</span> : : }</span>
<span id="L122"><span class="lineNum"> 122</span> : : }</span>
<span id="L123"><span class="lineNum"> 123</span> [<span class="tlaGBC" title="Branch 0 was taken 6320 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 21 times"> + </span>]:<span class="tlaGNC"> 6341 : if (count != 1U)</span></span>
<span id="L124"><span class="lineNum"> 124</span> :<span class="tlaGNC"> 6320 : return selector;</span></span>
<span id="L125"><span class="lineNum"> 125</span> : : </span>
<span id="L126"><span class="lineNum"> 126</span> :<span class="tlaGNC"> 21 : const DecodeSignal &amp;signal = *selector.definition;</span></span>
<span id="L127"><span class="lineNum"> 127</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 42 : selector.valid = signal.valueType == ValueType::Unsigned &amp;&amp;</span></span>
<span id="L128"><span class="lineNum"> 128</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 21 : IsValidDefinition(signal, definition.dlc);</span></span>
<span id="L129"><span class="lineNum"> 129</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span>]:<span class="tlaGNC"> 21 : selector.available = selector.valid &amp;&amp; ExtractUnsigned(frame.data, signal, selector.value);</span></span>
<span id="L130"><span class="lineNum"> 130</span> :<span class="tlaGNC"> 21 : return selector;</span></span>
<span id="L131"><span class="lineNum"> 131</span> : : }</span>
<span id="L132"><span class="lineNum"> 132</span> : : </span>
<span id="L133"><span class="lineNum"> 133</span> :<span class="tlaGNC"> 6375 : DecodedSignalValue DbcDecoder::DecodeOneSignal(const DecodeSignal &amp;signal,</span></span>
<span id="L134"><span class="lineNum"> 134</span> : : std::uint8_t dlc,</span>
<span id="L135"><span class="lineNum"> 135</span> : : const RawCanFrame &amp;frame,</span>
<span id="L136"><span class="lineNum"> 136</span> : : const SelectorState &amp;selector) {</span>
<span id="L137"><span class="lineNum"> 137</span> :<span class="tlaGNC"> 6375 : DecodedSignalValue decoded;</span></span>
<span id="L138"><span class="lineNum"> 138</span> :<span class="tlaGNC"> 6375 : std::uint64_t unsignedValue = 0U;</span></span>
<span id="L139"><span class="lineNum"> 139</span> : : </span>
<span id="L140"><span class="lineNum"> 140</span> [<span class="tlaGBC" title="Branch 0 was taken 6375 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 6375 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 12750 : if (!IsValidDefinition(signal, dlc) ||</span></span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 4 was not taken"> - </span><span class="tlaGBC" title="Branch 5 was taken 6375 times"> + </span>]
<span id="L141"><span class="lineNum"> 141</span> [<span class="tlaGBC" title="Branch 0 was taken 50 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6325 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 50 times"> + </span>]:<span class="tlaGNC"> 6375 : (signal.multiplexing.role != MultiplexRole::Unconditional &amp;&amp; !selector.valid)) {</span></span>
<span id="L142"><span class="lineNum"> 142</span> :<span class="tlaUNC"> 0 : return decoded;</span></span>
<span id="L143"><span class="lineNum"> 143</span> : : }</span>
<span id="L144"><span class="lineNum"> 144</span> [<span class="tlaGBC" title="Branch 0 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6346 times"> + </span>]:<span class="tlaGNC"> 6375 : if (signal.multiplexing.role == MultiplexRole::Branch) {</span></span>
<span id="L145"><span class="lineNum"> 145</span> [<span class="tlaGBC" title="Branch 0 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 23 times"> + </span>]:<span class="tlaGNC"> 29 : if (selector.definition-&gt;length &lt; 64U &amp;&amp; signal.multiplexing.value &gt;= (std::uint64_t(1U) &lt;&lt; selector.definition-&gt;length)) {</span></span>
<span id="L146"><span class="lineNum"> 146</span> :<span class="tlaUNC"> 0 : return decoded;</span></span>
<span id="L147"><span class="lineNum"> 147</span> : : }</span>
<span id="L148"><span class="lineNum"> 148</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 26 times"> + </span>]:<span class="tlaGNC"> 29 : if (!selector.available) {</span></span>
<span id="L149"><span class="lineNum"> 149</span> :<span class="tlaGNC"> 3 : decoded.status = SignalDecodeStatus::SelectorUnavailable;</span></span>
<span id="L150"><span class="lineNum"> 150</span> :<span class="tlaGNC"> 3 : return decoded;</span></span>
<span id="L151"><span class="lineNum"> 151</span> : : }</span>
<span id="L152"><span class="lineNum"> 152</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 13 times"> + </span>]:<span class="tlaGNC"> 26 : if (signal.multiplexing.value != selector.value) {</span></span>
<span id="L153"><span class="lineNum"> 153</span> :<span class="tlaGNC"> 13 : decoded.status = SignalDecodeStatus::Inactive;</span></span>
<span id="L154"><span class="lineNum"> 154</span> :<span class="tlaGNC"> 13 : return decoded;</span></span>
<span id="L155"><span class="lineNum"> 155</span> : : }</span>
<span id="L156"><span class="lineNum"> 156</span> : : }</span>
<span id="L157"><span class="lineNum"> 157</span> [<span class="tlaGBC" title="Branch 0 was taken 6359 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 6336 times"> + </span>]:<span class="tlaGNC"> 6359 : if (!ExtractUnsigned(frame.data, signal, unsignedValue)) {</span></span>
<span id="L158"><span class="lineNum"> 158</span> :<span class="tlaGNC"> 23 : decoded.status = SignalDecodeStatus::InsufficientPayload;</span></span>
<span id="L159"><span class="lineNum"> 159</span> :<span class="tlaGNC"> 23 : return decoded;</span></span>
<span id="L160"><span class="lineNum"> 160</span> : : }</span>
<span id="L161"><span class="lineNum"> 161</span> : : </span>
<span id="L162"><span class="lineNum"> 162</span> [<span class="tlaGBC" title="Branch 0 was taken 81 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6255 times"> + </span>]:<span class="tlaGNC"> 6336 : if (signal.valueType == ValueType::Signed)</span></span>
<span id="L163"><span class="lineNum"> 163</span> [<span class="tlaGBC" title="Branch 0 was taken 81 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 81 : decoded.rawValue = SignExtend(unsignedValue, signal.length);</span></span>
<span id="L164"><span class="lineNum"> 164</span> : : else</span>
<span id="L165"><span class="lineNum"> 165</span> :<span class="tlaGNC"> 6255 : decoded.rawValue = unsignedValue;</span></span>
<span id="L166"><span class="lineNum"> 166</span> : : </span>
<span id="L167"><span class="lineNum"> 167</span> : : double numericValue;</span>
<span id="L168"><span class="lineNum"> 168</span> [<span class="tlaGBC" title="Branch 0 was taken 81 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6255 times"> + </span>]:<span class="tlaGNC"> 6336 : if (const std::int64_t *signedValue = std::get_if&lt;std::int64_t&gt;(&amp;decoded.rawValue))</span></span>
<span id="L169"><span class="lineNum"> 169</span> :<span class="tlaGNC"> 81 : numericValue = static_cast&lt;double&gt;(*signedValue);</span></span>
<span id="L170"><span class="lineNum"> 170</span> : : else</span>
<span id="L171"><span class="lineNum"> 171</span> [<span class="tlaGBC" title="Branch 0 was taken 6255 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6255 : numericValue = static_cast&lt;double&gt;(std::get&lt;std::uint64_t&gt;(decoded.rawValue));</span></span>
<span id="L172"><span class="lineNum"> 172</span> :<span class="tlaGNC"> 6336 : decoded.physicalValue = numericValue * signal.factor + signal.offset;</span></span>
<span id="L173"><span class="lineNum"> 173</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6331 times"> + </span>]:<span class="tlaGNC"> 6336 : if (!std::isfinite(decoded.physicalValue)) {</span></span>
<span id="L174"><span class="lineNum"> 174</span> :<span class="tlaGNC"> 5 : decoded.status = SignalDecodeStatus::PhysicalConversionFailed;</span></span>
<span id="L175"><span class="lineNum"> 175</span> :<span class="tlaGNC"> 5 : return decoded;</span></span>
<span id="L176"><span class="lineNum"> 176</span> : : }</span>
<span id="L177"><span class="lineNum"> 177</span> :<span class="tlaGNC"> 6331 : decoded.valid = true;</span></span>
<span id="L178"><span class="lineNum"> 178</span> :<span class="tlaGNC"> 6331 : decoded.status = SignalDecodeStatus::Valid;</span></span>
<span id="L179"><span class="lineNum"> 179</span> : : </span>
<span id="L180"><span class="lineNum"> 180</span> :<span class="tlaGNC"> 6331 : return decoded;</span></span>
<span id="L181"><span class="lineNum"> 181</span> :<span class="tlaUNC"> 0 : }</span></span>
<span id="L182"><span class="lineNum"> 182</span> : : </span>
<span id="L183"><span class="lineNum"> 183</span> :<span class="tlaGNC"> 6380 : bool DbcDecoder::ExtractUnsigned(const std::vector&lt;std::uint8_t&gt; &amp;data,</span></span>
<span id="L184"><span class="lineNum"> 184</span> : : const DecodeSignal &amp;signal,</span>
<span id="L185"><span class="lineNum"> 185</span> : : std::uint64_t &amp;value) {</span>
<span id="L186"><span class="lineNum"> 186</span> [<span class="tlaGBC" title="Branch 0 was taken 6380 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 6380 times"> + </span>]:<span class="tlaGNC"> 6380 : if ((signal.length == 0U) || (signal.length &gt; 64U))</span></span>
<span id="L187"><span class="lineNum"> 187</span> :<span class="tlaUNC"> 0 : return false;</span></span>
<span id="L188"><span class="lineNum"> 188</span> : : </span>
<span id="L189"><span class="lineNum"> 189</span> [<span class="tlaGBC" title="Branch 0 was taken 3242 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3138 times"> + </span>]:<span class="tlaGNC"> 6380 : if (signal.byteOrder == ByteOrder::Intel)</span></span>
<span id="L190"><span class="lineNum"> 190</span> :<span class="tlaGNC"> 3242 : return ExtractIntel(data, signal.startBit, signal.length, value);</span></span>
<span id="L191"><span class="lineNum"> 191</span> : : </span>
<span id="L192"><span class="lineNum"> 192</span> :<span class="tlaGNC"> 3138 : return ExtractMotorola(data, signal.startBit, signal.length, value);</span></span>
<span id="L193"><span class="lineNum"> 193</span> : : }</span>
<span id="L194"><span class="lineNum"> 194</span> : : </span>
<span id="L195"><span class="lineNum"> 195</span> :<span class="tlaGNC"> 3242 : bool DbcDecoder::ExtractIntel(const std::vector&lt;std::uint8_t&gt; &amp;data,</span></span>
<span id="L196"><span class="lineNum"> 196</span> : : std::uint32_t startBit,</span>
<span id="L197"><span class="lineNum"> 197</span> : : std::uint32_t length,</span>
<span id="L198"><span class="lineNum"> 198</span> : : std::uint64_t &amp;value) {</span>
<span id="L199"><span class="lineNum"> 199</span> :<span class="tlaGNC"> 3242 : value = 0U;</span></span>
<span id="L200"><span class="lineNum"> 200</span> : : </span>
<span id="L201"><span class="lineNum"> 201</span> [<span class="tlaGBC" title="Branch 0 was taken 102334 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3224 times"> + </span>]:<span class="tlaGNC"> 105558 : for (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</span></span>
<span id="L202"><span class="lineNum"> 202</span> :<span class="tlaGNC"> 102334 : const std::uint64_t absoluteBit = std::uint64_t(startBit) + bitIndex;</span></span>
<span id="L203"><span class="lineNum"> 203</span> :<span class="tlaGNC"> 102334 : const std::uint64_t byteIndex = absoluteBit / 8U;</span></span>
<span id="L204"><span class="lineNum"> 204</span> :<span class="tlaGNC"> 102334 : const std::uint32_t bitInByte = absoluteBit % 8U;</span></span>
<span id="L205"><span class="lineNum"> 205</span> : : </span>
<span id="L206"><span class="lineNum"> 206</span> [<span class="tlaGBC" title="Branch 0 was taken 18 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 102316 times"> + </span>]:<span class="tlaGNC"> 102334 : if (byteIndex &gt;= data.size())</span></span>
<span id="L207"><span class="lineNum"> 207</span> :<span class="tlaGNC"> 18 : return false;</span></span>
<span id="L208"><span class="lineNum"> 208</span> : : </span>
<span id="L209"><span class="lineNum"> 209</span> : : const std::uint64_t bitValue =</span>
<span id="L210"><span class="lineNum"> 210</span> :<span class="tlaGNC"> 102316 : (static_cast&lt;std::uint64_t&gt;((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U) &lt;&lt; bitIndex);</span></span>
<span id="L211"><span class="lineNum"> 211</span> : : </span>
<span id="L212"><span class="lineNum"> 212</span> :<span class="tlaGNC"> 102316 : value |= bitValue;</span></span>
<span id="L213"><span class="lineNum"> 213</span> : : }</span>
<span id="L214"><span class="lineNum"> 214</span> : : </span>
<span id="L215"><span class="lineNum"> 215</span> :<span class="tlaGNC"> 3224 : return true;</span></span>
<span id="L216"><span class="lineNum"> 216</span> : : }</span>
<span id="L217"><span class="lineNum"> 217</span> : : </span>
<span id="L218"><span class="lineNum"> 218</span> :<span class="tlaGNC"> 3138 : bool DbcDecoder::ExtractMotorola(const std::vector&lt;std::uint8_t&gt; &amp;data,</span></span>
<span id="L219"><span class="lineNum"> 219</span> : : std::uint32_t startBit,</span>
<span id="L220"><span class="lineNum"> 220</span> : : std::uint32_t length,</span>
<span id="L221"><span class="lineNum"> 221</span> : : std::uint64_t &amp;value) {</span>
<span id="L222"><span class="lineNum"> 222</span> : : /*</span>
<span id="L223"><span class="lineNum"> 223</span> : : * DBC Motorola bit numbering:</span>
<span id="L224"><span class="lineNum"> 224</span> : : * - startBit points to the most significant bit of the signal</span>
<span id="L225"><span class="lineNum"> 225</span> : : * - inside a byte, bit numbering goes 7..0</span>
<span id="L226"><span class="lineNum"> 226</span> : : * - crossing byte boundary moves to the next byte, bit 7</span>
<span id="L227"><span class="lineNum"> 227</span> : : * Example: a signal starting at 7 follows 7..0, 15..8, 23..16.</span>
<span id="L228"><span class="lineNum"> 228</span> : : */</span>
<span id="L229"><span class="lineNum"> 229</span> : : </span>
<span id="L230"><span class="lineNum"> 230</span> :<span class="tlaGNC"> 3138 : value = 0U;</span></span>
<span id="L231"><span class="lineNum"> 231</span> : : </span>
<span id="L232"><span class="lineNum"> 232</span> :<span class="tlaGNC"> 3138 : std::size_t byteIndex = startBit / 8U;</span></span>
<span id="L233"><span class="lineNum"> 233</span> :<span class="tlaGNC"> 3138 : std::uint32_t bitInByte = startBit % 8U;</span></span>
<span id="L234"><span class="lineNum"> 234</span> : : </span>
<span id="L235"><span class="lineNum"> 235</span> [<span class="tlaGBC" title="Branch 0 was taken 101601 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3131 times"> + </span>]:<span class="tlaGNC"> 104732 : for (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</span></span>
<span id="L236"><span class="lineNum"> 236</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 101594 times"> + </span>]:<span class="tlaGNC"> 101601 : if (byteIndex &gt;= data.size())</span></span>
<span id="L237"><span class="lineNum"> 237</span> :<span class="tlaGNC"> 7 : return false;</span></span>
<span id="L238"><span class="lineNum"> 238</span> : : </span>
<span id="L239"><span class="lineNum"> 239</span> :<span class="tlaGNC"> 101594 : value &lt;&lt;= 1U;</span></span>
<span id="L240"><span class="lineNum"> 240</span> :<span class="tlaGNC"> 101594 : value |= static_cast&lt;std::uint64_t&gt;((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U);</span></span>
<span id="L241"><span class="lineNum"> 241</span> : : </span>
<span id="L242"><span class="lineNum"> 242</span> [<span class="tlaGBC" title="Branch 0 was taken 12688 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 88906 times"> + </span>]:<span class="tlaGNC"> 101594 : if (bitInByte == 0U) {</span></span>
<span id="L243"><span class="lineNum"> 243</span> :<span class="tlaGNC"> 12688 : ++byteIndex;</span></span>
<span id="L244"><span class="lineNum"> 244</span> :<span class="tlaGNC"> 12688 : bitInByte = 7U;</span></span>
<span id="L245"><span class="lineNum"> 245</span> : : } else</span>
<span id="L246"><span class="lineNum"> 246</span> :<span class="tlaGNC"> 88906 : --bitInByte;</span></span>
<span id="L247"><span class="lineNum"> 247</span> : : }</span>
<span id="L248"><span class="lineNum"> 248</span> : : </span>
<span id="L249"><span class="lineNum"> 249</span> :<span class="tlaGNC"> 3131 : return true;</span></span>
<span id="L250"><span class="lineNum"> 250</span> : : }</span>
<span id="L251"><span class="lineNum"> 251</span> : : </span>
<span id="L252"><span class="lineNum"> 252</span> :<span class="tlaGNC"> 81 : std::int64_t DbcDecoder::SignExtend(std::uint64_t value, std::uint32_t bitLength) {</span></span>
<span id="L253"><span class="lineNum"> 253</span> [<span class="tlaGBC" title="Branch 0 was taken 81 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 81 times"> + </span>]:<span class="tlaGNC"> 81 : if ((bitLength == 0U) || (bitLength &gt; 64U))</span></span>
<span id="L254"><span class="lineNum"> 254</span> :<span class="tlaUNC"> 0 : return 0;</span></span>
<span id="L255"><span class="lineNum"> 255</span> : : </span>
<span id="L256"><span class="lineNum"> 256</span> :<span class="tlaGNC"> 81 : const std::uint64_t signMask = std::uint64_t(1U) &lt;&lt; (bitLength - 1U);</span></span>
<span id="L257"><span class="lineNum"> 257</span> :<span class="tlaGNC"> 81 : const std::uint64_t valueMask = (bitLength == 64U)</span></span>
<span id="L258"><span class="lineNum"> 258</span> [<span class="tlaGBC" title="Branch 0 was taken 68 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 13 times"> + </span>]:<span class="tlaGNC"> 81 : ? ~std::uint64_t(0U)</span></span>
<span id="L259"><span class="lineNum"> 259</span> :<span class="tlaGNC"> 68 : : (std::uint64_t(1U) &lt;&lt; bitLength) - 1U;</span></span>
<span id="L260"><span class="lineNum"> 260</span> :<span class="tlaGNC"> 81 : value &amp;= valueMask;</span></span>
<span id="L261"><span class="lineNum"> 261</span> : : </span>
<span id="L262"><span class="lineNum"> 262</span> [<span class="tlaGBC" title="Branch 0 was taken 41 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 40 times"> + </span>]:<span class="tlaGNC"> 81 : if ((value &amp; signMask) == 0U)</span></span>
<span id="L263"><span class="lineNum"> 263</span> :<span class="tlaGNC"> 41 : return static_cast&lt;std::int64_t&gt;(value);</span></span>
<span id="L264"><span class="lineNum"> 264</span> : : </span>
<span id="L265"><span class="lineNum"> 265</span> : : // The complemented magnitude fits int64_t, including for INT64_MIN.</span>
<span id="L266"><span class="lineNum"> 266</span> :<span class="tlaGNC"> 40 : return -1 - static_cast&lt;std::int64_t&gt;((~value) &amp; valueMask);</span></span>
<span id="L267"><span class="lineNum"> 267</span> : : }</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.h<span style="font-size: 80%;"> (<a href="dbc_decoder.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">75.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_decoder.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L61">DecodedSignalValue::GetValueDescription[abi:cxx11]() const</a></td>
<td class="coverFnHi">79</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L27">RawCanFrame::RawCanFrame()</a></td>
<td class="coverFnHi">2220</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L65">DecodedSignalValue::DecodedSignalValue()</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L78">DecodedFrameValue::DecodedFrameValue()</a></td>
<td class="coverFnHi">6409</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.h<span style="font-size: 80%;"> (<a href="dbc_decoder.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">75.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_decoder.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L78">DecodedFrameValue::DecodedFrameValue()</a></td>
<td class="coverFnHi">6409</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L65">DecodedSignalValue::DecodedSignalValue()</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L61">DecodedSignalValue::GetValueDescription[abi:cxx11]() const</a></td>
<td class="coverFnHi">79</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_decoder.h.gcov.html#L27">RawCanFrame::RawCanFrame()</a></td>
<td class="coverFnHi">2220</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,246 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_decoder.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_decoder.h<span style="font-size: 80%;"> (source / <a href="dbc_decoder.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">75.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file dbc_decoder.h</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief CAN frame decoding API and result types.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #ifndef DBC_DECODER_H</span>
<span id="L13"><span class="lineNum"> 13</span> : : #define DBC_DECODER_H</span>
<span id="L14"><span class="lineNum"> 14</span> : : </span>
<span id="L15"><span class="lineNum"> 15</span> : : #include &lt;cstdint&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : : #include &lt;variant&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : : #include &lt;vector&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> : : #include &quot;decode_database.h&quot;</span>
<span id="L20"><span class="lineNum"> 20</span> : : </span>
<span id="L21"><span class="lineNum"> 21</span> : : /**</span>
<span id="L22"><span class="lineNum"> 22</span> : : * @brief Raw CAN frame used for runtime or trace decoding.</span>
<span id="L23"><span class="lineNum"> 23</span> : : */</span>
<span id="L24"><span class="lineNum"> 24</span> : : struct RawCanFrame {</span>
<span id="L25"><span class="lineNum"> 25</span> : : std::uint32_t canId = 0U; /**&lt; Normalized CAN ID. */</span>
<span id="L26"><span class="lineNum"> 26</span> : : bool isExtended = false; /**&lt; true for extended frame. */</span>
<span id="L27"><span class="lineNum"> 27</span> : : std::vector&lt;std::uint8_t&gt; data; /**&lt; Payload bytes. */</span>
<span id="L28"><span class="lineNum"> 28</span> : : </span>
<span id="L29"><span class="lineNum"> 29</span> :<span class="tlaGNC"> 2220 : RawCanFrame() = default;</span></span>
<span id="L30"><span class="lineNum"> 30</span> : : };</span>
<span id="L31"><span class="lineNum"> 31</span> : : </span>
<span id="L32"><span class="lineNum"> 32</span> : : /** @brief Outcome of signal extraction and physical conversion. */</span>
<span id="L33"><span class="lineNum"> 33</span> : : enum class SignalDecodeStatus {</span>
<span id="L34"><span class="lineNum"> 34</span> : : InvalidDefinition,</span>
<span id="L35"><span class="lineNum"> 35</span> : : InsufficientPayload,</span>
<span id="L36"><span class="lineNum"> 36</span> : : SelectorUnavailable,</span>
<span id="L37"><span class="lineNum"> 37</span> : : Inactive,</span>
<span id="L38"><span class="lineNum"> 38</span> : : Valid,</span>
<span id="L39"><span class="lineNum"> 39</span> : : PhysicalConversionFailed</span>
<span id="L40"><span class="lineNum"> 40</span> : : };</span>
<span id="L41"><span class="lineNum"> 41</span> : : </span>
<span id="L42"><span class="lineNum"> 42</span> : : /** Frame summary: short payload takes precedence over individual signal errors. */</span>
<span id="L43"><span class="lineNum"> 43</span> : : enum class FrameDecodeStatus {</span>
<span id="L44"><span class="lineNum"> 44</span> : : UnknownFrame,</span>
<span id="L45"><span class="lineNum"> 45</span> : : InsufficientPayload,</span>
<span id="L46"><span class="lineNum"> 46</span> : : SignalErrors,</span>
<span id="L47"><span class="lineNum"> 47</span> : : Valid,</span>
<span id="L48"><span class="lineNum"> 48</span> : : AmbiguousFrame</span>
<span id="L49"><span class="lineNum"> 49</span> : : };</span>
<span id="L50"><span class="lineNum"> 50</span> : : </span>
<span id="L51"><span class="lineNum"> 51</span> : : /**</span>
<span id="L52"><span class="lineNum"> 52</span> : : * @brief One decoded signal value.</span>
<span id="L53"><span class="lineNum"> 53</span> : : */</span>
<span id="L54"><span class="lineNum"> 54</span> : : struct DecodedSignalValue {</span>
<span id="L55"><span class="lineNum"> 55</span> : : std::shared_ptr&lt;const DecodeSignal&gt; definition; /**&lt; Owning immutable definition. */</span>
<span id="L56"><span class="lineNum"> 56</span> : : SignalKey key; /**&lt; Stable application identifier. */</span>
<span id="L57"><span class="lineNum"> 57</span> : : RawSignalValue rawValue = std::uint64_t(0U); /**&lt; Exact raw value for Valid or PhysicalConversionFailed. */</span>
<span id="L58"><span class="lineNum"> 58</span> : : double physicalValue = 0.0; /**&lt; Conversion result, possibly NaN/Inf on failure. */</span>
<span id="L59"><span class="lineNum"> 59</span> : : bool valid = false; /**&lt; true if decoding succeeded. */</span>
<span id="L60"><span class="lineNum"> 60</span> : : SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition; /**&lt; Detailed signal outcome. */</span>
<span id="L61"><span class="lineNum"> 61</span> : : </span>
<span id="L62"><span class="lineNum"> 62</span> : : /** Lookup using the raw integer; nullptr for invalid or unmapped values. */</span>
<span id="L63"><span class="lineNum"> 63</span> :<span class="tlaGNC"> 79 : const std::string *GetValueDescription() const {</span></span>
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 64 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 15 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 64 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 79 : return valid &amp;&amp; definition ? FindValueDescription(definition-&gt;valueDescriptions, rawValue) : nullptr;</span></span>
<span id="L65"><span class="lineNum"> 65</span> : : }</span>
<span id="L66"><span class="lineNum"> 66</span> : : </span>
<span id="L67"><span class="lineNum"> 67</span> :<span class="tlaGNC"> 6380 : DecodedSignalValue() = default;</span></span>
<span id="L68"><span class="lineNum"> 68</span> : : };</span>
<span id="L69"><span class="lineNum"> 69</span> : : </span>
<span id="L70"><span class="lineNum"> 70</span> : : /**</span>
<span id="L71"><span class="lineNum"> 71</span> : : * @brief Fully decoded frame.</span>
<span id="L72"><span class="lineNum"> 72</span> : : */</span>
<span id="L73"><span class="lineNum"> 73</span> : : struct DecodedFrameValue {</span>
<span id="L74"><span class="lineNum"> 74</span> : : std::shared_ptr&lt;const DecodeFrame&gt; definition; /**&lt; Owning immutable definition. */</span>
<span id="L75"><span class="lineNum"> 75</span> : : FrameKey key; /**&lt; Matched definition key; received key if unmatched. */</span>
<span id="L76"><span class="lineNum"> 76</span> : : std::vector&lt;DecodedSignalValue&gt; signals; /**&lt; Decoded signal values. */</span>
<span id="L77"><span class="lineNum"> 77</span> : : bool valid = false; /**&lt; true if frame was matched. */</span>
<span id="L78"><span class="lineNum"> 78</span> : : FrameDecodeStatus status = FrameDecodeStatus::UnknownFrame; /**&lt; Inspect signals for individual failures. */</span>
<span id="L79"><span class="lineNum"> 79</span> : : </span>
<span id="L80"><span class="lineNum"> 80</span> :<span class="tlaGNC"> 6409 : DecodedFrameValue() = default;</span></span>
<span id="L81"><span class="lineNum"> 81</span> : : };</span>
<span id="L82"><span class="lineNum"> 82</span> : : </span>
<span id="L83"><span class="lineNum"> 83</span> : : /**</span>
<span id="L84"><span class="lineNum"> 84</span> : : * @brief Runtime CAN decoder using prebuilt decode database.</span>
<span id="L85"><span class="lineNum"> 85</span> : : */</span>
<span id="L86"><span class="lineNum"> 86</span> : : class DbcDecoder {</span>
<span id="L87"><span class="lineNum"> 87</span> : : public:</span>
<span id="L88"><span class="lineNum"> 88</span> : : /**</span>
<span id="L89"><span class="lineNum"> 89</span> : : * @brief Find exact CAN ID first, then unique PGN among explicitly J1939 definitions.</span>
<span id="L90"><span class="lineNum"> 90</span> : : * @param database Runtime decode database.</span>
<span id="L91"><span class="lineNum"> 91</span> : : * @param canId Normalized CAN ID.</span>
<span id="L92"><span class="lineNum"> 92</span> : : * @param isExtended true for extended frame.</span>
<span id="L93"><span class="lineNum"> 93</span> : : * @return Owning immutable handle, or nullptr for missing/ambiguous matches. Safe across reload.</span>
<span id="L94"><span class="lineNum"> 94</span> : : */</span>
<span id="L95"><span class="lineNum"> 95</span> : : std::shared_ptr&lt;const DecodeFrame&gt; FindFrame(const DecodeDatabase &amp;database,</span>
<span id="L96"><span class="lineNum"> 96</span> : : std::uint32_t canId,</span>
<span id="L97"><span class="lineNum"> 97</span> : : bool isExtended) const;</span>
<span id="L98"><span class="lineNum"> 98</span> : : </span>
<span id="L99"><span class="lineNum"> 99</span> : : /**</span>
<span id="L100"><span class="lineNum"> 100</span> : : * @brief Decode one raw CAN frame.</span>
<span id="L101"><span class="lineNum"> 101</span> : : * @param database Runtime decode database.</span>
<span id="L102"><span class="lineNum"> 102</span> : : * @param frame Raw CAN frame.</span>
<span id="L103"><span class="lineNum"> 103</span> : : * Short payloads decode available signals; bytes beyond declared DLC are ignored.</span>
<span id="L104"><span class="lineNum"> 104</span> : : * @return Decoded frame value.</span>
<span id="L105"><span class="lineNum"> 105</span> : : */</span>
<span id="L106"><span class="lineNum"> 106</span> : : DecodedFrameValue Decode(const DecodeDatabase &amp;database,</span>
<span id="L107"><span class="lineNum"> 107</span> : : const RawCanFrame &amp;frame) const;</span>
<span id="L108"><span class="lineNum"> 108</span> : : </span>
<span id="L109"><span class="lineNum"> 109</span> : : /**</span>
<span id="L110"><span class="lineNum"> 110</span> : : * @brief Decode selected signals in selection order using stable keys.</span>
<span id="L111"><span class="lineNum"> 111</span> : : * An empty selection returns no signals. Multiplex selectors are read internally.</span>
<span id="L112"><span class="lineNum"> 112</span> : : * Frame status summarizes selected signals; short payload still takes precedence.</span>
<span id="L113"><span class="lineNum"> 113</span> : : * Unknown/ambiguous frames return before checking the selection.</span>
<span id="L114"><span class="lineNum"> 114</span> : : * For PGN matches, selection keys must belong to the matched DBC definition.</span>
<span id="L115"><span class="lineNum"> 115</span> : : * @throws std::invalid_argument for a foreign frame key, unknown signal, or duplicate key.</span>
<span id="L116"><span class="lineNum"> 116</span> : : */</span>
<span id="L117"><span class="lineNum"> 117</span> : : DecodedFrameValue Decode(const DecodeDatabase &amp;database,</span>
<span id="L118"><span class="lineNum"> 118</span> : : const RawCanFrame &amp;frame,</span>
<span id="L119"><span class="lineNum"> 119</span> : : const std::vector&lt;SignalKey&gt; &amp;selection) const;</span>
<span id="L120"><span class="lineNum"> 120</span> : : </span>
<span id="L121"><span class="lineNum"> 121</span> : : private:</span>
<span id="L122"><span class="lineNum"> 122</span> : : static PgnLookupResult ResolveFrame(const DecodeDatabase &amp;database,</span>
<span id="L123"><span class="lineNum"> 123</span> : : std::uint32_t canId, bool isExtended);</span>
<span id="L124"><span class="lineNum"> 124</span> : : </span>
<span id="L125"><span class="lineNum"> 125</span> : : DecodedFrameValue DecodeImpl(const DecodeDatabase &amp;database,</span>
<span id="L126"><span class="lineNum"> 126</span> : : const RawCanFrame &amp;frame,</span>
<span id="L127"><span class="lineNum"> 127</span> : : const std::vector&lt;SignalKey&gt; *selection) const;</span>
<span id="L128"><span class="lineNum"> 128</span> : : </span>
<span id="L129"><span class="lineNum"> 129</span> : : static bool IsValidDefinition(const DecodeSignal &amp;signal, std::uint8_t dlc);</span>
<span id="L130"><span class="lineNum"> 130</span> : : </span>
<span id="L131"><span class="lineNum"> 131</span> : : struct SelectorState {</span>
<span id="L132"><span class="lineNum"> 132</span> : : const DecodeSignal *definition = nullptr;</span>
<span id="L133"><span class="lineNum"> 133</span> : : bool valid = false;</span>
<span id="L134"><span class="lineNum"> 134</span> : : bool available = false;</span>
<span id="L135"><span class="lineNum"> 135</span> : : std::uint64_t value = 0U;</span>
<span id="L136"><span class="lineNum"> 136</span> : : };</span>
<span id="L137"><span class="lineNum"> 137</span> : : </span>
<span id="L138"><span class="lineNum"> 138</span> : : static SelectorState ReadSelector(const DecodeFrame &amp;definition, const RawCanFrame &amp;frame);</span>
<span id="L139"><span class="lineNum"> 139</span> : : static DecodedSignalValue DecodeOneSignal(const DecodeSignal &amp;signal,</span>
<span id="L140"><span class="lineNum"> 140</span> : : std::uint8_t dlc,</span>
<span id="L141"><span class="lineNum"> 141</span> : : const RawCanFrame &amp;frame,</span>
<span id="L142"><span class="lineNum"> 142</span> : : const SelectorState &amp;selector);</span>
<span id="L143"><span class="lineNum"> 143</span> : : </span>
<span id="L144"><span class="lineNum"> 144</span> : : static bool ExtractUnsigned(const std::vector&lt;std::uint8_t&gt; &amp;data,</span>
<span id="L145"><span class="lineNum"> 145</span> : : const DecodeSignal &amp;signal,</span>
<span id="L146"><span class="lineNum"> 146</span> : : std::uint64_t &amp;value);</span>
<span id="L147"><span class="lineNum"> 147</span> : : </span>
<span id="L148"><span class="lineNum"> 148</span> : : static bool ExtractIntel(const std::vector&lt;std::uint8_t&gt; &amp;data,</span>
<span id="L149"><span class="lineNum"> 149</span> : : std::uint32_t startBit,</span>
<span id="L150"><span class="lineNum"> 150</span> : : std::uint32_t length,</span>
<span id="L151"><span class="lineNum"> 151</span> : : std::uint64_t &amp;value);</span>
<span id="L152"><span class="lineNum"> 152</span> : : </span>
<span id="L153"><span class="lineNum"> 153</span> : : static bool ExtractMotorola(const std::vector&lt;std::uint8_t&gt; &amp;data,</span>
<span id="L154"><span class="lineNum"> 154</span> : : std::uint32_t startBit,</span>
<span id="L155"><span class="lineNum"> 155</span> : : std::uint32_t length,</span>
<span id="L156"><span class="lineNum"> 156</span> : : std::uint64_t &amp;value);</span>
<span id="L157"><span class="lineNum"> 157</span> : : </span>
<span id="L158"><span class="lineNum"> 158</span> : : static std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);</span>
<span id="L159"><span class="lineNum"> 159</span> : : };</span>
<span id="L160"><span class="lineNum"> 160</span> : : </span>
<span id="L161"><span class="lineNum"> 161</span> : : #endif /* DBC_DECODER_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_diagnostic.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_diagnostic.h<span style="font-size: 80%;"> (<a href="dbc_diagnostic.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_diagnostic.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_diagnostic.h.gcov.html#L41">DbcParseResult::HasErrors() const</a></td>
<td class="coverFnHi">293</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_diagnostic.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_diagnostic.h<span style="font-size: 80%;"> (<a href="dbc_diagnostic.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_diagnostic.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_diagnostic.h.gcov.html#L41">DbcParseResult::HasErrors() const</a></td>
<td class="coverFnHi">293</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,137 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_diagnostic.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_diagnostic.h<span style="font-size: 80%;"> (source / <a href="dbc_diagnostic.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #ifndef DBC_DIAGNOSTIC_H</span>
<span id="L3"><span class="lineNum"> 3</span> : : #define DBC_DIAGNOSTIC_H</span>
<span id="L4"><span class="lineNum"> 4</span> : : </span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &quot;dbc_database.h&quot;</span>
<span id="L6"><span class="lineNum"> 6</span> : : #include &lt;cstddef&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : : #include &lt;string&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : : #include &lt;vector&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : : </span>
<span id="L10"><span class="lineNum"> 10</span> : : /** @brief Warning or fatal parse error. */</span>
<span id="L11"><span class="lineNum"> 11</span> : : enum class DbcDiagnosticSeverity {</span>
<span id="L12"><span class="lineNum"> 12</span> : : Warning,</span>
<span id="L13"><span class="lineNum"> 13</span> : : Error</span>
<span id="L14"><span class="lineNum"> 14</span> : : };</span>
<span id="L15"><span class="lineNum"> 15</span> : : </span>
<span id="L16"><span class="lineNum"> 16</span> : : /** Stable categories; messages provide the details. */</span>
<span id="L17"><span class="lineNum"> 17</span> : : enum class DbcDiagnosticCode {</span>
<span id="L18"><span class="lineNum"> 18</span> : : FileOpenError,</span>
<span id="L19"><span class="lineNum"> 19</span> : : FileReadError,</span>
<span id="L20"><span class="lineNum"> 20</span> : : InvalidStatement,</span>
<span id="L21"><span class="lineNum"> 21</span> : : InvalidValueDescription,</span>
<span id="L22"><span class="lineNum"> 22</span> : : InvalidMultiplexing,</span>
<span id="L23"><span class="lineNum"> 23</span> : : UnsupportedStatement,</span>
<span id="L24"><span class="lineNum"> 24</span> : : InvalidAttribute,</span>
<span id="L25"><span class="lineNum"> 25</span> : : UnsupportedAttribute</span>
<span id="L26"><span class="lineNum"> 26</span> : : };</span>
<span id="L27"><span class="lineNum"> 27</span> : : </span>
<span id="L28"><span class="lineNum"> 28</span> : : /** @brief Diagnostic message and physical source location. */</span>
<span id="L29"><span class="lineNum"> 29</span> : : struct DbcDiagnostic {</span>
<span id="L30"><span class="lineNum"> 30</span> : : DbcDiagnosticSeverity severity; /**&lt; Message severity. */</span>
<span id="L31"><span class="lineNum"> 31</span> : : DbcDiagnosticCode code; /**&lt; Stable diagnostic category. */</span>
<span id="L32"><span class="lineNum"> 32</span> : : std::string filePath; /**&lt; Input file path. */</span>
<span id="L33"><span class="lineNum"> 33</span> : : std::size_t lineNumber; /**&lt; One-based physical line; zero for file-level errors. */</span>
<span id="L34"><span class="lineNum"> 34</span> : : std::string message; /**&lt; Human-readable diagnostic details. */</span>
<span id="L35"><span class="lineNum"> 35</span> : : };</span>
<span id="L36"><span class="lineNum"> 36</span> : : </span>
<span id="L37"><span class="lineNum"> 37</span> : : /** @brief Parsed database and diagnostics; the database is empty on error. */</span>
<span id="L38"><span class="lineNum"> 38</span> : : struct DbcParseResult {</span>
<span id="L39"><span class="lineNum"> 39</span> : : DbcDatabase database; /**&lt; Parsed content, published only on success. */</span>
<span id="L40"><span class="lineNum"> 40</span> : : std::vector&lt;DbcDiagnostic&gt; diagnostics; /**&lt; Warnings and the first error, if any. */</span>
<span id="L41"><span class="lineNum"> 41</span> : : </span>
<span id="L42"><span class="lineNum"> 42</span> : : /** @brief Return whether any diagnostic has error severity. */</span>
<span id="L43"><span class="lineNum"> 43</span> :<span class="tlaGNC"> 293 : bool HasErrors() const {</span></span>
<span id="L44"><span class="lineNum"> 44</span> [<span class="tlaGBC" title="Branch 0 was taken 283 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 44 times"> + </span>]:<span class="tlaGNC"> 327 : for (const DbcDiagnostic &amp;diagnostic: diagnostics) {</span></span>
<span id="L45"><span class="lineNum"> 45</span> [<span class="tlaGBC" title="Branch 0 was taken 249 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 34 times"> + </span>]:<span class="tlaGNC"> 283 : if (diagnostic.severity == DbcDiagnosticSeverity::Error)</span></span>
<span id="L46"><span class="lineNum"> 46</span> :<span class="tlaGNC"> 249 : return true;</span></span>
<span id="L47"><span class="lineNum"> 47</span> : : }</span>
<span id="L48"><span class="lineNum"> 48</span> :<span class="tlaGNC"> 44 : return false;</span></span>
<span id="L49"><span class="lineNum"> 49</span> : : }</span>
<span id="L50"><span class="lineNum"> 50</span> : : };</span>
<span id="L51"><span class="lineNum"> 51</span> : : </span>
<span id="L52"><span class="lineNum"> 52</span> : : #endif /* DBC_DIAGNOSTIC_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.cpp<span style="font-size: 80%;"> (<a href="dbc_parser.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.0&nbsp;%</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntry">98</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.4&nbsp;%</td>
<td class="headerCovTableEntry">216</td>
<td class="headerCovTableEntry">152</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_parser.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L21">(anonymous namespace)::ReadCommentLines(std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;&amp;, unsigned long&amp;)</a></td>
<td class="coverFnHi">140</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L50">(anonymous namespace)::StatementErrorCode(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">349</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L59">DbcParser::ParseFile(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">656</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L72">DbcParser::ParseFileWithDiagnostics(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">951</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.cpp<span style="font-size: 80%;"> (<a href="dbc_parser.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.0&nbsp;%</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntry">98</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.4&nbsp;%</td>
<td class="headerCovTableEntry">216</td>
<td class="headerCovTableEntry">152</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_parser.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L21">(anonymous namespace)::ReadCommentLines(std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;&amp;, unsigned long&amp;)</a></td>
<td class="coverFnHi">140</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L50">(anonymous namespace)::StatementErrorCode(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">349</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L59">DbcParser::ParseFile(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">656</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.cpp.gcov.html#L72">DbcParser::ParseFileWithDiagnostics(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">951</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,261 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.cpp<span style="font-size: 80%;"> (source / <a href="dbc_parser.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.0&nbsp;%</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntry">98</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.4&nbsp;%</td>
<td class="headerCovTableEntry">216</td>
<td class="headerCovTableEntry">152</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file dbc_parser.cpp</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief DBC file reading and diagnostic collection.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #include &quot;dbc_parser.h&quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : : #include &quot;dbc_statement_handler.h&quot;</span>
<span id="L14"><span class="lineNum"> 14</span> : : </span>
<span id="L15"><span class="lineNum"> 15</span> : : #include &quot;text_utils.h&quot;</span>
<span id="L16"><span class="lineNum"> 16</span> : : #include &lt;fstream&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : : #include &lt;sstream&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : : #include &lt;stdexcept&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : : #include &lt;utility&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : : </span>
<span id="L21"><span class="lineNum"> 21</span> : : namespace {</span>
<span id="L22"><span class="lineNum"> 22</span> : : // Read through the closing unescaped quote, preserving comment whitespace.</span>
<span id="L23"><span class="lineNum"> 23</span> :<span class="tlaGNC"> 140 : void ReadCommentLines(std::ifstream &amp;input, std::string &amp;statement,</span></span>
<span id="L24"><span class="lineNum"> 24</span> : : std::size_t &amp;lineNumber) {</span>
<span id="L25"><span class="lineNum"> 25</span> :<span class="tlaGNC"> 140 : bool inQuote = false;</span></span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 140 : bool escaped = false;</span></span>
<span id="L27"><span class="lineNum"> 27</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : std::string part = statement;</span></span>
<span id="L28"><span class="lineNum"> 28</span> : : for (;;) {</span>
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 3662 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 15 times"> + </span>]:<span class="tlaGNC"> 3677 : for (const char character: part) {</span></span>
<span id="L30"><span class="lineNum"> 30</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3657 times"> + </span>]:<span class="tlaGNC"> 3662 : if (escaped) {</span></span>
<span id="L31"><span class="lineNum"> 31</span> :<span class="tlaGNC"> 5 : escaped = false;</span></span>
<span id="L32"><span class="lineNum"> 32</span> [<span class="tlaGBC" title="Branch 0 was taken 1289 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2368 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1282 times"> + </span>]:<span class="tlaGNC"> 3657 : } else if (inQuote &amp;&amp; character == '\\') {</span></span>
<span id="L33"><span class="lineNum"> 33</span> :<span class="tlaGNC"> 7 : escaped = true;</span></span>
<span id="L34"><span class="lineNum"> 34</span> [<span class="tlaGBC" title="Branch 0 was taken 268 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3382 times"> + </span>]:<span class="tlaGNC"> 3650 : } else if (character == '&quot;') {</span></span>
<span id="L35"><span class="lineNum"> 35</span> [<span class="tlaGBC" title="Branch 0 was taken 132 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 136 times"> + </span>]:<span class="tlaGNC"> 268 : if (inQuote)</span></span>
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 132 : return;</span></span>
<span id="L37"><span class="lineNum"> 37</span> :<span class="tlaGNC"> 136 : inQuote = true;</span></span>
<span id="L38"><span class="lineNum"> 38</span> : : }</span>
<span id="L39"><span class="lineNum"> 39</span> : : }</span>
<span id="L40"><span class="lineNum"> 40</span> [<span class="tlaGBC" title="Branch 0 was taken 11 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 11 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 15 : if (!inQuote || !std::getline(input, part))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 11 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 8 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 7 times"> + </span>]
<span id="L41"><span class="lineNum"> 41</span> :<span class="tlaGNC"> 8 : return;</span></span>
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 7 : ++lineNumber;</span></span>
<span id="L43"><span class="lineNum"> 43</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span> :<span class="tlaGNC"> 7 : if (!part.empty() &amp;&amp; part.back() == '\r')</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 5 times"> + </span>]
<span id="L44"><span class="lineNum"> 44</span> :<span class="tlaGNC"> 2 : part.pop_back();</span></span>
<span id="L45"><span class="lineNum"> 45</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7 : statement += '\n';</span></span>
<span id="L46"><span class="lineNum"> 46</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7 : statement += part;</span></span>
<span id="L47"><span class="lineNum"> 47</span> : : // A physical newline cannot escape the next line's first character.</span>
<span id="L48"><span class="lineNum"> 48</span> :<span class="tlaGNC"> 7 : escaped = false;</span></span>
<span id="L49"><span class="lineNum"> 49</span> :<span class="tlaGNC"> 7 : }</span></span>
<span id="L50"><span class="lineNum"> 50</span> :<span class="tlaGNC"> 140 : }</span></span>
<span id="L51"><span class="lineNum"> 51</span> : : </span>
<span id="L52"><span class="lineNum"> 52</span> :<span class="tlaGNC"> 349 : DbcDiagnosticCode StatementErrorCode(const std::string &amp;keyword) {</span></span>
<span id="L53"><span class="lineNum"> 53</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 345 times"> + </span>]:<span class="tlaGNC"> 349 : if (keyword == &quot;SG_MUL_VAL_&quot;)</span></span>
<span id="L54"><span class="lineNum"> 54</span> :<span class="tlaGNC"> 4 : return DbcDiagnosticCode::UnsupportedStatement;</span></span>
<span id="L55"><span class="lineNum"> 55</span> [<span class="tlaGBC" title="Branch 0 was taken 25 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 320 times"> + </span>]:<span class="tlaGNC"> 345 : if (keyword == &quot;VAL_&quot;)</span></span>
<span id="L56"><span class="lineNum"> 56</span> :<span class="tlaGNC"> 25 : return DbcDiagnosticCode::InvalidValueDescription;</span></span>
<span id="L57"><span class="lineNum"> 57</span> :<span class="tlaGNC"> 320 : return DbcDiagnosticCode::InvalidStatement;</span></span>
<span id="L58"><span class="lineNum"> 58</span> : : }</span>
<span id="L59"><span class="lineNum"> 59</span> : : }</span>
<span id="L60"><span class="lineNum"> 60</span> : : </span>
<span id="L61"><span class="lineNum"> 61</span> :<span class="tlaGNC"> 656 : DbcDatabase DbcParser::ParseFile(const std::string &amp;filePath) const {</span></span>
<span id="L62"><span class="lineNum"> 62</span> [<span class="tlaGBC" title="Branch 0 was taken 656 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 656 : DbcParseResult result = ParseFileWithDiagnostics(filePath);</span></span>
<span id="L63"><span class="lineNum"> 63</span> [<span class="tlaGBC" title="Branch 0 was taken 545 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 117 times"> + </span>]:<span class="tlaGNC"> 662 : for (const DbcDiagnostic &amp;diagnostic : result.diagnostics) {</span></span>
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 539 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6 times"> + </span>]:<span class="tlaGNC"> 545 : if (diagnostic.severity == DbcDiagnosticSeverity::Error) {</span></span>
<span id="L65"><span class="lineNum"> 65</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 536 times"> + </span>]:<span class="tlaGNC"> 539 : if (diagnostic.lineNumber == 0U)</span></span>
<span id="L66"><span class="lineNum"> 66</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::runtime_error(diagnostic.message);</span></span>
<span id="L67"><span class="lineNum"> 67</span> [<span class="tlaGBC" title="Branch 0 was taken 536 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1072 : throw std::runtime_error(diagnostic.filePath + &quot;:&quot; +</span></span>
<span id="L68"><span class="lineNum"> 68</span> [<span class="tlaGBC" title="Branch 0 was taken 536 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 536 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1608 : std::to_string(diagnostic.lineNumber) + &quot;: &quot; + diagnostic.message);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 536 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 536 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 536 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L69"><span class="lineNum"> 69</span> : : }</span>
<span id="L70"><span class="lineNum"> 70</span> : : }</span>
<span id="L71"><span class="lineNum"> 71</span> :<span class="tlaGNC"> 234 : return std::move(result.database);</span></span>
<span id="L72"><span class="lineNum"> 72</span> :<span class="tlaGNC"> 656 : }</span></span>
<span id="L73"><span class="lineNum"> 73</span> : : </span>
<span id="L74"><span class="lineNum"> 74</span> :<span class="tlaGNC"> 951 : DbcParseResult DbcParser::ParseFileWithDiagnostics(const std::string &amp;filePath) const {</span></span>
<span id="L75"><span class="lineNum"> 75</span> :<span class="tlaGNC"> 951 : DbcParseResult result;</span></span>
<span id="L76"><span class="lineNum"> 76</span> [<span class="tlaGBC" title="Branch 0 was taken 951 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 951 : std::ifstream input(filePath.c_str());</span></span>
<span id="L77"><span class="lineNum"> 77</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 948 times"> + </span>]:<span class="tlaGNC"> 951 : if (!input.is_open()) {</span></span>
<span id="L78"><span class="lineNum"> 78</span> :<span class="tlaGNC"> 3 : result.diagnostics.push_back({DbcDiagnosticSeverity::Error,</span></span>
<span id="L79"><span class="lineNum"> 79</span> : : DbcDiagnosticCode::FileOpenError, filePath, 0U,</span>
<span id="L80"><span class="lineNum"> 80</span> : : &quot;Failed to open DBC file: &quot; + filePath});</span>
<span id="L81"><span class="lineNum"> 81</span> :<span class="tlaGNC"> 3 : return result;</span></span>
<span id="L82"><span class="lineNum"> 82</span> : : }</span>
<span id="L83"><span class="lineNum"> 83</span> : : </span>
<span id="L84"><span class="lineNum"> 84</span> :<span class="tlaGNC"> 948 : DbcDatabase database;</span></span>
<span id="L85"><span class="lineNum"> 85</span> :<span class="tlaGNC"> 948 : DbcParseContext context{database, nullptr};</span></span>
<span id="L86"><span class="lineNum"> 86</span> :<span class="tlaGNC"> 948 : context.enableJ1939 = options.enableJ1939;</span></span>
<span id="L87"><span class="lineNum"> 87</span> [<span class="tlaGBC" title="Branch 0 was taken 948 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 948 : const DbcStatementDispatcher dispatcher;</span></span>
<span id="L88"><span class="lineNum"> 88</span> :<span class="tlaGNC"> 948 : bool inNamespace = false;</span></span>
<span id="L89"><span class="lineNum"> 89</span> :<span class="tlaGNC"> 948 : std::size_t lineNumber = 0U;</span></span>
<span id="L90"><span class="lineNum"> 90</span> :<span class="tlaGNC"> 948 : std::string line;</span></span>
<span id="L91"><span class="lineNum"> 91</span> [<span class="tlaGBC" title="Branch 0 was taken 3097 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3097 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 3097 : while (std::getline(input, line)) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2498 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 599 times"> + </span>]
<span id="L92"><span class="lineNum"> 92</span> :<span class="tlaGNC"> 2498 : ++lineNumber;</span></span>
<span id="L93"><span class="lineNum"> 93</span> [<span class="tlaGBC" title="Branch 0 was taken 2162 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 336 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2143 times"> + </span> :<span class="tlaGNC"> 2498 : if (!line.empty() &amp;&amp; line.back() == '\r')</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2479 times"> + </span>]
<span id="L94"><span class="lineNum"> 94</span> :<span class="tlaGNC"> 19 : line.pop_back();</span></span>
<span id="L95"><span class="lineNum"> 95</span> [<span class="tlaGBC" title="Branch 0 was taken 2498 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2498 : const std::string rawLine = line;</span></span>
<span id="L96"><span class="lineNum"> 96</span> :<span class="tlaGNC"> 2498 : const std::size_t statementLine = lineNumber;</span></span>
<span id="L97"><span class="lineNum"> 97</span> [<span class="tlaGBC" title="Branch 0 was taken 2498 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2498 : line = dbc_detail::TrimText(line);</span></span>
<span id="L98"><span class="lineNum"> 98</span> [<span class="tlaGBC" title="Branch 0 was taken 342 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2156 times"> + </span>]:<span class="tlaGNC"> 2498 : if (line.empty())</span></span>
<span id="L99"><span class="lineNum"> 99</span> :<span class="tlaGNC"> 342 : continue;</span></span>
<span id="L100"><span class="lineNum"> 100</span> : : </span>
<span id="L101"><span class="lineNum"> 101</span> [<span class="tlaGBC" title="Branch 0 was taken 2156 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2156 : std::istringstream tokens(line);</span></span>
<span id="L102"><span class="lineNum"> 102</span> :<span class="tlaGNC"> 2156 : std::string keyword;</span></span>
<span id="L103"><span class="lineNum"> 103</span> :<span class="tlaGNC"> 2156 : std::string argument;</span></span>
<span id="L104"><span class="lineNum"> 104</span> [<span class="tlaGBC" title="Branch 0 was taken 2156 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2156 : tokens &gt;&gt; keyword;</span></span>
<span id="L105"><span class="lineNum"> 105</span> [<span class="tlaGBC" title="Branch 0 was taken 2156 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2156 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2156 : const bool hasArgument = static_cast&lt;bool&gt;(tokens &gt;&gt; argument);</span></span>
<span id="L106"><span class="lineNum"> 106</span> [<span class="tlaGBC" title="Branch 0 was taken 39 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 39 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 44 : if (inNamespace &amp;&amp; !hasArgument &amp;&amp; keyword != &quot;BO_&quot; &amp;&amp; keyword != &quot;SG_&quot; &amp;&amp;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 37 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 36 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1 time"> + </span>]
<span id="L107"><span class="lineNum"> 107</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 35 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span> :<span class="tlaGNC"> 36 : keyword != &quot;BS_&quot; &amp;&amp; keyword != &quot;BS_:&quot; &amp;&amp;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 35 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 31 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 4 times"> + </span>]
<span id="L108"><span class="lineNum"> 108</span> [<span class="tlaGBC" title="Branch 0 was taken 44 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2112 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 31 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 2200 : keyword != &quot;BU_&quot; &amp;&amp; keyword != &quot;BU_:&quot;)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 30 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 6 was taken 30 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 29 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 10 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 2127 times"> + </span>]
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 29 : continue; // NS_ lists syntax symbols; BO_, SG_, BS_ and BU_ end the list.</span></span>
<span id="L110"><span class="lineNum"> 110</span> [<span class="tlaGBC" title="Branch 0 was taken 2127 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2115 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 12 times"> + </span> :<span class="tlaGNC"> 2127 : inNamespace = keyword == &quot;NS_&quot; || keyword == &quot;NS_:&quot;;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2115 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2112 times"> + </span>]
<span id="L111"><span class="lineNum"> 111</span> : : </span>
<span id="L112"><span class="lineNum"> 112</span> [<span class="tlaGBC" title="Branch 0 was taken 2127 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 140 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1987 times"> + </span>]:<span class="tlaGNC"> 2127 : if (keyword == &quot;CM_&quot;) {</span></span>
<span id="L113"><span class="lineNum"> 113</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : line = rawLine;</span></span>
<span id="L114"><span class="lineNum"> 114</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : ReadCommentLines(input, line, lineNumber);</span></span>
<span id="L115"><span class="lineNum"> 115</span> : : }</span>
<span id="L116"><span class="lineNum"> 116</span> : : </span>
<span id="L117"><span class="lineNum"> 117</span> : : try {</span>
<span id="L118"><span class="lineNum"> 118</span> :<span class="tlaGNC"> 2127 : context.lineNumber = statementLine;</span></span>
<span id="L119"><span class="lineNum"> 119</span> [<span class="tlaGBC" title="Branch 0 was taken 1778 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 349 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 37 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1741 times"> + </span>]:<span class="tlaGNC"> 2127 : if (!dispatcher.Dispatch(line, context)) {</span></span>
<span id="L120"><span class="lineNum"> 120</span> :<span class="tlaGNC"> 37 : result.diagnostics.push_back({DbcDiagnosticSeverity::Warning,</span></span>
<span id="L121"><span class="lineNum"> 121</span> : : DbcDiagnosticCode::UnsupportedStatement,</span>
<span id="L122"><span class="lineNum"> 122</span> : : filePath, statementLine,</span>
<span id="L123"><span class="lineNum"> 123</span> :<span class="tlaGNC"> 37 : &quot;Unsupported statement '&quot; + keyword +</span></span>
<span id="L124"><span class="lineNum"> 124</span> : : &quot;' is ignored; decoding or metadata may be incomplete.&quot;});</span>
<span id="L125"><span class="lineNum"> 125</span> : : }</span>
<span id="L126"><span class="lineNum"> 126</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 349 times"> + </span>]:<span class="tlaGNC"> 349 : } catch (const std::exception &amp;error) {</span></span>
<span id="L127"><span class="lineNum"> 127</span> :<span class="tlaGNC"> 349 : result.diagnostics.push_back({DbcDiagnosticSeverity::Error,</span></span>
<span id="L128"><span class="lineNum"> 128</span> :<span class="tlaGNC"> 698 : StatementErrorCode(keyword), filePath,</span></span>
<span id="L129"><span class="lineNum"> 129</span> :<span class="tlaUNC"> 0 : statementLine, error.what()});</span></span>
<span id="L130"><span class="lineNum"> 130</span> :<span class="tlaGNC"> 349 : return result;</span></span>
<span id="L131"><span class="lineNum"> 131</span> :<span class="tlaGNC"> 349 : }</span></span>
<span id="L132"><span class="lineNum"> 132</span> [<span class="tlaGBC" title="Branch 0 was taken 1778 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 349 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1778 times"> + </span> :<span class="tlaGNC"> 3632 : }</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 349 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 1778 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 349 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1778 times"> + </span><span class="tlaGBC" title="Branch 10 was taken 371 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 349 times"> + </span>]
<span id="L133"><span class="lineNum"> 133</span> : : </span>
<span id="L134"><span class="lineNum"> 134</span> [<span class="tlaGBC" title="Branch 0 was taken 599 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 597 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span> :<span class="tlaGNC"> 599 : if (input.bad() || !input.eof()) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 597 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaGBC" title="Branch 7 was taken 597 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 597 times"> + </span>]
<span id="L135"><span class="lineNum"> 135</span> :<span class="tlaGNC"> 2 : result.diagnostics.push_back({DbcDiagnosticSeverity::Error,</span></span>
<span id="L136"><span class="lineNum"> 136</span> : : DbcDiagnosticCode::FileReadError, filePath, 0U,</span>
<span id="L137"><span class="lineNum"> 137</span> : : &quot;Failed to read DBC file: &quot; + filePath});</span>
<span id="L138"><span class="lineNum"> 138</span> :<span class="tlaGNC"> 2 : return result;</span></span>
<span id="L139"><span class="lineNum"> 139</span> : : }</span>
<span id="L140"><span class="lineNum"> 140</span> : : </span>
<span id="L141"><span class="lineNum"> 141</span> : : try {</span>
<span id="L142"><span class="lineNum"> 142</span> [<span class="tlaGBC" title="Branch 0 was taken 587 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 597 : context.ResolveComments(filePath);</span></span>
<span id="L143"><span class="lineNum"> 143</span> [<span class="tlaGBC" title="Branch 0 was taken 576 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 11 times"> + </span>]:<span class="tlaGNC"> 587 : context.ResolveValueDescriptions(filePath);</span></span>
<span id="L144"><span class="lineNum"> 144</span> [<span class="tlaGBC" title="Branch 0 was taken 549 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 27 times"> + </span>]:<span class="tlaGNC"> 576 : context.ValidateMultiplexing(filePath);</span></span>
<span id="L145"><span class="lineNum"> 145</span> [<span class="tlaGBC" title="Branch 0 was taken 163 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 386 times"> + </span>]:<span class="tlaGNC"> 549 : context.ResolveAttributes(filePath, result.diagnostics);</span></span>
<span id="L146"><span class="lineNum"> 146</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 434 times"> + </span>]:<span class="tlaGNC"> 434 : } catch (const DbcDiagnosticError &amp;error) {</span></span>
<span id="L147"><span class="lineNum"> 147</span> [<span class="tlaGBC" title="Branch 0 was taken 434 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 434 : result.diagnostics.push_back(error.diagnostic);</span></span>
<span id="L148"><span class="lineNum"> 148</span> :<span class="tlaGNC"> 434 : return result;</span></span>
<span id="L149"><span class="lineNum"> 149</span> [<span class="tlaGBC" title="Branch 0 was taken 434 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 434 : }</span></span>
<span id="L150"><span class="lineNum"> 150</span> :<span class="tlaGNC"> 163 : result.database = std::move(database);</span></span>
<span id="L151"><span class="lineNum"> 151</span> :<span class="tlaGNC"> 163 : return result;</span></span>
<span id="L152"><span class="lineNum"> 152</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1691 : }</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 37 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span><span class="tlaGBC" title="Branch 10 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 11 was not taken"> - </span><span class="tlaGBC" title="Branch 12 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 13 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 14 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 15 was not taken"> - </span><span class="tlaGBC" title="Branch 16 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 17 was not taken"> - </span><span class="tlaGBC" title="Branch 18 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 19 was not taken"> - </span><span class="tlaUNC" title="Branch 20 was not taken"> - </span><span class="tlaUNC" title="Branch 21 was not taken"> - </span><span class="tlaUNC" title="Branch 22 was not taken"> - </span><span class="tlaUNC" title="Branch 23 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 24 was taken 349 times"> + </span><span class="tlaUNC" title="Branch 25 was not taken"> - </span><span class="tlaGBC" title="Branch 26 was taken 349 times"> + </span><span class="tlaUNC" title="Branch 27 was not taken"> - </span><span class="tlaGBC" title="Branch 28 was taken 349 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 29 was not taken"> - </span><span class="tlaGBC" title="Branch 30 was taken 349 times"> + </span><span class="tlaUNC" title="Branch 31 was not taken"> - </span><span class="tlaUNC" title="Branch 32 was not taken"> - </span><span class="tlaUNC" title="Branch 33 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 34 was not taken"> - </span><span class="tlaUNC" title="Branch 35 was not taken"> - </span>]
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.h<span style="font-size: 80%;"> (<a href="dbc_parser.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_parser.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.h.gcov.html#L42">DbcParser::DbcParser(DbcParserOptions)</a></td>
<td class="coverFnHi">930</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.h<span style="font-size: 80%;"> (<a href="dbc_parser.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_parser.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_parser.h.gcov.html#L42">DbcParser::DbcParser(DbcParserOptions)</a></td>
<td class="coverFnHi">930</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,145 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_parser.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_parser.h<span style="font-size: 80%;"> (source / <a href="dbc_parser.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : * @file dbc_parser.h</span>
<span id="L3"><span class="lineNum"> 3</span> : * @brief DBC file parser and interpretation options.</span>
<span id="L4"><span class="lineNum"> 4</span> : *</span>
<span id="L5"><span class="lineNum"> 5</span> : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : *</span>
<span id="L8"><span class="lineNum"> 8</span> : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : */</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #ifndef DBC_PARSER_H</span>
<span id="L13"><span class="lineNum"> 13</span> : #define DBC_PARSER_H</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;string&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : #include &quot;dbc_diagnostic.h&quot;</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : /** Explicit interpretation applied to extended frames in this file. */</span>
<span id="L20"><span class="lineNum"> 20</span> : struct DbcParserOptions {</span>
<span id="L21"><span class="lineNum"> 21</span> : bool enableJ1939 = false; /**&lt; Derive J1939 PGNs from extended CAN IDs. */</span>
<span id="L22"><span class="lineNum"> 22</span> : };</span>
<span id="L23"><span class="lineNum"> 23</span> : </span>
<span id="L24"><span class="lineNum"> 24</span> : /**</span>
<span id="L25"><span class="lineNum"> 25</span> : * @brief Minimal DBC parser.</span>
<span id="L26"><span class="lineNum"> 26</span> : *</span>
<span id="L27"><span class="lineNum"> 27</span> : * Supports:</span>
<span id="L28"><span class="lineNum"> 28</span> : * - BO_</span>
<span id="L29"><span class="lineNum"> 29</span> : * - SG_</span>
<span id="L30"><span class="lineNum"> 30</span> : * - CM_ BO_</span>
<span id="L31"><span class="lineNum"> 31</span> : * - CM_ SG_</span>
<span id="L32"><span class="lineNum"> 32</span> : * - basic M / mN multiplexing</span>
<span id="L33"><span class="lineNum"> 33</span> : * - VAL_ signal value descriptions</span>
<span id="L34"><span class="lineNum"> 34</span> : * - BA_DEF_, BA_DEF_DEF_, BA_ typed attributes, frame format and cycle time</span>
<span id="L35"><span class="lineNum"> 35</span> : *</span>
<span id="L36"><span class="lineNum"> 36</span> : * Frame/signal comments support multiline quoted text and deferred references.</span>
<span id="L37"><span class="lineNum"> 37</span> : *</span>
<span id="L38"><span class="lineNum"> 38</span> : * Reports unsupported statements as warnings, except SG_MUL_VAL_ which is</span>
<span id="L39"><span class="lineNum"> 39</span> : * an error. VERSION, NS_, BS_, BU_ and NS_ symbol declarations stay quiet.</span>
<span id="L40"><span class="lineNum"> 40</span> : */</span>
<span id="L41"><span class="lineNum"> 41</span> : class DbcParser {</span>
<span id="L42"><span class="lineNum"> 42</span> : public:</span>
<span id="L43"><span class="lineNum"> 43</span> : /** @brief Create a parser with explicit extended-frame interpretation options. */</span>
<span id="L44"><span class="lineNum"> 44</span> <span class="tlaGNC"> 930 : explicit DbcParser(DbcParserOptions options = {}) : options(options) {}</span></span>
<span id="L45"><span class="lineNum"> 45</span> : </span>
<span id="L46"><span class="lineNum"> 46</span> : /**</span>
<span id="L47"><span class="lineNum"> 47</span> : * @brief Parse DBC file.</span>
<span id="L48"><span class="lineNum"> 48</span> : * @param filePath Path to input file.</span>
<span id="L49"><span class="lineNum"> 49</span> : * @return Parsed database.</span>
<span id="L50"><span class="lineNum"> 50</span> : * @throws std::runtime_error on file or parse errors.</span>
<span id="L51"><span class="lineNum"> 51</span> : * Line parse errors include the file path and one-based line number.</span>
<span id="L52"><span class="lineNum"> 52</span> : * Duplicate normalized CAN IDs of the same frame type and duplicate signal</span>
<span id="L53"><span class="lineNum"> 53</span> : * names within a frame are rejected at the repeated definition's line.</span>
<span id="L54"><span class="lineNum"> 54</span> : */</span>
<span id="L55"><span class="lineNum"> 55</span> : DbcDatabase ParseFile(const std::string &amp;filePath) const;</span>
<span id="L56"><span class="lineNum"> 56</span> : </span>
<span id="L57"><span class="lineNum"> 57</span> : /**</span>
<span id="L58"><span class="lineNum"> 58</span> : * @brief Parse with warnings and a structured first error instead of throwing.</span>
<span id="L59"><span class="lineNum"> 59</span> : * @return Valid database with diagnostics; empty database on error.</span>
<span id="L60"><span class="lineNum"> 60</span> : * File errors use line zero; statement errors use physical one-based lines.</span>
<span id="L61"><span class="lineNum"> 61</span> : * Warnings indicate ignored syntax and possible incomplete decoding.</span>
<span id="L62"><span class="lineNum"> 62</span> : */</span>
<span id="L63"><span class="lineNum"> 63</span> : DbcParseResult ParseFileWithDiagnostics(const std::string &amp;filePath) const;</span>
<span id="L64"><span class="lineNum"> 64</span> : </span>
<span id="L65"><span class="lineNum"> 65</span> : private:</span>
<span id="L66"><span class="lineNum"> 66</span> : DbcParserOptions options;</span>
<span id="L67"><span class="lineNum"> 67</span> : };</span>
<span id="L68"><span class="lineNum"> 68</span> : </span>
<span id="L69"><span class="lineNum"> 69</span> : #endif /* DBC_PARSER_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,333 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.cpp<span style="font-size: 80%;"> (<a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.5&nbsp;%</td>
<td class="headerCovTableEntry">370</td>
<td class="headerCovTableEntry">368</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">31</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">68.4&nbsp;%</td>
<td class="headerCovTableEntry">820</td>
<td class="headerCovTableEntry">561</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_statement_handler.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L449">DbcUnsupportedMultiplexingHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L497">(anonymous namespace)::SignalsOverlap(SignalInfo const&amp;, SignalInfo const&amp;)</a></td>
<td class="coverFnHi">57</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L464">(anonymous namespace)::AreMutuallyExclusive(SignalInfo const&amp;, SignalInfo const&amp;)</a></td>
<td class="coverFnHi">58</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L115">(anonymous namespace)::FindUniqueSignal(FrameInfo&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">62</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L386">DbcHeaderHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">62</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L101">(anonymous namespace)::FindUniqueFrame(DbcDatabase&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">67</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L400">DbcValueDescriptionHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">94</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L91">(anonymous namespace)::UnescapeDescription(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">96</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L71">(anonymous namespace)::ParseValueKey(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">104</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L454">(anonymous namespace)::SignalBits(SignalInfo const&amp;)</a></td>
<td class="coverFnHi">114</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L304">DbcCommentHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">149</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L470">(anonymous namespace)::ValidateBranch(SignalInfo const&amp;, SignalInfo const*)</a></td>
<td class="coverFnHi">193</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L480">(anonymous namespace)::FindSelector(FrameInfo const&amp;, std::vector&lt;unsigned long, std::allocator&lt;unsigned long&gt; &gt; const&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L141">(anonymous namespace)::SplitReceivers(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">317</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L266">(anonymous namespace)::FindSignalByName(FrameInfo&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">364</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L53">(anonymous namespace)::ParseMultiplexingMarker(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">496</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L204">DbcSignalHandler::ParseSignalLine(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">521</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L290">DbcSignalHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">526</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L510">DbcParseContext::ValidateMultiplexing(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">576</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L433">DbcParseContext::ResolveValueDescriptions(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">592</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L350">DbcParseContext::ResolveComments(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">597</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L276">DbcFrameHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">649</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L166">DbcFrameHandler::ParseFrameLine(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">649</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L255">(anonymous namespace)::FindFrameById(DbcDatabase&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">698</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L23">(anonymous namespace)::ParseCanId(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">784</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L155">(anonymous namespace)::NormalizeCanId(unsigned int, unsigned int&amp;, bool&amp;)</a></td>
<td class="coverFnHi">803</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L129">(anonymous namespace)::NextSignalBit(unsigned long, bool)</a></td>
<td class="coverFnHi">884</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L368">DbcStatementDispatcher::DbcStatementDispatcher()</a></td>
<td class="coverFnHi">949</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L32">(anonymous namespace)::ParsePhysicalValue(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, char const*)</a></td>
<td class="coverFnHi">1666</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L388">DbcStatementDispatcher::Dispatch(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">2132</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L12">(anonymous namespace)::ParseDecimal(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned int, char const*)</a></td>
<td class="coverFnHi">2466</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,333 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.cpp<span style="font-size: 80%;"> (<a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.5&nbsp;%</td>
<td class="headerCovTableEntry">370</td>
<td class="headerCovTableEntry">368</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">31</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">68.4&nbsp;%</td>
<td class="headerCovTableEntry">820</td>
<td class="headerCovTableEntry">561</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_statement_handler.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L464">(anonymous namespace)::AreMutuallyExclusive(SignalInfo const&amp;, SignalInfo const&amp;)</a></td>
<td class="coverFnHi">58</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L255">(anonymous namespace)::FindFrameById(DbcDatabase&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">698</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L480">(anonymous namespace)::FindSelector(FrameInfo const&amp;, std::vector&lt;unsigned long, std::allocator&lt;unsigned long&gt; &gt; const&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L266">(anonymous namespace)::FindSignalByName(FrameInfo&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">364</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L101">(anonymous namespace)::FindUniqueFrame(DbcDatabase&amp;, unsigned int, bool)</a></td>
<td class="coverFnHi">67</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L115">(anonymous namespace)::FindUniqueSignal(FrameInfo&amp;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">62</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L129">(anonymous namespace)::NextSignalBit(unsigned long, bool)</a></td>
<td class="coverFnHi">884</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L155">(anonymous namespace)::NormalizeCanId(unsigned int, unsigned int&amp;, bool&amp;)</a></td>
<td class="coverFnHi">803</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L23">(anonymous namespace)::ParseCanId(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">784</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L12">(anonymous namespace)::ParseDecimal(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned int, char const*)</a></td>
<td class="coverFnHi">2466</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L53">(anonymous namespace)::ParseMultiplexingMarker(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">496</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L32">(anonymous namespace)::ParsePhysicalValue(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, char const*)</a></td>
<td class="coverFnHi">1666</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L71">(anonymous namespace)::ParseValueKey(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">104</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L454">(anonymous namespace)::SignalBits(SignalInfo const&amp;)</a></td>
<td class="coverFnHi">114</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L497">(anonymous namespace)::SignalsOverlap(SignalInfo const&amp;, SignalInfo const&amp;)</a></td>
<td class="coverFnHi">57</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L141">(anonymous namespace)::SplitReceivers(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">317</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L91">(anonymous namespace)::UnescapeDescription(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">96</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L470">(anonymous namespace)::ValidateBranch(SignalInfo const&amp;, SignalInfo const*)</a></td>
<td class="coverFnHi">193</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L304">DbcCommentHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">149</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L276">DbcFrameHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">649</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L166">DbcFrameHandler::ParseFrameLine(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">649</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L386">DbcHeaderHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">62</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L350">DbcParseContext::ResolveComments(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">597</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L433">DbcParseContext::ResolveValueDescriptions(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">592</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L510">DbcParseContext::ValidateMultiplexing(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">576</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L290">DbcSignalHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">526</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L204">DbcSignalHandler::ParseSignalLine(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">521</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L368">DbcStatementDispatcher::DbcStatementDispatcher()</a></td>
<td class="coverFnHi">949</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L388">DbcStatementDispatcher::Dispatch(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">2132</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L449">DbcUnsupportedMultiplexingHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.cpp.gcov.html#L400">DbcValueDescriptionHandler::Handle(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, DbcParseContext&amp;) const</a></td>
<td class="coverFnHi">94</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,676 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.cpp<span style="font-size: 80%;"> (source / <a href="dbc_statement_handler.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.5&nbsp;%</td>
<td class="headerCovTableEntry">370</td>
<td class="headerCovTableEntry">368</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">31</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">68.4&nbsp;%</td>
<td class="headerCovTableEntry">820</td>
<td class="headerCovTableEntry">561</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #include &quot;dbc_statement_handler.h&quot;</span>
<span id="L3"><span class="lineNum"> 3</span> : : #include &quot;j1939.h&quot;</span>
<span id="L4"><span class="lineNum"> 4</span> : : #include &quot;text_utils.h&quot;</span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &quot;signal_layout.h&quot;</span>
<span id="L6"><span class="lineNum"> 6</span> : : #include &lt;charconv&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : : #include &lt;cmath&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : : #include &lt;limits&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : : #include &lt;regex&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : : #include &lt;sstream&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : : #include &lt;stdexcept&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : : </span>
<span id="L13"><span class="lineNum"> 13</span> : : namespace {</span>
<span id="L14"><span class="lineNum"> 14</span> :<span class="tlaGNC"> 2466 : std::uint32_t ParseDecimal(const std::string &amp;text,</span></span>
<span id="L15"><span class="lineNum"> 15</span> : : std::uint32_t maximum,</span>
<span id="L16"><span class="lineNum"> 16</span> : : const char *field) {</span>
<span id="L17"><span class="lineNum"> 17</span> :<span class="tlaGNC"> 2466 : std::uint32_t value = 0U;</span></span>
<span id="L18"><span class="lineNum"> 18</span> [<span class="tlaGBC" title="Branch 0 was taken 2466 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2466 : const std::from_chars_result parsed = std::from_chars(text.data(), text.data() + text.size(), value);</span></span>
<span id="L19"><span class="lineNum"> 19</span> [<span class="tlaGBC" title="Branch 0 was taken 2429 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 37 times"> + </span>]:<span class="tlaGNC"> 4932 : if (text.empty() || parsed.ec != std::errc() ||</span></span>
<span id="L20"><span class="lineNum"> 20</span> [<span class="tlaGBC" title="Branch 0 was taken 2466 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2410 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span> :<span class="tlaGNC"> 4932 : parsed.ptr != text.data() + text.size() || value &gt; maximum)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2408 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 58 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2408 times"> + </span>]
<span id="L21"><span class="lineNum"> 21</span> [<span class="tlaGBC" title="Branch 0 was taken 58 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 58 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 174 : throw std::runtime_error(std::string(&quot;Invalid &quot;) + field + &quot;: &quot; + text);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 58 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 58 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 58 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L22"><span class="lineNum"> 22</span> :<span class="tlaGNC"> 2408 : return value;</span></span>
<span id="L23"><span class="lineNum"> 23</span> : : }</span>
<span id="L24"><span class="lineNum"> 24</span> : : </span>
<span id="L25"><span class="lineNum"> 25</span> :<span class="tlaGNC"> 784 : std::uint32_t ParseCanId(const std::string &amp;text) {</span></span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 784 : const std::uint32_t rawId = ParseDecimal(</span></span>
<span id="L27"><span class="lineNum"> 27</span> : : text, std::numeric_limits&lt;std::uint32_t&gt;::max(), &quot;CAN ID&quot;);</span>
<span id="L28"><span class="lineNum"> 28</span> : : // Only bit 31 may accompany the actual 29-bit identifier.</span>
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 20 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 730 times"> + </span>]:<span class="tlaGNC"> 750 : if ((rawId &amp; 0x60000000U) != 0U)</span></span>
<span id="L30"><span class="lineNum"> 30</span> [<span class="tlaGBC" title="Branch 0 was taken 20 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 20 : throw std::runtime_error(&quot;CAN ID exceeds the 29-bit identifier range.&quot;);</span></span>
<span id="L31"><span class="lineNum"> 31</span> :<span class="tlaGNC"> 730 : return rawId;</span></span>
<span id="L32"><span class="lineNum"> 32</span> : : }</span>
<span id="L33"><span class="lineNum"> 33</span> : : </span>
<span id="L34"><span class="lineNum"> 34</span> :<span class="tlaGNC"> 1666 : double ParsePhysicalValue(const std::string &amp;text, const char *field) {</span></span>
<span id="L35"><span class="lineNum"> 35</span> : : static const std::regex number(</span>
<span id="L36"><span class="lineNum"> 36</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1664 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1666 : R&quot;(^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$)&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
<span id="L37"><span class="lineNum"> 37</span> [<span class="tlaGBC" title="Branch 0 was taken 1666 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 112 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1554 times"> + </span>]:<span class="tlaGNC"> 1666 : if (!std::regex_match(text, number))</span></span>
<span id="L38"><span class="lineNum"> 38</span> [<span class="tlaGBC" title="Branch 0 was taken 112 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 112 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 336 : throw std::runtime_error(std::string(&quot;Invalid &quot;) + field + &quot;: &quot; + text);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 112 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 112 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 112 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L39"><span class="lineNum"> 39</span> : : // Floating-point from_chars is locale-independent and does not accept</span>
<span id="L40"><span class="lineNum"> 40</span> : : // a leading '+', which the DBC numeric grammar permits.</span>
<span id="L41"><span class="lineNum"> 41</span> :<span class="tlaGNC"> 1554 : const char *begin = text.data();</span></span>
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 1554 : const char *end = begin + text.size();</span></span>
<span id="L43"><span class="lineNum"> 43</span> [<span class="tlaGBC" title="Branch 0 was taken 18 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1536 times"> + </span>]:<span class="tlaGNC"> 1554 : if (*begin == '+')</span></span>
<span id="L44"><span class="lineNum"> 44</span> :<span class="tlaGNC"> 18 : ++begin;</span></span>
<span id="L45"><span class="lineNum"> 45</span> :<span class="tlaGNC"> 1554 : double value = 0.0;</span></span>
<span id="L46"><span class="lineNum"> 46</span> : : const std::from_chars_result parsed =</span>
<span id="L47"><span class="lineNum"> 47</span> :<span class="tlaGNC"> 1554 : std::from_chars(begin, end, value, std::chars_format::general);</span></span>
<span id="L48"><span class="lineNum"> 48</span> : : // Keep the existing rejection of conversion underflow into subnormal values.</span>
<span id="L49"><span class="lineNum"> 49</span> [<span class="tlaGBC" title="Branch 0 was taken 1530 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 1530 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 3084 : if (parsed.ec != std::errc() || parsed.ptr != end || !std::isfinite(value) ||</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1530 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 1514 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 40 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1514 times"> + </span>]
<span id="L50"><span class="lineNum"> 50</span> :<span class="tlaGNC"> 1530 : std::fpclassify(value) == FP_SUBNORMAL)</span></span>
<span id="L51"><span class="lineNum"> 51</span> [<span class="tlaGBC" title="Branch 0 was taken 40 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 40 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 120 : throw std::runtime_error(std::string(&quot;Invalid &quot;) + field + &quot;: &quot; + text);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 40 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 40 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 40 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L52"><span class="lineNum"> 52</span> :<span class="tlaGNC"> 1514 : return value;</span></span>
<span id="L53"><span class="lineNum"> 53</span> : : }</span>
<span id="L54"><span class="lineNum"> 54</span> : : </span>
<span id="L55"><span class="lineNum"> 55</span> :<span class="tlaGNC"> 496 : Multiplexing ParseMultiplexingMarker(const std::string &amp;marker) {</span></span>
<span id="L56"><span class="lineNum"> 56</span> :<span class="tlaGNC"> 496 : Multiplexing result;</span></span>
<span id="L57"><span class="lineNum"> 57</span> [<span class="tlaGBC" title="Branch 0 was taken 496 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 34 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 462 times"> + </span>]:<span class="tlaGNC"> 496 : if (marker == &quot;M&quot;)</span></span>
<span id="L58"><span class="lineNum"> 58</span> :<span class="tlaGNC"> 34 : result.role = MultiplexRole::Selector;</span></span>
<span id="L59"><span class="lineNum"> 59</span> [<span class="tlaGBC" title="Branch 0 was taken 38 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 424 times"> + </span>]:<span class="tlaGNC"> 462 : else if (!marker.empty()) {</span></span>
<span id="L60"><span class="lineNum"> 60</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 37 times"> + </span>]:<span class="tlaGNC"> 38 : if (marker[0] != 'm')</span></span>
<span id="L61"><span class="lineNum"> 61</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Unsupported multiplexing marker.&quot;);</span></span>
<span id="L62"><span class="lineNum"> 62</span> [<span class="tlaGBC" title="Branch 0 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 37 : const std::string value = marker.substr(1U);</span></span>
<span id="L63"><span class="lineNum"> 63</span> : : const std::from_chars_result parsed =</span>
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 37 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 37 : std::from_chars(value.data(), value.data() + value.size(), result.value);</span></span>
<span id="L65"><span class="lineNum"> 65</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 33 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 3 times"> + </span> :<span class="tlaGNC"> 37 : if (value.empty() || parsed.ec != std::errc() || parsed.ptr != value.data() + value.size())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 30 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 30 times"> + </span>]
<span id="L66"><span class="lineNum"> 66</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7 : throw std::runtime_error(&quot;Invalid or unsupported multiplexing marker.&quot;);</span></span>
<span id="L67"><span class="lineNum"> 67</span> :<span class="tlaGNC"> 30 : result.role = MultiplexRole::Branch;</span></span>
<span id="L68"><span class="lineNum"> 68</span> :<span class="tlaGNC"> 37 : }</span></span>
<span id="L69"><span class="lineNum"> 69</span> : : </span>
<span id="L70"><span class="lineNum"> 70</span> :<span class="tlaGNC"> 488 : return result;</span></span>
<span id="L71"><span class="lineNum"> 71</span> : : }</span>
<span id="L72"><span class="lineNum"> 72</span> : : </span>
<span id="L73"><span class="lineNum"> 73</span> :<span class="tlaGNC"> 104 : RawSignalValue ParseValueKey(const std::string &amp;number) {</span></span>
<span id="L74"><span class="lineNum"> 74</span> :<span class="tlaGNC"> 104 : RawSignalValue key;</span></span>
<span id="L75"><span class="lineNum"> 75</span> [<span class="tlaGBC" title="Branch 0 was taken 104 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 88 times"> + </span> :<span class="tlaGNC"> 104 : if (!number.empty() &amp;&amp; number[0] == '-') {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 88 times"> + </span>]
<span id="L76"><span class="lineNum"> 76</span> :<span class="tlaGNC"> 16 : std::int64_t value = 0;</span></span>
<span id="L77"><span class="lineNum"> 77</span> : : const std::from_chars_result parsed =</span>
<span id="L78"><span class="lineNum"> 78</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 16 : std::from_chars(number.data(), number.data() + number.size(), value);</span></span>
<span id="L79"><span class="lineNum"> 79</span> [<span class="tlaGBC" title="Branch 0 was taken 14 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 2 was not taken"> - </span><span class="tlaGBC" title="Branch 3 was taken 14 times"> + </span> :<span class="tlaGNC"> 16 : if (parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 14 times"> + </span>]
<span id="L80"><span class="lineNum"> 80</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Invalid VAL_ integer: &quot; + number);</span></span>
<span id="L81"><span class="lineNum"> 81</span> :<span class="tlaGNC"> 14 : key = NormalizeValueKey(RawSignalValue(value));</span></span>
<span id="L82"><span class="lineNum"> 82</span> : : } else {</span>
<span id="L83"><span class="lineNum"> 83</span> :<span class="tlaGNC"> 88 : std::uint64_t value = 0;</span></span>
<span id="L84"><span class="lineNum"> 84</span> : : const std::from_chars_result parsed =</span>
<span id="L85"><span class="lineNum"> 85</span> [<span class="tlaGBC" title="Branch 0 was taken 88 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 88 : std::from_chars(number.data(), number.data() + number.size(), value);</span></span>
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaGBC" title="Branch 0 was taken 88 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 86 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span> :<span class="tlaGNC"> 88 : if (number.empty() || parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 82 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 82 times"> + </span>]
<span id="L87"><span class="lineNum"> 87</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6 : throw std::runtime_error(&quot;Invalid VAL_ integer: &quot; + number);</span></span>
<span id="L88"><span class="lineNum"> 88</span> :<span class="tlaGNC"> 82 : key = value;</span></span>
<span id="L89"><span class="lineNum"> 89</span> : : }</span>
<span id="L90"><span class="lineNum"> 90</span> :<span class="tlaGNC"> 96 : return key;</span></span>
<span id="L91"><span class="lineNum"> 91</span> : : }</span>
<span id="L92"><span class="lineNum"> 92</span> : : </span>
<span id="L93"><span class="lineNum"> 93</span> :<span class="tlaGNC"> 96 : std::string UnescapeDescription(const std::string &amp;quoted) {</span></span>
<span id="L94"><span class="lineNum"> 94</span> :<span class="tlaGNC"> 96 : std::string description;</span></span>
<span id="L95"><span class="lineNum"> 95</span> [<span class="tlaGBC" title="Branch 0 was taken 628 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 96 times"> + </span>]:<span class="tlaGNC"> 724 : for (std::size_t i = 0; i &lt; quoted.size(); ++i) {</span></span>
<span id="L96"><span class="lineNum"> 96</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 621 times"> + </span>]:<span class="tlaGNC"> 628 : if (quoted[i] == '\\')</span></span>
<span id="L97"><span class="lineNum"> 97</span> :<span class="tlaGNC"> 7 : ++i;</span></span>
<span id="L98"><span class="lineNum"> 98</span> [<span class="tlaGBC" title="Branch 0 was taken 628 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 628 : description += quoted[i];</span></span>
<span id="L99"><span class="lineNum"> 99</span> : : }</span>
<span id="L100"><span class="lineNum"> 100</span> :<span class="tlaGNC"> 96 : return description;</span></span>
<span id="L101"><span class="lineNum"> 101</span> :<span class="tlaUNC"> 0 : }</span></span>
<span id="L102"><span class="lineNum"> 102</span> : : </span>
<span id="L103"><span class="lineNum"> 103</span> :<span class="tlaGNC"> 67 : FrameInfo *FindUniqueFrame(DbcDatabase &amp;database, std::uint32_t canId, bool isExtended) {</span></span>
<span id="L104"><span class="lineNum"> 104</span> :<span class="tlaGNC"> 67 : FrameInfo *frame = nullptr;</span></span>
<span id="L105"><span class="lineNum"> 105</span> [<span class="tlaGBC" title="Branch 0 was taken 113 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 65 times"> + </span>]:<span class="tlaGNC"> 178 : for (FrameInfo &amp;candidate : database.frames) {</span></span>
<span id="L106"><span class="lineNum"> 106</span> [<span class="tlaGBC" title="Branch 0 was taken 84 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 66 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 18 times"> + </span>]:<span class="tlaGNC"> 113 : if (candidate.canId == canId &amp;&amp; candidate.isExtended == isExtended) {</span></span>
<span id="L107"><span class="lineNum"> 107</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 64 times"> + </span>]:<span class="tlaGNC"> 66 : if (frame)</span></span>
<span id="L108"><span class="lineNum"> 108</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Ambiguous VAL_ frame reference.&quot;);</span></span>
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 64 : frame = &amp;candidate;</span></span>
<span id="L110"><span class="lineNum"> 110</span> : : }</span>
<span id="L111"><span class="lineNum"> 111</span> : : }</span>
<span id="L112"><span class="lineNum"> 112</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 62 times"> + </span>]:<span class="tlaGNC"> 65 : if (!frame)</span></span>
<span id="L113"><span class="lineNum"> 113</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::runtime_error(&quot;Unresolved VAL_ frame reference.&quot;);</span></span>
<span id="L114"><span class="lineNum"> 114</span> :<span class="tlaGNC"> 62 : return frame;</span></span>
<span id="L115"><span class="lineNum"> 115</span> : : }</span>
<span id="L116"><span class="lineNum"> 116</span> : : </span>
<span id="L117"><span class="lineNum"> 117</span> :<span class="tlaGNC"> 62 : SignalInfo *FindUniqueSignal(FrameInfo &amp;frame, const std::string &amp;signalName) {</span></span>
<span id="L118"><span class="lineNum"> 118</span> :<span class="tlaGNC"> 62 : SignalInfo *signal = nullptr;</span></span>
<span id="L119"><span class="lineNum"> 119</span> [<span class="tlaGBC" title="Branch 0 was taken 89 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 60 times"> + </span>]:<span class="tlaGNC"> 149 : for (SignalInfo &amp;candidate : frame.signals) {</span></span>
<span id="L120"><span class="lineNum"> 120</span> [<span class="tlaGBC" title="Branch 0 was taken 59 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 30 times"> + </span>]:<span class="tlaGNC"> 89 : if (candidate.name == signalName) {</span></span>
<span id="L121"><span class="lineNum"> 121</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 57 times"> + </span>]:<span class="tlaGNC"> 59 : if (signal)</span></span>
<span id="L122"><span class="lineNum"> 122</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Ambiguous VAL_ signal reference: &quot; + signalName);</span></span>
<span id="L123"><span class="lineNum"> 123</span> :<span class="tlaGNC"> 57 : signal = &amp;candidate;</span></span>
<span id="L124"><span class="lineNum"> 124</span> : : }</span>
<span id="L125"><span class="lineNum"> 125</span> : : }</span>
<span id="L126"><span class="lineNum"> 126</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 55 times"> + </span>]:<span class="tlaGNC"> 60 : if (!signal)</span></span>
<span id="L127"><span class="lineNum"> 127</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 5 : throw std::runtime_error(&quot;Unresolved VAL_ signal reference: &quot; + signalName);</span></span>
<span id="L128"><span class="lineNum"> 128</span> :<span class="tlaGNC"> 55 : return signal;</span></span>
<span id="L129"><span class="lineNum"> 129</span> : : }</span>
<span id="L130"><span class="lineNum"> 130</span> : : </span>
<span id="L131"><span class="lineNum"> 131</span> :<span class="tlaGNC"> 884 : std::uint64_t NextSignalBit(std::uint64_t bit, bool isLittleEndian) {</span></span>
<span id="L132"><span class="lineNum"> 132</span> [<span class="tlaGBC" title="Branch 0 was taken 724 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 160 times"> + </span>]:<span class="tlaGNC"> 884 : if (isLittleEndian)</span></span>
<span id="L133"><span class="lineNum"> 133</span> :<span class="tlaGNC"> 724 : return bit + 1U;</span></span>
<span id="L134"><span class="lineNum"> 134</span> : : // From bit 0, Motorola continues at bit 7 of the next byte (0 -&gt; 15).</span>
<span id="L135"><span class="lineNum"> 135</span> [<span class="tlaGBC" title="Branch 0 was taken 20 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 140 times"> + </span>]:<span class="tlaGNC"> 160 : return bit % 8U == 0U ? bit + 15U : bit - 1U;</span></span>
<span id="L136"><span class="lineNum"> 136</span> : : }</span>
<span id="L137"><span class="lineNum"> 137</span> : : </span>
<span id="L138"><span class="lineNum"> 138</span> : : FrameInfo *FindFrameById(DbcDatabase &amp;, std::uint32_t, bool);</span>
<span id="L139"><span class="lineNum"> 139</span> : : SignalInfo *FindSignalByName(FrameInfo &amp;, const std::string &amp;);</span>
<span id="L140"><span class="lineNum"> 140</span> : : } // namespace</span>
<span id="L141"><span class="lineNum"> 141</span> : : </span>
<span id="L142"><span class="lineNum"> 142</span> : : namespace {</span>
<span id="L143"><span class="lineNum"> 143</span> :<span class="tlaGNC"> 317 : std::vector&lt;std::string&gt; SplitReceivers(const std::string &amp;text) {</span></span>
<span id="L144"><span class="lineNum"> 144</span> :<span class="tlaGNC"> 317 : std::vector&lt;std::string&gt; receivers;</span></span>
<span id="L145"><span class="lineNum"> 145</span> :<span class="tlaGNC"> 317 : std::string token;</span></span>
<span id="L146"><span class="lineNum"> 146</span> [<span class="tlaGBC" title="Branch 0 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 317 : std::istringstream stream(text);</span></span>
<span id="L147"><span class="lineNum"> 147</span> : : </span>
<span id="L148"><span class="lineNum"> 148</span> [<span class="tlaGBC" title="Branch 0 was taken 639 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 639 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 956 : while (std::getline(stream, token, ',')) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 322 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 317 times"> + </span>]
<span id="L149"><span class="lineNum"> 149</span> [<span class="tlaGBC" title="Branch 0 was taken 322 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 322 : token = dbc_detail::TrimText(token);</span></span>
<span id="L150"><span class="lineNum"> 150</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 322 times"> + </span>]:<span class="tlaGNC"> 322 : if (!token.empty())</span></span>
<span id="L151"><span class="lineNum"> 151</span> [<span class="tlaGBC" title="Branch 0 was taken 322 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 322 : receivers.push_back(token);</span></span>
<span id="L152"><span class="lineNum"> 152</span> : : }</span>
<span id="L153"><span class="lineNum"> 153</span> : : </span>
<span id="L154"><span class="lineNum"> 154</span> :<span class="tlaGNC"> 317 : return receivers;</span></span>
<span id="L155"><span class="lineNum"> 155</span> :<span class="tlaGNC"> 317 : }</span></span>
<span id="L156"><span class="lineNum"> 156</span> : : </span>
<span id="L157"><span class="lineNum"> 157</span> :<span class="tlaGNC"> 803 : void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &amp;normalizedCanId, bool &amp;isExtended) {</span></span>
<span id="L158"><span class="lineNum"> 158</span> : : /*</span>
<span id="L159"><span class="lineNum"> 159</span> : : * DBC commonly stores extended identifiers with bit 31 set.</span>
<span id="L160"><span class="lineNum"> 160</span> : : * Example:</span>
<span id="L161"><span class="lineNum"> 161</span> : : * raw id = 0x80000000 | actual_29_bit_id</span>
<span id="L162"><span class="lineNum"> 162</span> : : */</span>
<span id="L163"><span class="lineNum"> 163</span> [<span class="tlaGBC" title="Branch 0 was taken 724 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 79 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 701 times"> + </span>]:<span class="tlaGNC"> 803 : isExtended = (rawCanId &amp; 0x80000000U) != 0U || rawCanId &gt; 0x7FFU;</span></span>
<span id="L164"><span class="lineNum"> 164</span> :<span class="tlaGNC"> 803 : normalizedCanId = rawCanId &amp; 0x1FFFFFFFU;</span></span>
<span id="L165"><span class="lineNum"> 165</span> :<span class="tlaGNC"> 803 : }</span></span>
<span id="L166"><span class="lineNum"> 166</span> : : } // namespace</span>
<span id="L167"><span class="lineNum"> 167</span> : : </span>
<span id="L168"><span class="lineNum"> 168</span> :<span class="tlaGNC"> 649 : FrameInfo DbcFrameHandler::ParseFrameLine(const std::string &amp;line) {</span></span>
<span id="L169"><span class="lineNum"> 169</span> : : /*</span>
<span id="L170"><span class="lineNum"> 170</span> : : * Example:</span>
<span id="L171"><span class="lineNum"> 171</span> : : * BO_ 256 EngineData: 8 EEC1</span>
<span id="L172"><span class="lineNum"> 172</span> : : */</span>
<span id="L173"><span class="lineNum"> 173</span> : : </span>
<span id="L174"><span class="lineNum"> 174</span> [<span class="tlaGBC" title="Branch 0 was taken 649 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 649 : std::istringstream stream(line);</span></span>
<span id="L175"><span class="lineNum"> 175</span> :<span class="tlaGNC"> 649 : std::string keyword;</span></span>
<span id="L176"><span class="lineNum"> 176</span> :<span class="tlaGNC"> 649 : std::string idText;</span></span>
<span id="L177"><span class="lineNum"> 177</span> [<span class="tlaGBC" title="Branch 0 was taken 649 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 649 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 649 : if (!(stream &gt;&gt; keyword &gt;&gt; idText) || keyword != &quot;BO_&quot;)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 649 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 646 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 646 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span><span class="tlaUNC" title="Branch 10 was not taken"> - </span><span class="tlaGBC" title="Branch 11 was taken 646 times"> + </span><span class="tlaGBC" title="Branch 12 was taken 3 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 13 was taken 646 times"> + </span>]
<span id="L178"><span class="lineNum"> 178</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::runtime_error(&quot;Missing CAN ID in frame definition.&quot;);</span></span>
<span id="L179"><span class="lineNum"> 179</span> : : </span>
<span id="L180"><span class="lineNum"> 180</span> [<span class="tlaGBC" title="Branch 0 was taken 628 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 18 times"> + </span>]:<span class="tlaGNC"> 646 : const std::uint32_t rawCanId = ParseCanId(idText);</span></span>
<span id="L181"><span class="lineNum"> 181</span> : : </span>
<span id="L182"><span class="lineNum"> 182</span> :<span class="tlaGNC"> 628 : std::string nameText;</span></span>
<span id="L183"><span class="lineNum"> 183</span> [<span class="tlaGBC" title="Branch 0 was taken 628 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 628 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 628 : if (!std::getline(stream, nameText, ':') || stream.eof())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 627 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 6 was taken 627 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 1 time"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 626 times"> + </span><span class="tlaGBC" title="Branch 10 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 626 times"> + </span>]
<span id="L184"><span class="lineNum"> 184</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing ':' in frame definition.&quot;);</span></span>
<span id="L185"><span class="lineNum"> 185</span> [<span class="tlaGBC" title="Branch 0 was taken 626 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 626 : std::istringstream nameStream(nameText);</span></span>
<span id="L186"><span class="lineNum"> 186</span> :<span class="tlaGNC"> 626 : FrameInfo frame;</span></span>
<span id="L187"><span class="lineNum"> 187</span> :<span class="tlaGNC"> 626 : std::string extra;</span></span>
<span id="L188"><span class="lineNum"> 188</span> [<span class="tlaGBC" title="Branch 0 was taken 626 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 626 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 626 : if (!(nameStream &gt;&gt; frame.name) || (nameStream &gt;&gt; extra))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 625 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 6 was taken 625 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 625 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span><span class="tlaGBC" title="Branch 10 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 11 was taken 624 times"> + </span><span class="tlaGBC" title="Branch 12 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 13 was taken 624 times"> + </span>]
<span id="L189"><span class="lineNum"> 189</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing or invalid frame name.&quot;);</span></span>
<span id="L190"><span class="lineNum"> 190</span> : : </span>
<span id="L191"><span class="lineNum"> 191</span> :<span class="tlaGNC"> 624 : std::string lengthText;</span></span>
<span id="L192"><span class="lineNum"> 192</span> [<span class="tlaGBC" title="Branch 0 was taken 624 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 624 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 624 : if (!(stream &gt;&gt; lengthText))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 5 was taken 623 times"> + </span>]
<span id="L193"><span class="lineNum"> 193</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Missing payload length in frame definition.&quot;);</span></span>
<span id="L194"><span class="lineNum"> 194</span> [<span class="tlaGBC" title="Branch 0 was taken 617 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6 times"> + </span>]:<span class="tlaGNC"> 623 : frame.dlc = static_cast&lt;std::uint8_t&gt;(ParseDecimal(</span></span>
<span id="L195"><span class="lineNum"> 195</span> :<span class="tlaGNC"> 623 : lengthText, std::numeric_limits&lt;std::uint8_t&gt;::max(), &quot;payload length&quot;));</span></span>
<span id="L196"><span class="lineNum"> 196</span> [<span class="tlaGBC" title="Branch 0 was taken 617 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 617 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 617 : if (!(stream &gt;&gt; frame.transmitter))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 5 was taken 616 times"> + </span>]
<span id="L197"><span class="lineNum"> 197</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Missing transmitter in frame definition.&quot;);</span></span>
<span id="L198"><span class="lineNum"> 198</span> [<span class="tlaGBC" title="Branch 0 was taken 616 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 616 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 616 : if (stream &gt;&gt; extra)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 5 was taken 615 times"> + </span>]
<span id="L199"><span class="lineNum"> 199</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Unexpected trailing field in frame definition: &quot; + extra);</span></span>
<span id="L200"><span class="lineNum"> 200</span> : : </span>
<span id="L201"><span class="lineNum"> 201</span> :<span class="tlaGNC"> 615 : NormalizeCanId(rawCanId, frame.canId, frame.isExtended);</span></span>
<span id="L202"><span class="lineNum"> 202</span> : : </span>
<span id="L203"><span class="lineNum"> 203</span> :<span class="tlaGNC"> 615 : return frame;</span></span>
<span id="L204"><span class="lineNum"> 204</span> :<span class="tlaGNC"> 772 : }</span></span>
<span id="L205"><span class="lineNum"> 205</span> : : </span>
<span id="L206"><span class="lineNum"> 206</span> :<span class="tlaGNC"> 521 : SignalInfo DbcSignalHandler::ParseSignalLine(const std::string &amp;line) {</span></span>
<span id="L207"><span class="lineNum"> 207</span> : : // Match the complete statement before converting any numeric fields.</span>
<span id="L208"><span class="lineNum"> 208</span> : : enum Field {</span>
<span id="L209"><span class="lineNum"> 209</span> : : NameAndMarker = 1, StartBit, BitLength, ByteOrder, Signedness,</span>
<span id="L210"><span class="lineNum"> 210</span> : : Factor, Offset, Minimum, Maximum, Unit, Receivers</span>
<span id="L211"><span class="lineNum"> 211</span> : : };</span>
<span id="L212"><span class="lineNum"> 212</span> : : static const std::regex syntax(</span>
<span id="L213"><span class="lineNum"> 213</span> : : // Name and optional multiplexing marker.</span>
<span id="L214"><span class="lineNum"> 214</span> : : R&quot;dbc(^SG_[ \t]+([^:]+):[ \t]*)dbc&quot;</span>
<span id="L215"><span class="lineNum"> 215</span> : : // Bit position, length, byte order and signedness.</span>
<span id="L216"><span class="lineNum"> 216</span> : : R&quot;dbc(([^| \t]+)[ \t]*\|[ \t]*([^@ \t]+)[ \t]*@[ \t]*([01])([+-])[ \t]*)dbc&quot;</span>
<span id="L217"><span class="lineNum"> 217</span> : : // Scaling factor and offset.</span>
<span id="L218"><span class="lineNum"> 218</span> : : R&quot;dbc(\([ \t]*([^, \t]+)[ \t]*,[ \t]*([^ )\t]+)[ \t]*\)[ \t]*)dbc&quot;</span>
<span id="L219"><span class="lineNum"> 219</span> : : // Physical range.</span>
<span id="L220"><span class="lineNum"> 220</span> : : R&quot;dbc(\[[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^\] \t]+)[ \t]*\][ \t]*)dbc&quot;</span>
<span id="L221"><span class="lineNum"> 221</span> : : // Unit and receivers.</span>
<span id="L222"><span class="lineNum"> 222</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 519 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 521 : R&quot;dbc(&quot;([^&quot;\r\n]*)&quot;[ \t]+([^ \t,]+(?:[ \t]*,[ \t]*[^ \t,]+)*)[ \t]*$)dbc&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
<span id="L223"><span class="lineNum"> 223</span> :<span class="tlaGNC"> 521 : std::smatch fields;</span></span>
<span id="L224"><span class="lineNum"> 224</span> [<span class="tlaGBC" title="Branch 0 was taken 521 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 498 times"> + </span>]:<span class="tlaGNC"> 521 : if (!std::regex_match(line, fields, syntax))</span></span>
<span id="L225"><span class="lineNum"> 225</span> [<span class="tlaGBC" title="Branch 0 was taken 23 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 23 : throw std::runtime_error(&quot;Malformed or unsupported SG_ signal definition.&quot;);</span></span>
<span id="L226"><span class="lineNum"> 226</span> : : </span>
<span id="L227"><span class="lineNum"> 227</span> :<span class="tlaGNC"> 498 : SignalInfo signal;</span></span>
<span id="L228"><span class="lineNum"> 228</span> [<span class="tlaGBC" title="Branch 0 was taken 498 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 498 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 498 : std::istringstream nameFields(fields[NameAndMarker].str());</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 498 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L229"><span class="lineNum"> 229</span> :<span class="tlaGNC"> 498 : std::string marker;</span></span>
<span id="L230"><span class="lineNum"> 230</span> :<span class="tlaGNC"> 498 : std::string extra;</span></span>
<span id="L231"><span class="lineNum"> 231</span> [<span class="tlaGBC" title="Branch 0 was taken 498 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 498 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 498 : nameFields &gt;&gt; signal.name &gt;&gt; marker;</span></span>
<span id="L232"><span class="lineNum"> 232</span> [<span class="tlaGBC" title="Branch 0 was taken 497 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 497 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 498 : if (signal.name.empty() || (nameFields &gt;&gt; extra))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 497 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 7 was taken 496 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 496 times"> + </span>]
<span id="L233"><span class="lineNum"> 233</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Invalid signal name or multiplexing marker.&quot;);</span></span>
<span id="L234"><span class="lineNum"> 234</span> [<span class="tlaGBC" title="Branch 0 was taken 488 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 8 times"> + </span>]:<span class="tlaGNC"> 496 : signal.multiplexing = ParseMultiplexingMarker(marker);</span></span>
<span id="L235"><span class="lineNum"> 235</span> : : </span>
<span id="L236"><span class="lineNum"> 236</span> [<span class="tlaGBC" title="Branch 0 was taken 488 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 488 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 495 : signal.startBit = ParseDecimal(fields[StartBit].str(),</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 481 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 7 times"> + </span>]
<span id="L237"><span class="lineNum"> 237</span> : : std::numeric_limits&lt;std::uint32_t&gt;::max(), &quot;signal start bit&quot;);</span>
<span id="L238"><span class="lineNum"> 238</span> [<span class="tlaGBC" title="Branch 0 was taken 481 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 481 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 489 : signal.length = ParseDecimal(fields[BitLength].str(), 64U, &quot;signal length&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 473 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 8 times"> + </span>]
<span id="L239"><span class="lineNum"> 239</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 472 times"> + </span>]:<span class="tlaGNC"> 473 : if (signal.length == 0U)</span></span>
<span id="L240"><span class="lineNum"> 240</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Signal length must be within 1..64 bits.&quot;);</span></span>
<span id="L241"><span class="lineNum"> 241</span> [<span class="tlaGBC" title="Branch 0 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 472 : signal.isLittleEndian = fields[ByteOrder].str() == &quot;1&quot;;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L242"><span class="lineNum"> 242</span> [<span class="tlaGBC" title="Branch 0 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 472 : signal.isSigned = fields[Signedness].str() == &quot;-&quot;;</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L243"><span class="lineNum"> 243</span> : : </span>
<span id="L244"><span class="lineNum"> 244</span> [<span class="tlaGBC" title="Branch 0 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 472 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 504 : signal.factor = ParsePhysicalValue(fields[Factor].str(), &quot;signal factor&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 440 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 32 times"> + </span>]
<span id="L245"><span class="lineNum"> 245</span> [<span class="tlaGBC" title="Branch 0 was taken 440 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 440 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 484 : signal.offset = ParsePhysicalValue(fields[Offset].str(), &quot;signal offset&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 396 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 44 times"> + </span>]
<span id="L246"><span class="lineNum"> 246</span> [<span class="tlaGBC" title="Branch 0 was taken 396 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 396 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 434 : signal.minimum = ParsePhysicalValue(fields[Minimum].str(), &quot;signal minimum&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 358 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 38 times"> + </span>]
<span id="L247"><span class="lineNum"> 247</span> [<span class="tlaGBC" title="Branch 0 was taken 358 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 358 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 396 : signal.maximum = ParsePhysicalValue(fields[Maximum].str(), &quot;signal maximum&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 320 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 38 times"> + </span>]
<span id="L248"><span class="lineNum"> 248</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 317 times"> + </span>]:<span class="tlaGNC"> 320 : if (signal.minimum &gt; signal.maximum)</span></span>
<span id="L249"><span class="lineNum"> 249</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::runtime_error(&quot;Signal minimum exceeds maximum.&quot;);</span></span>
<span id="L250"><span class="lineNum"> 250</span> [<span class="tlaGBC" title="Branch 0 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 317 : signal.unit = fields[Unit].str();</span></span>
<span id="L251"><span class="lineNum"> 251</span> [<span class="tlaGBC" title="Branch 0 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 317 : signal.receivers = SplitReceivers(fields[Receivers].str());</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 317 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L252"><span class="lineNum"> 252</span> :<span class="tlaGNC"> 317 : return signal;</span></span>
<span id="L253"><span class="lineNum"> 253</span> :<span class="tlaGNC"> 1245 : }</span></span>
<span id="L254"><span class="lineNum"> 254</span> : : </span>
<span id="L255"><span class="lineNum"> 255</span> : : </span>
<span id="L256"><span class="lineNum"> 256</span> : : namespace {</span>
<span id="L257"><span class="lineNum"> 257</span> :<span class="tlaGNC"> 698 : FrameInfo *FindFrameById(DbcDatabase &amp;database,</span></span>
<span id="L258"><span class="lineNum"> 258</span> : : std::uint32_t canId,</span>
<span id="L259"><span class="lineNum"> 259</span> : : bool isExtended) {</span>
<span id="L260"><span class="lineNum"> 260</span> [<span class="tlaGBC" title="Branch 0 was taken 144 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 613 times"> + </span>]:<span class="tlaGNC"> 757 : for (FrameInfo &amp;frame : database.frames) {</span></span>
<span id="L261"><span class="lineNum"> 261</span> [<span class="tlaGBC" title="Branch 0 was taken 109 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 35 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 85 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 24 times"> + </span>]:<span class="tlaGNC"> 144 : if (frame.canId == canId &amp;&amp; frame.isExtended == isExtended)</span></span>
<span id="L262"><span class="lineNum"> 262</span> :<span class="tlaGNC"> 85 : return &amp;frame;</span></span>
<span id="L263"><span class="lineNum"> 263</span> : : }</span>
<span id="L264"><span class="lineNum"> 264</span> : : </span>
<span id="L265"><span class="lineNum"> 265</span> :<span class="tlaGNC"> 613 : return nullptr;</span></span>
<span id="L266"><span class="lineNum"> 266</span> : : }</span>
<span id="L267"><span class="lineNum"> 267</span> : : </span>
<span id="L268"><span class="lineNum"> 268</span> :<span class="tlaGNC"> 364 : SignalInfo *FindSignalByName(FrameInfo &amp;frame, const std::string &amp;signalName) {</span></span>
<span id="L269"><span class="lineNum"> 269</span> [<span class="tlaGBC" title="Branch 0 was taken 126 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 315 times"> + </span>]:<span class="tlaGNC"> 441 : for (SignalInfo &amp;signal : frame.signals) {</span></span>
<span id="L270"><span class="lineNum"> 270</span> [<span class="tlaGBC" title="Branch 0 was taken 49 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 77 times"> + </span>]:<span class="tlaGNC"> 126 : if (signal.name == signalName)</span></span>
<span id="L271"><span class="lineNum"> 271</span> :<span class="tlaGNC"> 49 : return &amp;signal;</span></span>
<span id="L272"><span class="lineNum"> 272</span> : : }</span>
<span id="L273"><span class="lineNum"> 273</span> : : </span>
<span id="L274"><span class="lineNum"> 274</span> :<span class="tlaGNC"> 315 : return nullptr;</span></span>
<span id="L275"><span class="lineNum"> 275</span> : : }</span>
<span id="L276"><span class="lineNum"> 276</span> : : }// namespace</span>
<span id="L277"><span class="lineNum"> 277</span> : : </span>
<span id="L278"><span class="lineNum"> 278</span> :<span class="tlaGNC"> 649 : void DbcFrameHandler::Handle(const std::string &amp;line, DbcParseContext &amp;context) const {</span></span>
<span id="L279"><span class="lineNum"> 279</span> [<span class="tlaGBC" title="Branch 0 was taken 615 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 34 times"> + </span>]:<span class="tlaGNC"> 649 : FrameInfo frame = ParseFrameLine(line);</span></span>
<span id="L280"><span class="lineNum"> 280</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 584 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 27 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 4 times"> + </span>]:<span class="tlaGNC"> 615 : if (context.enableJ1939 &amp;&amp; frame.isExtended) {</span></span>
<span id="L281"><span class="lineNum"> 281</span> :<span class="tlaGNC"> 27 : frame.hasPgn = true;</span></span>
<span id="L282"><span class="lineNum"> 282</span> :<span class="tlaGNC"> 27 : frame.pgn = ExtractJ1939Pgn(frame.canId);</span></span>
<span id="L283"><span class="lineNum"> 283</span> : : }</span>
<span id="L284"><span class="lineNum"> 284</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 607 times"> + </span>]:<span class="tlaGNC"> 615 : if (FindFrameById(context.database, frame.canId, frame.isExtended) != nullptr)</span></span>
<span id="L285"><span class="lineNum"> 285</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 16 : throw std::runtime_error(&quot;Duplicate &quot; + std::string(frame.isExtended ? &quot;extended&quot; : &quot;standard&quot;) +</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L286"><span class="lineNum"> 286</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 24 : &quot; frame CAN ID: &quot; + std::to_string(frame.canId));</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L287"><span class="lineNum"> 287</span> [<span class="tlaGBC" title="Branch 0 was taken 607 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 607 : context.database.frames.push_back(std::move(frame));</span></span>
<span id="L288"><span class="lineNum"> 288</span> :<span class="tlaGNC"> 607 : context.currentFrame = &amp;context.database.frames.back();</span></span>
<span id="L289"><span class="lineNum"> 289</span> [<span class="tlaGBC" title="Branch 0 was taken 607 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 607 : context.signalLines.emplace_back();</span></span>
<span id="L290"><span class="lineNum"> 290</span> :<span class="tlaGNC"> 615 : }</span></span>
<span id="L291"><span class="lineNum"> 291</span> : : </span>
<span id="L292"><span class="lineNum"> 292</span> :<span class="tlaGNC"> 526 : void DbcSignalHandler::Handle(const std::string &amp;line, DbcParseContext &amp;context) const {</span></span>
<span id="L293"><span class="lineNum"> 293</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 521 times"> + </span>]:<span class="tlaGNC"> 526 : if (context.currentFrame == nullptr)</span></span>
<span id="L294"><span class="lineNum"> 294</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 5 : throw std::runtime_error(&quot;Signal found before any frame definition.&quot;);</span></span>
<span id="L295"><span class="lineNum"> 295</span> [<span class="tlaGBC" title="Branch 0 was taken 317 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 204 times"> + </span>]:<span class="tlaGNC"> 521 : SignalInfo signal = ParseSignalLine(line);</span></span>
<span id="L296"><span class="lineNum"> 296</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 311 times"> + </span>]:<span class="tlaGNC"> 317 : if (FindSignalByName(*context.currentFrame, signal.name) != nullptr)</span></span>
<span id="L297"><span class="lineNum"> 297</span> :<span class="tlaGNC"> 6 : throw std::runtime_error(&quot;Duplicate signal name '&quot; + signal.name +</span></span>
<span id="L298"><span class="lineNum"> 298</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 12 : &quot;' in frame '&quot; + context.currentFrame-&gt;name + &quot;'.&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 6 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L299"><span class="lineNum"> 299</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 304 times"> + </span>]:<span class="tlaGNC"> 311 : if (!IsValidSignalLayout(signal.startBit, signal.length, signal.isLittleEndian,</span></span>
<span id="L300"><span class="lineNum"> 300</span> :<span class="tlaGNC"> 311 : context.currentFrame-&gt;dlc))</span></span>
<span id="L301"><span class="lineNum"> 301</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 7 : throw std::runtime_error(&quot;Signal exceeds the frame payload length.&quot;);</span></span>
<span id="L302"><span class="lineNum"> 302</span> [<span class="tlaGBC" title="Branch 0 was taken 304 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 304 : context.currentFrame-&gt;signals.push_back(std::move(signal));</span></span>
<span id="L303"><span class="lineNum"> 303</span> [<span class="tlaGBC" title="Branch 0 was taken 304 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 304 : context.signalLines.back().push_back(context.lineNumber);</span></span>
<span id="L304"><span class="lineNum"> 304</span> :<span class="tlaGNC"> 317 : }</span></span>
<span id="L305"><span class="lineNum"> 305</span> : : </span>
<span id="L306"><span class="lineNum"> 306</span> :<span class="tlaGNC"> 149 : void DbcCommentHandler::Handle(const std::string &amp;line, DbcParseContext &amp;context) const {</span></span>
<span id="L307"><span class="lineNum"> 307</span> [<span class="tlaGBC" title="Branch 0 was taken 149 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 149 : std::istringstream stream(line);</span></span>
<span id="L308"><span class="lineNum"> 308</span> :<span class="tlaGNC"> 149 : std::string keyword;</span></span>
<span id="L309"><span class="lineNum"> 309</span> :<span class="tlaGNC"> 149 : std::string target;</span></span>
<span id="L310"><span class="lineNum"> 310</span> [<span class="tlaGBC" title="Branch 0 was taken 149 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 149 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 149 : stream &gt;&gt; keyword &gt;&gt; target;</span></span>
<span id="L311"><span class="lineNum"> 311</span> [<span class="tlaGBC" title="Branch 0 was taken 149 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 145 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 4 times"> + </span> :<span class="tlaGNC"> 149 : if (keyword != &quot;CM_&quot; || (target != &quot;BO_&quot; &amp;&amp; target != &quot;SG_&quot;))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 145 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 78 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 67 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 78 times"> + </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span><span class="tlaGBC" title="Branch 10 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 73 times"> + </span><span class="tlaGBC" title="Branch 12 was taken 9 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 13 was taken 140 times"> + </span>]
<span id="L312"><span class="lineNum"> 312</span> :<span class="tlaGNC"> 9 : return;</span></span>
<span id="L313"><span class="lineNum"> 313</span> : : </span>
<span id="L314"><span class="lineNum"> 314</span> :<span class="tlaGNC"> 140 : PendingComment pending;</span></span>
<span id="L315"><span class="lineNum"> 315</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 140 : pending.isSignal = target == &quot;SG_&quot;;</span></span>
<span id="L316"><span class="lineNum"> 316</span> :<span class="tlaGNC"> 140 : pending.lineNumber = context.lineNumber;</span></span>
<span id="L317"><span class="lineNum"> 317</span> :<span class="tlaGNC"> 140 : std::string idText;</span></span>
<span id="L318"><span class="lineNum"> 318</span> [<span class="tlaGBC" title="Branch 0 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 140 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 140 : if (!(stream &gt;&gt; idText))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 138 times"> + </span>]
<span id="L319"><span class="lineNum"> 319</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing CAN ID in CM_ statement.&quot;);</span></span>
<span id="L320"><span class="lineNum"> 320</span> [<span class="tlaGBC" title="Branch 0 was taken 102 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 36 times"> + </span>]:<span class="tlaGNC"> 138 : NormalizeCanId(ParseCanId(idText), pending.canId, pending.isExtended);</span></span>
<span id="L321"><span class="lineNum"> 321</span> [<span class="tlaGBC" title="Branch 0 was taken 55 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 47 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 55 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 157 : if (pending.isSignal &amp;&amp; (!(stream &gt;&gt; pending.signalName) ||</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 55 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 55 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 53 times"> + </span><span class="tlaGBC" title="Branch 10 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 100 times"> + </span>]
<span id="L322"><span class="lineNum"> 322</span> :<span class="tlaGNC"> 55 : pending.signalName.find_first_of(&quot;\&quot;;&quot;) != std::string::npos))</span></span>
<span id="L323"><span class="lineNum"> 323</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Missing or invalid signal name in CM_ statement.&quot;);</span></span>
<span id="L324"><span class="lineNum"> 324</span> : : </span>
<span id="L325"><span class="lineNum"> 325</span> [<span class="tlaGBC" title="Branch 0 was taken 100 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 100 : stream &gt;&gt; std::ws;</span></span>
<span id="L326"><span class="lineNum"> 326</span> [<span class="tlaGBC" title="Branch 0 was taken 100 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 96 times"> + </span>]:<span class="tlaGNC"> 100 : if (stream.get() != '&quot;')</span></span>
<span id="L327"><span class="lineNum"> 327</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Missing opening quote in CM_ statement.&quot;);</span></span>
<span id="L328"><span class="lineNum"> 328</span> :<span class="tlaGNC"> 96 : bool closed = false;</span></span>
<span id="L329"><span class="lineNum"> 329</span> : : char character;</span>
<span id="L330"><span class="lineNum"> 330</span> [<span class="tlaGBC" title="Branch 0 was taken 1096 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 1096 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1096 : while (stream.get(character)) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 1094 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2 times"> + </span>]
<span id="L331"><span class="lineNum"> 331</span> [<span class="tlaGBC" title="Branch 0 was taken 90 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1004 times"> + </span>]:<span class="tlaGNC"> 1094 : if (character == '&quot;') {</span></span>
<span id="L332"><span class="lineNum"> 332</span> :<span class="tlaGNC"> 90 : closed = true;</span></span>
<span id="L333"><span class="lineNum"> 333</span> :<span class="tlaGNC"> 90 : break;</span></span>
<span id="L334"><span class="lineNum"> 334</span> : : }</span>
<span id="L335"><span class="lineNum"> 335</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 997 times"> + </span>]:<span class="tlaGNC"> 1004 : if (character == '\\') {</span></span>
<span id="L336"><span class="lineNum"> 336</span> [<span class="tlaGBC" title="Branch 0 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 7 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 7 : if (!stream.get(character) || (character != '&quot;' &amp;&amp; character != '\\'))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 10 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 11 was taken 3 times"> + </span>]
<span id="L337"><span class="lineNum"> 337</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Invalid escape in CM_ statement.&quot;);</span></span>
<span id="L338"><span class="lineNum"> 338</span> : : }</span>
<span id="L339"><span class="lineNum"> 339</span> [<span class="tlaGBC" title="Branch 0 was taken 1000 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1000 : pending.comment += character;</span></span>
<span id="L340"><span class="lineNum"> 340</span> : : }</span>
<span id="L341"><span class="lineNum"> 341</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 90 times"> + </span>]:<span class="tlaGNC"> 92 : if (!closed)</span></span>
<span id="L342"><span class="lineNum"> 342</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unterminated CM_ comment.&quot;);</span></span>
<span id="L343"><span class="lineNum"> 343</span> [<span class="tlaGBC" title="Branch 0 was taken 90 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 90 : stream &gt;&gt; std::ws;</span></span>
<span id="L344"><span class="lineNum"> 344</span> [<span class="tlaGBC" title="Branch 0 was taken 90 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 86 times"> + </span>]:<span class="tlaGNC"> 90 : if (stream.get() != ';')</span></span>
<span id="L345"><span class="lineNum"> 345</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Missing semicolon in CM_ statement.&quot;);</span></span>
<span id="L346"><span class="lineNum"> 346</span> [<span class="tlaGBC" title="Branch 0 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 86 : stream &gt;&gt; std::ws;</span></span>
<span id="L347"><span class="lineNum"> 347</span> [<span class="tlaGBC" title="Branch 0 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 84 times"> + </span>]:<span class="tlaGNC"> 86 : if (!stream.eof())</span></span>
<span id="L348"><span class="lineNum"> 348</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Unexpected trailing text in CM_ statement.&quot;);</span></span>
<span id="L349"><span class="lineNum"> 349</span> [<span class="tlaGBC" title="Branch 0 was taken 84 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 84 : context.pendingComments.push_back(std::move(pending));</span></span>
<span id="L350"><span class="lineNum"> 350</span> [<span class="tlaGBC" title="Branch 0 was taken 84 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 9 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 84 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 9 times"> + </span> :<span class="tlaGNC"> 391 : }</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 84 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 9 times"> + </span>]
<span id="L351"><span class="lineNum"> 351</span> : : </span>
<span id="L352"><span class="lineNum"> 352</span> :<span class="tlaGNC"> 597 : void DbcParseContext::ResolveComments(const std::string &amp;filePath) {</span></span>
<span id="L353"><span class="lineNum"> 353</span> [<span class="tlaGBC" title="Branch 0 was taken 83 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 587 times"> + </span>]:<span class="tlaGNC"> 670 : for (const PendingComment &amp;pending: pendingComments) {</span></span>
<span id="L354"><span class="lineNum"> 354</span> :<span class="tlaGNC"> 83 : FrameInfo *frame = FindFrameById(database, pending.canId, pending.isExtended);</span></span>
<span id="L355"><span class="lineNum"> 355</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 77 times"> + </span>]:<span class="tlaGNC"> 83 : if (!frame)</span></span>
<span id="L356"><span class="lineNum"> 356</span> : : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidStatement, filePath,</span>
<span id="L357"><span class="lineNum"> 357</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 18 : pending.lineNumber, &quot;Unresolved CM_ frame reference.&quot;);</span></span>
<span id="L358"><span class="lineNum"> 358</span> [<span class="tlaGBC" title="Branch 0 was taken 47 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 30 times"> + </span>]:<span class="tlaGNC"> 77 : if (pending.isSignal) {</span></span>
<span id="L359"><span class="lineNum"> 359</span> :<span class="tlaGNC"> 47 : SignalInfo *signal = FindSignalByName(*frame, pending.signalName);</span></span>
<span id="L360"><span class="lineNum"> 360</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 43 times"> + </span>]:<span class="tlaGNC"> 47 : if (!signal)</span></span>
<span id="L361"><span class="lineNum"> 361</span> : : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidStatement, filePath,</span>
<span id="L362"><span class="lineNum"> 362</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : pending.lineNumber, &quot;Unresolved CM_ signal reference: &quot; + pending.signalName);</span></span>
<span id="L363"><span class="lineNum"> 363</span> [<span class="tlaGBC" title="Branch 0 was taken 43 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 43 : signal-&gt;comment = pending.comment;</span></span>
<span id="L364"><span class="lineNum"> 364</span> : : } else {</span>
<span id="L365"><span class="lineNum"> 365</span> [<span class="tlaGBC" title="Branch 0 was taken 30 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 30 : frame-&gt;comment = pending.comment;</span></span>
<span id="L366"><span class="lineNum"> 366</span> : : }</span>
<span id="L367"><span class="lineNum"> 367</span> : : }</span>
<span id="L368"><span class="lineNum"> 368</span> :<span class="tlaGNC"> 587 : }</span></span>
<span id="L369"><span class="lineNum"> 369</span> : : </span>
<span id="L370"><span class="lineNum"> 370</span> :<span class="tlaGNC"> 949 : DbcStatementDispatcher::DbcStatementDispatcher() {</span></span>
<span id="L371"><span class="lineNum"> 371</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;VERSION&quot;);</span></span>
<span id="L372"><span class="lineNum"> 372</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;NS_&quot;);</span></span>
<span id="L373"><span class="lineNum"> 373</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;NS_:&quot;);</span></span>
<span id="L374"><span class="lineNum"> 374</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;BS_&quot;);</span></span>
<span id="L375"><span class="lineNum"> 375</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;BS_:&quot;);</span></span>
<span id="L376"><span class="lineNum"> 376</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;BU_&quot;);</span></span>
<span id="L377"><span class="lineNum"> 377</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcHeaderHandler&gt;(&quot;BU_:&quot;);</span></span>
<span id="L378"><span class="lineNum"> 378</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcUnsupportedMultiplexingHandler&gt;(&quot;SG_MUL_VAL_&quot;);</span></span>
<span id="L379"><span class="lineNum"> 379</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcFrameHandler&gt;(&quot;BO_&quot;);</span></span>
<span id="L380"><span class="lineNum"> 380</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcSignalHandler&gt;(&quot;SG_&quot;);</span></span>
<span id="L381"><span class="lineNum"> 381</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcCommentHandler&gt;(&quot;CM_&quot;);</span></span>
<span id="L382"><span class="lineNum"> 382</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcValueDescriptionHandler&gt;(&quot;VAL_&quot;);</span></span>
<span id="L383"><span class="lineNum"> 383</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcAttributeHandler&gt;(&quot;BA_DEF_&quot;);</span></span>
<span id="L384"><span class="lineNum"> 384</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 1898 : RegisterType&lt;DbcAttributeHandler&gt;(&quot;BA_DEF_DEF_&quot;);</span></span>
<span id="L385"><span class="lineNum"> 385</span> [<span class="tlaGBC" title="Branch 0 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 949 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 949 : RegisterType&lt;DbcAttributeHandler&gt;(&quot;BA_&quot;);</span></span>
<span id="L386"><span class="lineNum"> 386</span> :<span class="tlaGNC"> 949 : }</span></span>
<span id="L387"><span class="lineNum"> 387</span> : : </span>
<span id="L388"><span class="lineNum"> 388</span> :<span class="tlaGNC"> 62 : void DbcHeaderHandler::Handle(const std::string &amp;, DbcParseContext &amp;) const {}</span></span>
<span id="L389"><span class="lineNum"> 389</span> : : </span>
<span id="L390"><span class="lineNum"> 390</span> :<span class="tlaGNC"> 2132 : bool DbcStatementDispatcher::Dispatch(const std::string &amp;line,</span></span>
<span id="L391"><span class="lineNum"> 391</span> : : DbcParseContext &amp;context) const {</span>
<span id="L392"><span class="lineNum"> 392</span> [<span class="tlaGBC" title="Branch 0 was taken 2132 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2132 : std::istringstream stream(line);</span></span>
<span id="L393"><span class="lineNum"> 393</span> :<span class="tlaGNC"> 2132 : std::string keyword;</span></span>
<span id="L394"><span class="lineNum"> 394</span> [<span class="tlaGBC" title="Branch 0 was taken 2132 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2132 : stream &gt;&gt; keyword;</span></span>
<span id="L395"><span class="lineNum"> 395</span> [<span class="tlaGBC" title="Branch 0 was taken 2132 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2132 : const HandlerMap::const_iterator handler = m_handlers.find(keyword);</span></span>
<span id="L396"><span class="lineNum"> 396</span> [<span class="tlaGBC" title="Branch 0 was taken 40 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2092 times"> + </span>]:<span class="tlaGNC"> 2132 : if (handler == m_handlers.end())</span></span>
<span id="L397"><span class="lineNum"> 397</span> :<span class="tlaGNC"> 40 : return false;</span></span>
<span id="L398"><span class="lineNum"> 398</span> [<span class="tlaGBC" title="Branch 0 was taken 1743 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 349 times"> + </span>]:<span class="tlaGNC"> 2092 : handler-&gt;second-&gt;Handle(line, context);</span></span>
<span id="L399"><span class="lineNum"> 399</span> :<span class="tlaGNC"> 1743 : return true;</span></span>
<span id="L400"><span class="lineNum"> 400</span> :<span class="tlaGNC"> 2481 : }</span></span>
<span id="L401"><span class="lineNum"> 401</span> : : </span>
<span id="L402"><span class="lineNum"> 402</span> :<span class="tlaGNC"> 94 : void DbcValueDescriptionHandler::Handle(const std::string &amp;line, DbcParseContext &amp;context) const {</span></span>
<span id="L403"><span class="lineNum"> 403</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 92 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 94 : static const std::regex header(R&quot;(^VAL_[ \t]+([^ \t]+)[ \t]+([^ \t;]+)[ \t]+(.*)$)&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
<span id="L404"><span class="lineNum"> 404</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 92 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 94 : static const std::regex pair(R&quot;dbc(^([^ \t]+)[ \t]+&quot;((?:[^&quot;\\]|\\[&quot;\\])*)&quot;)dbc&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaUNC" title="Branch 6 was not taken"> - </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
<span id="L405"><span class="lineNum"> 405</span> :<span class="tlaGNC"> 94 : std::smatch fields;</span></span>
<span id="L406"><span class="lineNum"> 406</span> [<span class="tlaGBC" title="Branch 0 was taken 94 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 90 times"> + </span>]:<span class="tlaGNC"> 94 : if (!std::regex_match(line, fields, header))</span></span>
<span id="L407"><span class="lineNum"> 407</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Malformed or unsupported VAL_ statement.&quot;);</span></span>
<span id="L408"><span class="lineNum"> 408</span> [<span class="tlaGBC" title="Branch 0 was taken 90 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 90 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 93 : const std::uint32_t rawId = ParseDecimal(fields[1].str(), std::numeric_limits&lt;std::uint32_t&gt;::max(), &quot;VAL_ CAN ID&quot;);</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 87 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 3 times"> + </span>]
<span id="L409"><span class="lineNum"> 409</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 86 times"> + </span>]:<span class="tlaGNC"> 87 : if ((rawId &amp; 0x60000000U) != 0U)</span></span>
<span id="L410"><span class="lineNum"> 410</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;VAL_ CAN ID exceeds the 29-bit identifier range.&quot;);</span></span>
<span id="L411"><span class="lineNum"> 411</span> :<span class="tlaGNC"> 86 : PendingValueDescriptions pending;</span></span>
<span id="L412"><span class="lineNum"> 412</span> :<span class="tlaGNC"> 86 : NormalizeCanId(rawId, pending.canId, pending.isExtended);</span></span>
<span id="L413"><span class="lineNum"> 413</span> [<span class="tlaGBC" title="Branch 0 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 86 : pending.signalName = fields[2].str();</span></span>
<span id="L414"><span class="lineNum"> 414</span> :<span class="tlaGNC"> 86 : pending.lineNumber = context.lineNumber;</span></span>
<span id="L415"><span class="lineNum"> 415</span> [<span class="tlaGBC" title="Branch 0 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 86 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 86 : std::string rest = fields[3].str();</span></span>
<span id="L416"><span class="lineNum"> 416</span> [<span class="tlaGBC" title="Branch 0 was taken 179 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 109 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 70 times"> + </span>]:<span class="tlaGNC"> 179 : while (rest != &quot;;&quot;) {</span></span>
<span id="L417"><span class="lineNum"> 417</span> [<span class="tlaGBC" title="Branch 0 was taken 109 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 104 times"> + </span>]:<span class="tlaGNC"> 109 : if (!std::regex_search(rest, fields, pair))</span></span>
<span id="L418"><span class="lineNum"> 418</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 5 : throw std::runtime_error(&quot;Malformed VAL_ value/description pair or missing semicolon.&quot;);</span></span>
<span id="L419"><span class="lineNum"> 419</span> [<span class="tlaGBC" title="Branch 0 was taken 104 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 104 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 104 : const std::string number = fields[1].str();</span></span>
<span id="L420"><span class="lineNum"> 420</span> [<span class="tlaGBC" title="Branch 0 was taken 96 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 8 times"> + </span>]:<span class="tlaGNC"> 104 : const RawSignalValue key = ParseValueKey(number);</span></span>
<span id="L421"><span class="lineNum"> 421</span> [<span class="tlaGBC" title="Branch 0 was taken 96 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 96 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 96 : const std::string description = UnescapeDescription(fields[2].str());</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 96 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span>]
<span id="L422"><span class="lineNum"> 422</span> [<span class="tlaGBC" title="Branch 0 was taken 96 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 94 times"> + </span>]:<span class="tlaGNC"> 96 : if (!pending.descriptions.emplace(key, description).second)</span></span>
<span id="L423"><span class="lineNum"> 423</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::runtime_error(&quot;Duplicate VAL_ value key: &quot; + number);</span></span>
<span id="L424"><span class="lineNum"> 424</span> [<span class="tlaGBC" title="Branch 0 was taken 94 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 94 : const std::size_t consumed = static_cast&lt;std::size_t&gt;(fields.length());</span></span>
<span id="L425"><span class="lineNum"> 425</span> [<span class="tlaGBC" title="Branch 0 was taken 94 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 94 : rest.erase(0, consumed);</span></span>
<span id="L426"><span class="lineNum"> 426</span> [<span class="tlaGBC" title="Branch 0 was taken 93 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 93 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 94 : if (!rest.empty() &amp;&amp; rest[0] != ';' &amp;&amp; rest[0] != ' ' &amp;&amp; rest[0] != '\t')</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 70 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 23 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaGBC" title="Branch 8 was taken 2 times"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 9 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 10 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 11 was not taken"> - </span><span class="tlaGBC" title="Branch 12 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 13 was taken 1 time"> + </span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 14 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 15 was taken 93 times"> + </span>]
<span id="L427"><span class="lineNum"> 427</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;Missing whitespace between VAL_ pairs.&quot;);</span></span>
<span id="L428"><span class="lineNum"> 428</span> [<span class="tlaGBC" title="Branch 0 was taken 93 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 93 : rest = dbc_detail::TrimText(rest);</span></span>
<span id="L429"><span class="lineNum"> 429</span> :<span class="tlaGNC"> 107 : }</span></span>
<span id="L430"><span class="lineNum"> 430</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 69 times"> + </span>]:<span class="tlaGNC"> 70 : if (pending.descriptions.empty())</span></span>
<span id="L431"><span class="lineNum"> 431</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 1 : throw std::runtime_error(&quot;VAL_ requires at least one value/description pair.&quot;);</span></span>
<span id="L432"><span class="lineNum"> 432</span> [<span class="tlaGBC" title="Branch 0 was taken 69 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 69 : context.pendingValues.push_back(std::move(pending));</span></span>
<span id="L433"><span class="lineNum"> 433</span> :<span class="tlaGNC"> 128 : }</span></span>
<span id="L434"><span class="lineNum"> 434</span> : : </span>
<span id="L435"><span class="lineNum"> 435</span> :<span class="tlaGNC"> 592 : void DbcParseContext::ResolveValueDescriptions(const std::string &amp;filePath) {</span></span>
<span id="L436"><span class="lineNum"> 436</span> [<span class="tlaGBC" title="Branch 0 was taken 67 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 577 times"> + </span>]:<span class="tlaGNC"> 644 : for (const PendingValueDescriptions &amp;pending: pendingValues) {</span></span>
<span id="L437"><span class="lineNum"> 437</span> : : try {</span>
<span id="L438"><span class="lineNum"> 438</span> [<span class="tlaGBC" title="Branch 0 was taken 62 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span>]:<span class="tlaGNC"> 67 : FrameInfo *frame = FindUniqueFrame(database, pending.canId, pending.isExtended);</span></span>
<span id="L439"><span class="lineNum"> 439</span> [<span class="tlaGBC" title="Branch 0 was taken 55 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 7 times"> + </span>]:<span class="tlaGNC"> 62 : SignalInfo *signal = FindUniqueSignal(*frame, pending.signalName);</span></span>
<span id="L440"><span class="lineNum"> 440</span> [<span class="tlaGBC" title="Branch 0 was taken 75 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 52 times"> + </span>]:<span class="tlaGNC"> 127 : for (const ValueDescriptions::value_type &amp;entry: pending.descriptions) {</span></span>
<span id="L441"><span class="lineNum"> 441</span> [<span class="tlaGBC" title="Branch 0 was taken 75 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 72 times"> + </span>]:<span class="tlaGNC"> 75 : if (!signal-&gt;valueDescriptions.insert(entry).second)</span></span>
<span id="L442"><span class="lineNum"> 442</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::runtime_error(&quot;Duplicate VAL_ value key for signal: &quot; + pending.signalName);</span></span>
<span id="L443"><span class="lineNum"> 443</span> : : }</span>
<span id="L444"><span class="lineNum"> 444</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 15 times"> + </span>]:<span class="tlaGNC"> 15 : } catch (const std::exception &amp;error) {</span></span>
<span id="L445"><span class="lineNum"> 445</span> : : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidValueDescription,</span>
<span id="L446"><span class="lineNum"> 446</span> [<span class="tlaGBC" title="Branch 0 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 15 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 45 : filePath, pending.lineNumber, error.what());</span></span>
<span id="L447"><span class="lineNum"> 447</span> :<span class="tlaGNC"> 15 : }</span></span>
<span id="L448"><span class="lineNum"> 448</span> : : }</span>
<span id="L449"><span class="lineNum"> 449</span> :<span class="tlaGNC"> 577 : }</span></span>
<span id="L450"><span class="lineNum"> 450</span> : : </span>
<span id="L451"><span class="lineNum"> 451</span> :<span class="tlaGNC"> 4 : void DbcUnsupportedMultiplexingHandler::Handle(const std::string &amp;, DbcParseContext &amp;) const {</span></span>
<span id="L452"><span class="lineNum"> 452</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::runtime_error(&quot;Extended and nested multiplexing are unsupported.&quot;);</span></span>
<span id="L453"><span class="lineNum"> 453</span> : : }</span>
<span id="L454"><span class="lineNum"> 454</span> : : </span>
<span id="L455"><span class="lineNum"> 455</span> : : namespace {</span>
<span id="L456"><span class="lineNum"> 456</span> :<span class="tlaGNC"> 114 : std::vector&lt;std::uint64_t&gt; SignalBits(const SignalInfo &amp;signal) {</span></span>
<span id="L457"><span class="lineNum"> 457</span> :<span class="tlaGNC"> 114 : std::vector&lt;std::uint64_t&gt; bits;</span></span>
<span id="L458"><span class="lineNum"> 458</span> :<span class="tlaGNC"> 114 : std::uint64_t bit = signal.startBit;</span></span>
<span id="L459"><span class="lineNum"> 459</span> [<span class="tlaGBC" title="Branch 0 was taken 884 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 114 times"> + </span>]:<span class="tlaGNC"> 998 : for (std::uint32_t index = 0U; index &lt; signal.length; ++index) {</span></span>
<span id="L460"><span class="lineNum"> 460</span> [<span class="tlaGBC" title="Branch 0 was taken 884 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 884 : bits.push_back(bit);</span></span>
<span id="L461"><span class="lineNum"> 461</span> :<span class="tlaGNC"> 884 : bit = NextSignalBit(bit, signal.isLittleEndian);</span></span>
<span id="L462"><span class="lineNum"> 462</span> : : }</span>
<span id="L463"><span class="lineNum"> 463</span> :<span class="tlaGNC"> 114 : return bits;</span></span>
<span id="L464"><span class="lineNum"> 464</span> :<span class="tlaUNC"> 0 : }</span></span>
<span id="L465"><span class="lineNum"> 465</span> : : </span>
<span id="L466"><span class="lineNum"> 466</span> :<span class="tlaGNC"> 58 : bool AreMutuallyExclusive(const SignalInfo &amp;first, const SignalInfo &amp;second) {</span></span>
<span id="L467"><span class="lineNum"> 467</span> :<span class="tlaGNC"> 79 : return first.multiplexing.role == MultiplexRole::Branch &amp;&amp;</span></span>
<span id="L468"><span class="lineNum"> 468</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 37 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 17 times"> + </span>]:<span class="tlaGNC"> 62 : second.multiplexing.role == MultiplexRole::Branch &amp;&amp;</span></span>
<span id="L469"><span class="lineNum"> 469</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span>]:<span class="tlaGNC"> 62 : first.multiplexing.value != second.multiplexing.value;</span></span>
<span id="L470"><span class="lineNum"> 470</span> : : }</span>
<span id="L471"><span class="lineNum"> 471</span> : : </span>
<span id="L472"><span class="lineNum"> 472</span> :<span class="tlaGNC"> 193 : std::string ValidateBranch(const SignalInfo &amp;signal, const SignalInfo *selector) {</span></span>
<span id="L473"><span class="lineNum"> 473</span> [<span class="tlaGBC" title="Branch 0 was taken 164 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span>]:<span class="tlaGNC"> 193 : if (signal.multiplexing.role != MultiplexRole::Branch)</span></span>
<span id="L474"><span class="lineNum"> 474</span> :<span class="tlaGNC"> 164 : return {};</span></span>
<span id="L475"><span class="lineNum"> 475</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 25 times"> + </span>]:<span class="tlaGNC"> 29 : if (selector == nullptr)</span></span>
<span id="L476"><span class="lineNum"> 476</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 8 : return &quot;Multiplexed branch has no selector.&quot;;</span></span>
<span id="L477"><span class="lineNum"> 477</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span>]:<span class="tlaGNC"> 25 : if (selector-&gt;length &lt; 64U &amp;&amp; signal.multiplexing.value &gt;= (std::uint64_t(1U) &lt;&lt; selector-&gt;length))</span></span>
<span id="L478"><span class="lineNum"> 478</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 10 : return &quot;Branch value exceeds selector raw range.&quot;;</span></span>
<span id="L479"><span class="lineNum"> 479</span> :<span class="tlaGNC"> 20 : return {};</span></span>
<span id="L480"><span class="lineNum"> 480</span> : : }</span>
<span id="L481"><span class="lineNum"> 481</span> : : </span>
<span id="L482"><span class="lineNum"> 482</span> :<span class="tlaGNC"> 280 : const SignalInfo *FindSelector(const FrameInfo &amp;frame,</span></span>
<span id="L483"><span class="lineNum"> 483</span> : : const std::vector&lt;std::size_t&gt; &amp;lines,</span>
<span id="L484"><span class="lineNum"> 484</span> : : const std::string &amp;filePath) {</span>
<span id="L485"><span class="lineNum"> 485</span> :<span class="tlaGNC"> 280 : const SignalInfo *selector = nullptr;</span></span>
<span id="L486"><span class="lineNum"> 486</span> [<span class="tlaGBC" title="Branch 0 was taken 207 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 272 times"> + </span>]:<span class="tlaGNC"> 479 : for (std::size_t index = 0U; index &lt; frame.signals.size(); ++index) {</span></span>
<span id="L487"><span class="lineNum"> 487</span> :<span class="tlaGNC"> 207 : const SignalInfo &amp;signal = frame.signals[index];</span></span>
<span id="L488"><span class="lineNum"> 488</span> [<span class="tlaGBC" title="Branch 0 was taken 173 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 34 times"> + </span>]:<span class="tlaGNC"> 207 : if (signal.multiplexing.role != MultiplexRole::Selector)</span></span>
<span id="L489"><span class="lineNum"> 489</span> :<span class="tlaGNC"> 173 : continue;</span></span>
<span id="L490"><span class="lineNum"> 490</span> [<span class="tlaGBC" title="Branch 0 was taken 30 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 26 times"> + </span>]:<span class="tlaGNC"> 34 : if (selector != nullptr || signal.isSigned)</span></span>
<span id="L491"><span class="lineNum"> 491</span> : : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidMultiplexing,</span>
<span id="L492"><span class="lineNum"> 492</span> :<span class="tlaGNC"> 8 : filePath, lines[index],</span></span>
<span id="L493"><span class="lineNum"> 493</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 32 : &quot;Multiplexing requires one unsigned selector per frame.&quot;);</span></span>
<span id="L494"><span class="lineNum"> 494</span> :<span class="tlaGNC"> 26 : selector = &amp;signal;</span></span>
<span id="L495"><span class="lineNum"> 495</span> : : }</span>
<span id="L496"><span class="lineNum"> 496</span> :<span class="tlaGNC"> 272 : return selector;</span></span>
<span id="L497"><span class="lineNum"> 497</span> : : }</span>
<span id="L498"><span class="lineNum"> 498</span> : : </span>
<span id="L499"><span class="lineNum"> 499</span> :<span class="tlaGNC"> 57 : bool SignalsOverlap(const SignalInfo &amp;first, const SignalInfo &amp;second) {</span></span>
<span id="L500"><span class="lineNum"> 500</span> [<span class="tlaGBC" title="Branch 0 was taken 57 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 57 : const std::vector&lt;std::uint64_t&gt; firstBits = SignalBits(first);</span></span>
<span id="L501"><span class="lineNum"> 501</span> [<span class="tlaGBC" title="Branch 0 was taken 57 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 57 : const std::vector&lt;std::uint64_t&gt; secondBits = SignalBits(second);</span></span>
<span id="L502"><span class="lineNum"> 502</span> [<span class="tlaGBC" title="Branch 0 was taken 442 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 47 times"> + </span>]:<span class="tlaGNC"> 489 : for (const std::uint64_t firstBit : firstBits) {</span></span>
<span id="L503"><span class="lineNum"> 503</span> [<span class="tlaGBC" title="Branch 0 was taken 2948 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 432 times"> + </span>]:<span class="tlaGNC"> 3380 : for (const std::uint64_t secondBit : secondBits) {</span></span>
<span id="L504"><span class="lineNum"> 504</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2938 times"> + </span>]:<span class="tlaGNC"> 2948 : if (firstBit == secondBit)</span></span>
<span id="L505"><span class="lineNum"> 505</span> :<span class="tlaGNC"> 10 : return true;</span></span>
<span id="L506"><span class="lineNum"> 506</span> : : }</span>
<span id="L507"><span class="lineNum"> 507</span> : : }</span>
<span id="L508"><span class="lineNum"> 508</span> :<span class="tlaGNC"> 47 : return false;</span></span>
<span id="L509"><span class="lineNum"> 509</span> :<span class="tlaGNC"> 57 : }</span></span>
<span id="L510"><span class="lineNum"> 510</span> : : }</span>
<span id="L511"><span class="lineNum"> 511</span> : : </span>
<span id="L512"><span class="lineNum"> 512</span> :<span class="tlaGNC"> 576 : void DbcParseContext::ValidateMultiplexing(const std::string &amp;filePath) const {</span></span>
<span id="L513"><span class="lineNum"> 513</span> [<span class="tlaGBC" title="Branch 0 was taken 280 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 549 times"> + </span>]:<span class="tlaGNC"> 829 : for (std::size_t frameIndex = 0U; frameIndex &lt; database.frames.size(); ++frameIndex) {</span></span>
<span id="L514"><span class="lineNum"> 514</span> :<span class="tlaGNC"> 280 : const FrameInfo &amp;frame = database.frames[frameIndex];</span></span>
<span id="L515"><span class="lineNum"> 515</span> :<span class="tlaGNC"> 280 : const SignalInfo *selector = FindSelector(frame, signalLines[frameIndex], filePath);</span></span>
<span id="L516"><span class="lineNum"> 516</span> [<span class="tlaGBC" title="Branch 0 was taken 193 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 253 times"> + </span>]:<span class="tlaGNC"> 446 : for (std::size_t index = 0U; index &lt; frame.signals.size(); ++index) {</span></span>
<span id="L517"><span class="lineNum"> 517</span> :<span class="tlaGNC"> 193 : const SignalInfo &amp;signal = frame.signals[index];</span></span>
<span id="L518"><span class="lineNum"> 518</span> [<span class="tlaGBC" title="Branch 0 was taken 193 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 193 : std::string error = ValidateBranch(signal, selector);</span></span>
<span id="L519"><span class="lineNum"> 519</span> [<span class="tlaGBC" title="Branch 0 was taken 61 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 190 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 58 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 3 times"> + </span> :<span class="tlaGNC"> 251 : for (std::size_t previous = 0U; previous &lt; index &amp;&amp; error.empty(); ++previous) {</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 58 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 193 times"> + </span>]
<span id="L520"><span class="lineNum"> 520</span> :<span class="tlaGNC"> 58 : const SignalInfo &amp;other = frame.signals[previous];</span></span>
<span id="L521"><span class="lineNum"> 521</span> [<span class="tlaGBC" title="Branch 0 was taken 57 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 2 was taken 57 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 58 : if (!AreMutuallyExclusive(signal, other) &amp;&amp; SignalsOverlap(signal, other))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 47 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 48 times"> + </span>]
<span id="L522"><span class="lineNum"> 522</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 10 : error = &quot;Signals overlap without mutually exclusive multiplexing conditions.&quot;;</span></span>
<span id="L523"><span class="lineNum"> 523</span> : : }</span>
<span id="L524"><span class="lineNum"> 524</span> [<span class="tlaGBC" title="Branch 0 was taken 19 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 174 times"> + </span>]:<span class="tlaGNC"> 193 : if (!error.empty())</span></span>
<span id="L525"><span class="lineNum"> 525</span> : : throw DbcDiagnosticError(DbcDiagnosticCode::InvalidMultiplexing,</span>
<span id="L526"><span class="lineNum"> 526</span> [<span class="tlaGBC" title="Branch 0 was taken 19 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 19 : filePath, signalLines[frameIndex][index], error);</span></span>
<span id="L527"><span class="lineNum"> 527</span> :<span class="tlaGNC"> 193 : }</span></span>
<span id="L528"><span class="lineNum"> 528</span> : : }</span>
<span id="L529"><span class="lineNum"> 529</span> :<span class="tlaGNC"> 549 : }</span></span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,173 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.h<span style="font-size: 80%;"> (<a href="dbc_statement_handler.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">45.5&nbsp;%</td>
<td class="headerCovTableEntry">22</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_statement_handler.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L33">DbcDiagnosticError::DbcDiagnosticError(DbcDiagnosticCode, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned long, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">438</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">14236</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcCommentHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcFrameHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcSignalHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcUnsupportedMultiplexingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcValueDescriptionHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcAttributeHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">2847</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcHeaderHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">6643</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L74">DbcStatementHandler::~DbcStatementHandler()</a></td>
<td class="coverFnHi">14250</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,173 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.h<span style="font-size: 80%;"> (<a href="dbc_statement_handler.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">45.5&nbsp;%</td>
<td class="headerCovTableEntry">22</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_statement_handler.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L33">DbcDiagnosticError::DbcDiagnosticError(DbcDiagnosticCode, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned long, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">438</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L74">DbcStatementHandler::~DbcStatementHandler()</a></td>
<td class="coverFnHi">14250</td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">14236</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcAttributeHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">2847</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcCommentHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcFrameHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcHeaderHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">6643</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcSignalHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcUnsupportedMultiplexingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="dbc_statement_handler.h.gcov.html#L135">void DbcStatementDispatcher::RegisterType&lt;DbcValueDescriptionHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,239 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_statement_handler.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_statement_handler.h<span style="font-size: 80%;"> (source / <a href="dbc_statement_handler.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">45.5&nbsp;%</td>
<td class="headerCovTableEntry">22</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #ifndef DBC_STATEMENT_HANDLER_H</span>
<span id="L3"><span class="lineNum"> 3</span> : : #define DBC_STATEMENT_HANDLER_H</span>
<span id="L4"><span class="lineNum"> 4</span> : : </span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &quot;dbc_database.h&quot;</span>
<span id="L6"><span class="lineNum"> 6</span> : : #include &quot;dbc_diagnostic.h&quot;</span>
<span id="L7"><span class="lineNum"> 7</span> : : #include &quot;typefactory.h&quot;</span>
<span id="L8"><span class="lineNum"> 8</span> : : #include &lt;stdexcept&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : : #include &lt;string&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : : #include &lt;unordered_map&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : /** @brief Deferred raw value descriptions and their target. */</span>
<span id="L13"><span class="lineNum"> 13</span> : : struct PendingValueDescriptions {</span>
<span id="L14"><span class="lineNum"> 14</span> : : std::uint32_t canId; /**&lt; Normalized target frame identifier. */</span>
<span id="L15"><span class="lineNum"> 15</span> : : bool isExtended; /**&lt; Target frame type. */</span>
<span id="L16"><span class="lineNum"> 16</span> : : std::string signalName; /**&lt; Target signal name. */</span>
<span id="L17"><span class="lineNum"> 17</span> : : ValueDescriptions descriptions; /**&lt; Raw integer descriptions to merge. */</span>
<span id="L18"><span class="lineNum"> 18</span> : : std::size_t lineNumber; /**&lt; One-based physical statement line. */</span>
<span id="L19"><span class="lineNum"> 19</span> : : };</span>
<span id="L20"><span class="lineNum"> 20</span> : : </span>
<span id="L21"><span class="lineNum"> 21</span> : : /** @brief Deferred frame or signal comment and its source location. */</span>
<span id="L22"><span class="lineNum"> 22</span> : : struct PendingComment {</span>
<span id="L23"><span class="lineNum"> 23</span> : : std::uint32_t canId; /**&lt; Normalized target frame identifier. */</span>
<span id="L24"><span class="lineNum"> 24</span> : : bool isExtended; /**&lt; Target frame type. */</span>
<span id="L25"><span class="lineNum"> 25</span> : : bool isSignal; /**&lt; Whether the target is a signal rather than a frame. */</span>
<span id="L26"><span class="lineNum"> 26</span> : : std::string signalName; /**&lt; Target signal name. */</span>
<span id="L27"><span class="lineNum"> 27</span> : : std::string comment; /**&lt; Unescaped comment text. */</span>
<span id="L28"><span class="lineNum"> 28</span> : : std::size_t lineNumber; /**&lt; One-based physical statement line. */</span>
<span id="L29"><span class="lineNum"> 29</span> : : };</span>
<span id="L30"><span class="lineNum"> 30</span> : : </span>
<span id="L31"><span class="lineNum"> 31</span> : : /** Carries deferred validation locations without parsing exception text. */</span>
<span id="L32"><span class="lineNum"> 32</span> : : class DbcDiagnosticError : public std::runtime_error {</span>
<span id="L33"><span class="lineNum"> 33</span> : : public:</span>
<span id="L34"><span class="lineNum"> 34</span> : : /** @brief Create an exception with a structured source diagnostic. */</span>
<span id="L35"><span class="lineNum"> 35</span> :<span class="tlaGNC"> 438 : DbcDiagnosticError(DbcDiagnosticCode code, const std::string &amp;filePath,</span></span>
<span id="L36"><span class="lineNum"> 36</span> : : std::size_t lineNumber, const std::string &amp;message)</span>
<span id="L37"><span class="lineNum"> 37</span> [<span class="tlaGBC" title="Branch 0 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 876 : : std::runtime_error(filePath + &quot;:&quot; + std::to_string(lineNumber) + &quot;: &quot; + message),</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span>]
<span id="L38"><span class="lineNum"> 38</span> [<span class="tlaGBC" title="Branch 0 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span> :<span class="tlaGNC"> 1314 : diagnostic{DbcDiagnosticSeverity::Error, code, filePath, lineNumber, message} {}</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 438 times"> + </span><span class="tlaUNC" title="Branch 7 was not taken"> - </span><span class="tlaUNC" title="Branch 8 was not taken"> - </span>
<span class="lineNum"> </span> <span class="tlaUNC" title="Branch 9 was not taken"> - </span>]
<span id="L39"><span class="lineNum"> 39</span> : : </span>
<span id="L40"><span class="lineNum"> 40</span> : : DbcDiagnostic diagnostic; /**&lt; Structured error accompanying the exception message. */</span>
<span id="L41"><span class="lineNum"> 41</span> : : };</span>
<span id="L42"><span class="lineNum"> 42</span> : : </span>
<span id="L43"><span class="lineNum"> 43</span> : : /** @brief Attribute statement retained for ordered resolution. */</span>
<span id="L44"><span class="lineNum"> 44</span> : : struct PendingAttribute {</span>
<span id="L45"><span class="lineNum"> 45</span> : : std::string statement; /**&lt; Complete attribute statement. */</span>
<span id="L46"><span class="lineNum"> 46</span> : : std::size_t lineNumber; /**&lt; One-based physical statement line. */</span>
<span id="L47"><span class="lineNum"> 47</span> : : };</span>
<span id="L48"><span class="lineNum"> 48</span> : : </span>
<span id="L49"><span class="lineNum"> 49</span> : : /** Mutable state belonging to one file parse. Handlers do not retain it. */</span>
<span id="L50"><span class="lineNum"> 50</span> : : struct DbcParseContext {</span>
<span id="L51"><span class="lineNum"> 51</span> : : DbcDatabase &amp;database; /**&lt; Parsed metadata under construction. */</span>
<span id="L52"><span class="lineNum"> 52</span> : : FrameInfo *currentFrame = nullptr; /**&lt; Current frame for following signal definitions. */</span>
<span id="L53"><span class="lineNum"> 53</span> : : bool enableJ1939 = false; /**&lt; Explicit interpretation option for extended frames. */</span>
<span id="L54"><span class="lineNum"> 54</span> : : std::size_t lineNumber = 0U; /**&lt; Physical line of the current statement. */</span>
<span id="L55"><span class="lineNum"> 55</span> : : std::vector&lt;PendingValueDescriptions&gt; pendingValues = {}; /**&lt; Unresolved raw value descriptions. */</span>
<span id="L56"><span class="lineNum"> 56</span> : : </span>
<span id="L57"><span class="lineNum"> 57</span> : : std::vector&lt;std::vector&lt;std::size_t&gt;&gt; signalLines = {}; /**&lt; Signal definition lines grouped by frame. */</span>
<span id="L58"><span class="lineNum"> 58</span> : : /** @brief Validate selectors, branch ranges, and signal overlap. */</span>
<span id="L59"><span class="lineNum"> 59</span> : : void ValidateMultiplexing(const std::string &amp;filePath) const;</span>
<span id="L60"><span class="lineNum"> 60</span> : : </span>
<span id="L61"><span class="lineNum"> 61</span> : : std::vector&lt;PendingComment&gt; pendingComments = {}; /**&lt; Unresolved comments in source order. */</span>
<span id="L62"><span class="lineNum"> 62</span> : : /** @brief Resolve deferred comments after all definitions are known. */</span>
<span id="L63"><span class="lineNum"> 63</span> : : void ResolveComments(const std::string &amp;filePath);</span>
<span id="L64"><span class="lineNum"> 64</span> : : </span>
<span id="L65"><span class="lineNum"> 65</span> : : std::vector&lt;PendingAttribute&gt; pendingAttributes = {}; /**&lt; Unresolved attributes in source order. */</span>
<span id="L66"><span class="lineNum"> 66</span> : : /** @brief Resolve definitions, defaults, then assignments; append format warnings. */</span>
<span id="L67"><span class="lineNum"> 67</span> : : void ResolveAttributes(const std::string &amp;filePath, std::vector&lt;DbcDiagnostic&gt; &amp;diagnostics);</span>
<span id="L68"><span class="lineNum"> 68</span> : : </span>
<span id="L69"><span class="lineNum"> 69</span> : : /** @brief Resolve deferred raw descriptions against unique targets. */</span>
<span id="L70"><span class="lineNum"> 70</span> : : void ResolveValueDescriptions(const std::string &amp;filePath);</span>
<span id="L71"><span class="lineNum"> 71</span> : : };</span>
<span id="L72"><span class="lineNum"> 72</span> : : </span>
<span id="L73"><span class="lineNum"> 73</span> : : /** @brief Interface for processing a registered DBC statement. */</span>
<span id="L74"><span class="lineNum"> 74</span> : : class DbcStatementHandler {</span>
<span id="L75"><span class="lineNum"> 75</span> : : public:</span>
<span id="L76"><span class="lineNum"> 76</span> :<span class="tlaGNC"> 14250 : virtual ~DbcStatementHandler() = default;</span></span>
<span id="L77"><span class="lineNum"> 77</span> : : /** @brief Process a trimmed statement using state belonging to this parse. */</span>
<span id="L78"><span class="lineNum"> 78</span> : : virtual void Handle(const std::string &amp;line, DbcParseContext &amp;context) const = 0;</span>
<span id="L79"><span class="lineNum"> 79</span> : : };</span>
<span id="L80"><span class="lineNum"> 80</span> : : </span>
<span id="L81"><span class="lineNum"> 81</span> : : /** @brief Parse and append frame definitions. */</span>
<span id="L82"><span class="lineNum"> 82</span> : : class DbcFrameHandler : public DbcStatementHandler {</span>
<span id="L83"><span class="lineNum"> 83</span> : : public:</span>
<span id="L84"><span class="lineNum"> 84</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L85"><span class="lineNum"> 85</span> : : </span>
<span id="L86"><span class="lineNum"> 86</span> : : private:</span>
<span id="L87"><span class="lineNum"> 87</span> : : static FrameInfo ParseFrameLine(const std::string &amp;line);</span>
<span id="L88"><span class="lineNum"> 88</span> : : };</span>
<span id="L89"><span class="lineNum"> 89</span> : : </span>
<span id="L90"><span class="lineNum"> 90</span> : : /** @brief Parse and append signals to the current frame. */</span>
<span id="L91"><span class="lineNum"> 91</span> : : class DbcSignalHandler : public DbcStatementHandler {</span>
<span id="L92"><span class="lineNum"> 92</span> : : public:</span>
<span id="L93"><span class="lineNum"> 93</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L94"><span class="lineNum"> 94</span> : : </span>
<span id="L95"><span class="lineNum"> 95</span> : : private:</span>
<span id="L96"><span class="lineNum"> 96</span> : : static SignalInfo ParseSignalLine(const std::string &amp;line);</span>
<span id="L97"><span class="lineNum"> 97</span> : : };</span>
<span id="L98"><span class="lineNum"> 98</span> : : </span>
<span id="L99"><span class="lineNum"> 99</span> : : /** @brief Defer frame and signal comments for target resolution. */</span>
<span id="L100"><span class="lineNum"> 100</span> : : class DbcCommentHandler : public DbcStatementHandler {</span>
<span id="L101"><span class="lineNum"> 101</span> : : public:</span>
<span id="L102"><span class="lineNum"> 102</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L103"><span class="lineNum"> 103</span> : : };</span>
<span id="L104"><span class="lineNum"> 104</span> : : </span>
<span id="L105"><span class="lineNum"> 105</span> : : /** @brief Defer typed attribute statements for resolution. */</span>
<span id="L106"><span class="lineNum"> 106</span> : : class DbcAttributeHandler : public DbcStatementHandler {</span>
<span id="L107"><span class="lineNum"> 107</span> : : public:</span>
<span id="L108"><span class="lineNum"> 108</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L109"><span class="lineNum"> 109</span> : : };</span>
<span id="L110"><span class="lineNum"> 110</span> : : </span>
<span id="L111"><span class="lineNum"> 111</span> : : /** @brief Defer raw value descriptions for target resolution. */</span>
<span id="L112"><span class="lineNum"> 112</span> : : class DbcValueDescriptionHandler : public DbcStatementHandler {</span>
<span id="L113"><span class="lineNum"> 113</span> : : public:</span>
<span id="L114"><span class="lineNum"> 114</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L115"><span class="lineNum"> 115</span> : : };</span>
<span id="L116"><span class="lineNum"> 116</span> : : </span>
<span id="L117"><span class="lineNum"> 117</span> : : /** @brief Reject unsupported extended multiplexing statements. */</span>
<span id="L118"><span class="lineNum"> 118</span> : : class DbcUnsupportedMultiplexingHandler : public DbcStatementHandler {</span>
<span id="L119"><span class="lineNum"> 119</span> : : public:</span>
<span id="L120"><span class="lineNum"> 120</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L121"><span class="lineNum"> 121</span> : : };</span>
<span id="L122"><span class="lineNum"> 122</span> : : </span>
<span id="L123"><span class="lineNum"> 123</span> : : /** Common header metadata does not change the supported decode definitions. */</span>
<span id="L124"><span class="lineNum"> 124</span> : : class DbcHeaderHandler : public DbcStatementHandler {</span>
<span id="L125"><span class="lineNum"> 125</span> : : public:</span>
<span id="L126"><span class="lineNum"> 126</span> : : void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override;</span>
<span id="L127"><span class="lineNum"> 127</span> : : };</span>
<span id="L128"><span class="lineNum"> 128</span> : : </span>
<span id="L129"><span class="lineNum"> 129</span> : : /** Exact-key dispatch to handlers created once per registration via TypeFactory. */</span>
<span id="L130"><span class="lineNum"> 130</span> : : class DbcStatementDispatcher {</span>
<span id="L131"><span class="lineNum"> 131</span> : : public:</span>
<span id="L132"><span class="lineNum"> 132</span> : : /** @brief Register supported statement handlers through TypeFactory. */</span>
<span id="L133"><span class="lineNum"> 133</span> : : DbcStatementDispatcher();</span>
<span id="L134"><span class="lineNum"> 134</span> : : </span>
<span id="L135"><span class="lineNum"> 135</span> : : /** @brief Register or replace a handler and create its reusable instance. */</span>
<span id="L136"><span class="lineNum"> 136</span> : : template&lt;class Handler&gt;</span>
<span id="L137"><span class="lineNum"> 137</span> :<span class="tlaGNC"> 14236 : void RegisterType(const std::string &amp;keyword) {</span></span>
<span id="L138"><span class="lineNum"> 138</span> :<span class="tlaGNC"> 14236 : m_factory.registerType&lt;Handler&gt;(keyword);</span></span>
<span id="L139"><span class="lineNum"> 139</span> [<span class="tlaGBC" title="Branch 0 was taken 14236 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 14236 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 14236 : m_handlers.insert_or_assign(keyword, m_factory.create(keyword));</span></span>
<span id="L140"><span class="lineNum"> 140</span> :<span class="tlaGNC"> 14236 : }</span></span>
<span id="L141"><span class="lineNum"> 141</span> : : </span>
<span id="L142"><span class="lineNum"> 142</span> : : /** Returns false for an unregistered keyword; input must be trimmed. */</span>
<span id="L143"><span class="lineNum"> 143</span> : : bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const;</span>
<span id="L144"><span class="lineNum"> 144</span> : : </span>
<span id="L145"><span class="lineNum"> 145</span> : : private:</span>
<span id="L146"><span class="lineNum"> 146</span> : : using HandlerMap = std::unordered_map&lt;std::string, std::shared_ptr&lt;DbcStatementHandler&gt;&gt;;</span>
<span id="L147"><span class="lineNum"> 147</span> : : TypeFactory&lt;std::string, DbcStatementHandler&gt; m_factory;</span>
<span id="L148"><span class="lineNum"> 148</span> : : HandlerMap m_handlers;</span>
<span id="L149"><span class="lineNum"> 149</span> : : };</span>
<span id="L150"><span class="lineNum"> 150</span> : : </span>
<span id="L151"><span class="lineNum"> 151</span> : : #endif /* DBC_STATEMENT_HANDLER_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_tree_builder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_tree_builder.cpp<span style="font-size: 80%;"> (<a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">91.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">66.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="dbc_tree_builder.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_tree_builder.cpp.gcov.html#L12">DbcTreeBuilder::Build(DbcDatabase const&amp;) const</a></td>
<td class="coverFnHi">22</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_tree_builder.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_tree_builder.cpp<span style="font-size: 80%;"> (<a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">91.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">66.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="dbc_tree_builder.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="dbc_tree_builder.cpp.gcov.html#L12">DbcTreeBuilder::Build(DbcDatabase const&amp;) const</a></td>
<td class="coverFnHi">22</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,114 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/dbc_tree_builder.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - dbc_tree_builder.cpp<span style="font-size: 80%;"> (source / <a href="dbc_tree_builder.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">91.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">66.7&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file dbc_tree_builder.cpp</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief Construction of frame and signal metadata trees.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #include &quot;dbc_tree_builder.h&quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : : </span>
<span id="L14"><span class="lineNum"> 14</span> :<span class="tlaGNC"> 22 : std::unique_ptr&lt;TreeNode&gt; DbcTreeBuilder::Build(const DbcDatabase &amp;database) const {</span></span>
<span id="L15"><span class="lineNum"> 15</span> :<span class="tlaGNC"> 22 : std::unique_ptr&lt;TreeNode&gt; root = std::make_unique&lt;TreeNode&gt;();</span></span>
<span id="L16"><span class="lineNum"> 16</span> : : </span>
<span id="L17"><span class="lineNum"> 17</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 22 times"> + </span>]:<span class="tlaGNC"> 53 : for (const FrameInfo &amp;frame : database.frames) {</span></span>
<span id="L18"><span class="lineNum"> 18</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 31 : std::unique_ptr&lt;TreeNode&gt; frameNode = std::make_unique&lt;TreeNode&gt;(frame);</span></span>
<span id="L19"><span class="lineNum"> 19</span> : : </span>
<span id="L20"><span class="lineNum"> 20</span> [<span class="tlaGBC" title="Branch 0 was taken 44 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 31 times"> + </span>]:<span class="tlaGNC"> 75 : for (const SignalInfo &amp;signal : frame.signals) {</span></span>
<span id="L21"><span class="lineNum"> 21</span> [<span class="tlaGBC" title="Branch 0 was taken 44 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 44 : std::unique_ptr&lt;TreeNode&gt; signalNode = std::make_unique&lt;TreeNode&gt;(signal);</span></span>
<span id="L22"><span class="lineNum"> 22</span> [<span class="tlaGBC" title="Branch 0 was taken 44 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 44 : frameNode-&gt;AddChild(std::move(signalNode));</span></span>
<span id="L23"><span class="lineNum"> 23</span> :<span class="tlaGNC"> 44 : }</span></span>
<span id="L24"><span class="lineNum"> 24</span> : : </span>
<span id="L25"><span class="lineNum"> 25</span> [<span class="tlaGBC" title="Branch 0 was taken 31 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 31 : root-&gt;AddChild(std::move(frameNode));</span></span>
<span id="L26"><span class="lineNum"> 26</span> :<span class="tlaGNC"> 31 : }</span></span>
<span id="L27"><span class="lineNum"> 27</span> : : </span>
<span id="L28"><span class="lineNum"> 28</span> :<span class="tlaGNC"> 22 : return root;</span></span>
<span id="L29"><span class="lineNum"> 29</span> :<span class="tlaUNC"> 0 : }</span></span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,165 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.cpp<span style="font-size: 80%;"> (<a href="decode_database.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.1&nbsp;%</td>
<td class="headerCovTableEntry">110</td>
<td class="headerCovTableEntry">109</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">80.2&nbsp;%</td>
<td class="headerCovTableEntry">182</td>
<td class="headerCovTableEntry">146</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="decode_database.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L144">DecodeDatabase::FindSignal(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">53</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L46">(anonymous namespace)::AreMutuallyExclusive(DecodeSignal const&amp;, DecodeSignal const&amp;)</a></td>
<td class="coverFnHi">71</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L113">DecodeDatabase::GetFrames() const</a></td>
<td class="coverFnHi">76</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L128">DecodeDatabase::FindFrameByPgn(unsigned int) const</a></td>
<td class="coverFnHi">116</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L33">(anonymous namespace)::GetSignalBits(DecodeSignal const&amp;)</a></td>
<td class="coverFnHi">2364</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L109">DecodeDatabase::DecodeDatabase(std::vector&lt;DecodeFrame, std::allocator&lt;DecodeFrame&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2394</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L91">DecodeDatabase::Storage::Storage(std::vector&lt;DecodeFrame, std::allocator&lt;DecodeFrame&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2394</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L52">(anonymous namespace)::ValidateFrame(DecodeFrame const&amp;)</a></td>
<td class="coverFnHi">2447</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L15">(anonymous namespace)::ValidateSignal(DecodeSignal const&amp;, unsigned char)</a></td>
<td class="coverFnHi">2476</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L118">DecodeDatabase::FindFrame(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">6555</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,165 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.cpp<span style="font-size: 80%;"> (<a href="decode_database.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.1&nbsp;%</td>
<td class="headerCovTableEntry">110</td>
<td class="headerCovTableEntry">109</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">80.2&nbsp;%</td>
<td class="headerCovTableEntry">182</td>
<td class="headerCovTableEntry">146</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="decode_database.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L46">(anonymous namespace)::AreMutuallyExclusive(DecodeSignal const&amp;, DecodeSignal const&amp;)</a></td>
<td class="coverFnHi">71</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L33">(anonymous namespace)::GetSignalBits(DecodeSignal const&amp;)</a></td>
<td class="coverFnHi">2364</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L52">(anonymous namespace)::ValidateFrame(DecodeFrame const&amp;)</a></td>
<td class="coverFnHi">2447</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L15">(anonymous namespace)::ValidateSignal(DecodeSignal const&amp;, unsigned char)</a></td>
<td class="coverFnHi">2476</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L109">DecodeDatabase::DecodeDatabase(std::vector&lt;DecodeFrame, std::allocator&lt;DecodeFrame&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2394</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L118">DecodeDatabase::FindFrame(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">6555</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L128">DecodeDatabase::FindFrameByPgn(unsigned int) const</a></td>
<td class="coverFnHi">116</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L144">DecodeDatabase::FindSignal(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">53</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L113">DecodeDatabase::GetFrames() const</a></td>
<td class="coverFnHi">76</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.cpp.gcov.html#L91">DecodeDatabase::Storage::Storage(std::vector&lt;DecodeFrame, std::allocator&lt;DecodeFrame&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2394</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,243 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.cpp<span style="font-size: 80%;"> (source / <a href="decode_database.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">99.1&nbsp;%</td>
<td class="headerCovTableEntry">110</td>
<td class="headerCovTableEntry">109</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">80.2&nbsp;%</td>
<td class="headerCovTableEntry">182</td>
<td class="headerCovTableEntry">146</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : // Copyright (c) 2026 Dim Himro</span>
<span id="L3"><span class="lineNum"> 3</span> : : </span>
<span id="L4"><span class="lineNum"> 4</span> : : #include &quot;decode_database.h&quot;</span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &quot;j1939.h&quot;</span>
<span id="L6"><span class="lineNum"> 6</span> : : #include &quot;signal_layout.h&quot;</span>
<span id="L7"><span class="lineNum"> 7</span> : : #include &lt;bitset&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : : #include &lt;cmath&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : : #include &lt;limits&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : : #include &lt;stdexcept&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : : #include &lt;unordered_set&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : : </span>
<span id="L13"><span class="lineNum"> 13</span> : : namespace {</span>
<span id="L14"><span class="lineNum"> 14</span> : : constexpr std::size_t MaximumPayloadBits = std::numeric_limits&lt;std::uint8_t&gt;::max() * 8U;</span>
<span id="L15"><span class="lineNum"> 15</span> : : using SignalBits = std::bitset&lt;MaximumPayloadBits&gt;;</span>
<span id="L16"><span class="lineNum"> 16</span> : : </span>
<span id="L17"><span class="lineNum"> 17</span> :<span class="tlaGNC"> 2476 : void ValidateSignal(const DecodeSignal &amp;signal, std::uint8_t dlc) {</span></span>
<span id="L18"><span class="lineNum"> 18</span> [<span class="tlaGBC" title="Branch 0 was taken 1133 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1343 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1130 times"> + </span>]:<span class="tlaGNC"> 2476 : if (signal.byteOrder != ByteOrder::Intel &amp;&amp; signal.byteOrder != ByteOrder::Motorola)</span></span>
<span id="L19"><span class="lineNum"> 19</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument(&quot;Invalid signal byte order: &quot; + signal.name);</span></span>
<span id="L20"><span class="lineNum"> 20</span> [<span class="tlaGBC" title="Branch 0 was taken 93 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2380 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 90 times"> + </span>]:<span class="tlaGNC"> 2473 : if (signal.valueType != ValueType::Unsigned &amp;&amp; signal.valueType != ValueType::Signed)</span></span>
<span id="L21"><span class="lineNum"> 21</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument(&quot;Invalid signal value type: &quot; + signal.name);</span></span>
<span id="L22"><span class="lineNum"> 22</span> [<span class="tlaGBC" title="Branch 0 was taken 75 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2395 times"> + </span>]:<span class="tlaGNC"> 2470 : if (signal.multiplexing.role != MultiplexRole::Unconditional &amp;&amp;</span></span>
<span id="L23"><span class="lineNum"> 23</span> [<span class="tlaGBC" title="Branch 0 was taken 38 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 37 times"> + </span>]:<span class="tlaGNC"> 75 : signal.multiplexing.role != MultiplexRole::Selector &amp;&amp;</span></span>
<span id="L24"><span class="lineNum"> 24</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 34 times"> + </span>]:<span class="tlaGNC"> 38 : signal.multiplexing.role != MultiplexRole::Branch)</span></span>
<span id="L25"><span class="lineNum"> 25</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::invalid_argument(&quot;Invalid multiplexing role: &quot; + signal.name);</span></span>
<span id="L26"><span class="lineNum"> 26</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2430 times"> + </span>]:<span class="tlaGNC"> 2466 : if (!IsValidSignalLayout(signal.startBit, signal.length,</span></span>
<span id="L27"><span class="lineNum"> 27</span> :<span class="tlaGNC"> 2466 : signal.byteOrder == ByteOrder::Intel, dlc))</span></span>
<span id="L28"><span class="lineNum"> 28</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 36 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 36 : throw std::invalid_argument(&quot;Invalid signal length or payload position: &quot; + signal.name);</span></span>
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 2405 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 12 times"> + </span>]:<span class="tlaGNC"> 4847 : if (!std::isfinite(signal.factor) || !std::isfinite(signal.offset) ||</span></span>
<span id="L30"><span class="lineNum"> 30</span> [<span class="tlaGBC" title="Branch 0 was taken 2417 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2399 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 6 times"> + </span> :<span class="tlaGNC"> 7240 : !std::isfinite(signal.minimum) || !std::isfinite(signal.maximum) ||</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2393 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 39 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2391 times"> + </span>]
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2391 times"> + </span>]:<span class="tlaGNC"> 2393 : signal.minimum &gt; signal.maximum)</span></span>
<span id="L32"><span class="lineNum"> 32</span> [<span class="tlaGBC" title="Branch 0 was taken 39 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 39 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 39 : throw std::invalid_argument(&quot;Invalid signal numeric parameters: &quot; + signal.name);</span></span>
<span id="L33"><span class="lineNum"> 33</span> :<span class="tlaGNC"> 2391 : }</span></span>
<span id="L34"><span class="lineNum"> 34</span> : : </span>
<span id="L35"><span class="lineNum"> 35</span> :<span class="tlaGNC"> 2364 : SignalBits GetSignalBits(const DecodeSignal &amp;signal) {</span></span>
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 2364 : SignalBits bits;</span></span>
<span id="L37"><span class="lineNum"> 37</span> :<span class="tlaGNC"> 2364 : const bool littleEndian = signal.byteOrder == ByteOrder::Intel;</span></span>
<span id="L38"><span class="lineNum"> 38</span> :<span class="tlaGNC"> 2364 : const std::uint64_t start = SignalStartCoordinate(signal.startBit, littleEndian);</span></span>
<span id="L39"><span class="lineNum"> 39</span> [<span class="tlaGBC" title="Branch 0 was taken 73229 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2364 times"> + </span>]:<span class="tlaGNC"> 75593 : for (std::uint32_t index = 0U; index &lt; signal.length; ++index) {</span></span>
<span id="L40"><span class="lineNum"> 40</span> :<span class="tlaGNC"> 73229 : const std::uint64_t coordinate = start + index;</span></span>
<span id="L41"><span class="lineNum"> 41</span> [<span class="tlaGBC" title="Branch 0 was taken 37131 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 36098 times"> + </span>]:<span class="tlaGNC"> 73229 : const std::uint64_t bit = littleEndian ? coordinate</span></span>
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 36098 : : coordinate / 8U * 8U + 7U - coordinate % 8U;</span></span>
<span id="L43"><span class="lineNum"> 43</span> :<span class="tlaGNC"> 73229 : bits.set(static_cast&lt;std::size_t&gt;(bit));</span></span>
<span id="L44"><span class="lineNum"> 44</span> : : }</span>
<span id="L45"><span class="lineNum"> 45</span> :<span class="tlaGNC"> 2364 : return bits;</span></span>
<span id="L46"><span class="lineNum"> 46</span> : : }</span>
<span id="L47"><span class="lineNum"> 47</span> : : </span>
<span id="L48"><span class="lineNum"> 48</span> :<span class="tlaGNC"> 71 : bool AreMutuallyExclusive(const DecodeSignal &amp;first, const DecodeSignal &amp;second) {</span></span>
<span id="L49"><span class="lineNum"> 49</span> :<span class="tlaGNC"> 96 : return first.multiplexing.role == MultiplexRole::Branch &amp;&amp;</span></span>
<span id="L50"><span class="lineNum"> 50</span> [<span class="tlaGBC" title="Branch 0 was taken 25 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 46 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span>]:<span class="tlaGNC"> 77 : second.multiplexing.role == MultiplexRole::Branch &amp;&amp;</span></span>
<span id="L51"><span class="lineNum"> 51</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span>]:<span class="tlaGNC"> 77 : first.multiplexing.value != second.multiplexing.value;</span></span>
<span id="L52"><span class="lineNum"> 52</span> : : }</span>
<span id="L53"><span class="lineNum"> 53</span> : : </span>
<span id="L54"><span class="lineNum"> 54</span> :<span class="tlaGNC"> 2447 : void ValidateFrame(const DecodeFrame &amp;frame) {</span></span>
<span id="L55"><span class="lineNum"> 55</span> [<span class="tlaGBC" title="Branch 0 was taken 72 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2375 times"> + </span>]:<span class="tlaGNC"> 2447 : const std::uint32_t maximumId = frame.isExtended ? 0x1FFFFFFFU : 0x7FFU;</span></span>
<span id="L56"><span class="lineNum"> 56</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2438 times"> + </span>]:<span class="tlaGNC"> 2447 : if (frame.canId &gt; maximumId)</span></span>
<span id="L57"><span class="lineNum"> 57</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 9 : throw std::invalid_argument(&quot;Invalid normalized CAN ID: &quot; + std::to_string(frame.canId));</span></span>
<span id="L58"><span class="lineNum"> 58</span> : : </span>
<span id="L59"><span class="lineNum"> 59</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2414 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span> :<span class="tlaGNC"> 2438 : if (frame.hasPgn &amp;&amp; (!frame.isExtended || frame.pgn != ExtractJ1939Pgn(frame.canId)))</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2435 times"> + </span>]
<span id="L60"><span class="lineNum"> 60</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument(&quot;Invalid J1939 PGN metadata: &quot; + frame.name);</span></span>
<span id="L61"><span class="lineNum"> 61</span> : : </span>
<span id="L62"><span class="lineNum"> 62</span> :<span class="tlaGNC"> 2435 : std::unordered_set&lt;std::string&gt; names;</span></span>
<span id="L63"><span class="lineNum"> 63</span> :<span class="tlaGNC"> 2435 : const DecodeSignal *selector = nullptr;</span></span>
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 2480 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2340 times"> + </span>]:<span class="tlaGNC"> 4820 : for (const DecodeSignal &amp;signal: frame.signals) {</span></span>
<span id="L65"><span class="lineNum"> 65</span> [<span class="tlaGBC" title="Branch 0 was taken 2480 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2476 times"> + </span>]:<span class="tlaGNC"> 2480 : if (!names.insert(signal.name).second)</span></span>
<span id="L66"><span class="lineNum"> 66</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::invalid_argument(&quot;Duplicate runtime signal key: &quot; + signal.name);</span></span>
<span id="L67"><span class="lineNum"> 67</span> [<span class="tlaGBC" title="Branch 0 was taken 2391 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 85 times"> + </span>]:<span class="tlaGNC"> 2476 : ValidateSignal(signal, frame.dlc);</span></span>
<span id="L68"><span class="lineNum"> 68</span> [<span class="tlaGBC" title="Branch 0 was taken 35 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2356 times"> + </span>]:<span class="tlaGNC"> 2391 : if (signal.multiplexing.role == MultiplexRole::Selector) {</span></span>
<span id="L69"><span class="lineNum"> 69</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 29 times"> + </span>]:<span class="tlaGNC"> 35 : if (selector != nullptr || signal.valueType != ValueType::Unsigned)</span></span>
<span id="L70"><span class="lineNum"> 70</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6 : throw std::invalid_argument(&quot;Multiplexing requires one unsigned selector per frame&quot;);</span></span>
<span id="L71"><span class="lineNum"> 71</span> :<span class="tlaGNC"> 29 : selector = &amp;signal;</span></span>
<span id="L72"><span class="lineNum"> 72</span> : : }</span>
<span id="L73"><span class="lineNum"> 73</span> : : }</span>
<span id="L74"><span class="lineNum"> 74</span> : : </span>
<span id="L75"><span class="lineNum"> 75</span> :<span class="tlaGNC"> 2340 : std::vector&lt;SignalBits&gt; layouts;</span></span>
<span id="L76"><span class="lineNum"> 76</span> [<span class="tlaGBC" title="Branch 0 was taken 2340 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2340 : layouts.reserve(frame.signals.size());</span></span>
<span id="L77"><span class="lineNum"> 77</span> [<span class="tlaGBC" title="Branch 0 was taken 2372 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2324 times"> + </span>]:<span class="tlaGNC"> 4696 : for (std::size_t index = 0U; index &lt; frame.signals.size(); ++index) {</span></span>
<span id="L78"><span class="lineNum"> 78</span> :<span class="tlaGNC"> 2372 : const DecodeSignal &amp;signal = frame.signals[index];</span></span>
<span id="L79"><span class="lineNum"> 79</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2340 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 27 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span>]:<span class="tlaGNC"> 2372 : if (signal.multiplexing.role == MultiplexRole::Branch &amp;&amp;</span></span>
<span id="L80"><span class="lineNum"> 80</span> :<span class="tlaGNC"> 27 : (selector == nullptr ||</span></span>
<span id="L81"><span class="lineNum"> 81</span> [<span class="tlaGBC" title="Branch 0 was taken 22 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span>]:<span class="tlaGNC"> 27 : (selector-&gt;length &lt; 64U &amp;&amp; signal.multiplexing.value &gt;= (std::uint64_t(1U) &lt;&lt; selector-&gt;length))))</span></span>
<span id="L82"><span class="lineNum"> 82</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 8 : throw std::invalid_argument(&quot;Missing selector or branch value outside selector range: &quot; + signal.name);</span></span>
<span id="L83"><span class="lineNum"> 83</span> [<span class="tlaGBC" title="Branch 0 was taken 2364 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2364 : const SignalBits bits = GetSignalBits(signal);</span></span>
<span id="L84"><span class="lineNum"> 84</span> [<span class="tlaGBC" title="Branch 0 was taken 71 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2356 times"> + </span>]:<span class="tlaGNC"> 2427 : for (std::size_t previous = 0U; previous &lt; index; ++previous) {</span></span>
<span id="L85"><span class="lineNum"> 85</span> [<span class="tlaGBC" title="Branch 0 was taken 68 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 60 times"> + </span> :<span class="tlaGNC"> 71 : if (!AreMutuallyExclusive(signal, frame.signals[previous]) &amp;&amp; (bits &amp; layouts[previous]).any())</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 63 times"> + </span>]
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 8 : throw std::invalid_argument(&quot;Overlapping signals: &quot; + signal.name);</span></span>
<span id="L87"><span class="lineNum"> 87</span> : : }</span>
<span id="L88"><span class="lineNum"> 88</span> [<span class="tlaGBC" title="Branch 0 was taken 2356 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2356 : layouts.push_back(bits);</span></span>
<span id="L89"><span class="lineNum"> 89</span> : : }</span>
<span id="L90"><span class="lineNum"> 90</span> :<span class="tlaGNC"> 2451 : }</span></span>
<span id="L91"><span class="lineNum"> 91</span> : : }// namespace</span>
<span id="L92"><span class="lineNum"> 92</span> : : </span>
<span id="L93"><span class="lineNum"> 93</span> :<span class="tlaGNC"> 2394 : DecodeDatabase::Storage::Storage(const std::vector&lt;DecodeFrame&gt; &amp;definitions)</span></span>
<span id="L94"><span class="lineNum"> 94</span> :<span class="tlaGNC"> 2394 : : frames(definitions) {</span></span>
<span id="L95"><span class="lineNum"> 95</span> : : // Validate the complete snapshot before creating its lookup index.</span>
<span id="L96"><span class="lineNum"> 96</span> :<span class="tlaGNC"> 2394 : std::unordered_set&lt;FrameKey, FrameKeyHasher&gt; keys;</span></span>
<span id="L97"><span class="lineNum"> 97</span> [<span class="tlaGBC" title="Branch 0 was taken 2394 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2394 : keys.reserve(frames.size());</span></span>
<span id="L98"><span class="lineNum"> 98</span> [<span class="tlaGBC" title="Branch 0 was taken 2447 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2266 times"> + </span>]:<span class="tlaGNC"> 4713 : for (const DecodeFrame &amp;frame: frames) {</span></span>
<span id="L99"><span class="lineNum"> 99</span> [<span class="tlaGBC" title="Branch 0 was taken 2324 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 123 times"> + </span>]:<span class="tlaGNC"> 2447 : ValidateFrame(frame);</span></span>
<span id="L100"><span class="lineNum"> 100</span> [<span class="tlaGBC" title="Branch 0 was taken 2324 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2319 times"> + </span>]:<span class="tlaGNC"> 2324 : if (!keys.insert(frame.GetKey()).second)</span></span>
<span id="L101"><span class="lineNum"> 101</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 5 : throw std::invalid_argument(&quot;Duplicate runtime frame key&quot;);</span></span>
<span id="L102"><span class="lineNum"> 102</span> : : }</span>
<span id="L103"><span class="lineNum"> 103</span> [<span class="tlaGBC" title="Branch 0 was taken 2266 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2266 : frameIndexByKey.reserve(frames.size());</span></span>
<span id="L104"><span class="lineNum"> 104</span> [<span class="tlaGBC" title="Branch 0 was taken 2314 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2266 times"> + </span>]:<span class="tlaGNC"> 4580 : for (std::size_t index = 0U; index &lt; frames.size(); ++index) {</span></span>
<span id="L105"><span class="lineNum"> 105</span> [<span class="tlaGBC" title="Branch 0 was taken 2314 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2314 : frameIndexByKey.emplace(frames[index].GetKey(), index);</span></span>
<span id="L106"><span class="lineNum"> 106</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2293 times"> + </span>]:<span class="tlaGNC"> 2314 : if (frames[index].hasPgn)</span></span>
<span id="L107"><span class="lineNum"> 107</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 21 : frameIndicesByPgn[frames[index].pgn].push_back(index);</span></span>
<span id="L108"><span class="lineNum"> 108</span> : : }</span>
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 2778 : }</span></span>
<span id="L110"><span class="lineNum"> 110</span> : : </span>
<span id="L111"><span class="lineNum"> 111</span> :<span class="tlaGNC"> 2394 : DecodeDatabase::DecodeDatabase(const std::vector&lt;DecodeFrame&gt; &amp;frames)</span></span>
<span id="L112"><span class="lineNum"> 112</span> :<span class="tlaGNC"> 2394 : : storage(std::make_shared&lt;const Storage&gt;(frames)) {</span></span>
<span id="L113"><span class="lineNum"> 113</span> :<span class="tlaGNC"> 2266 : }</span></span>
<span id="L114"><span class="lineNum"> 114</span> : : </span>
<span id="L115"><span class="lineNum"> 115</span> :<span class="tlaGNC"> 76 : const std::vector&lt;DecodeFrame&gt; &amp;DecodeDatabase::GetFrames() const {</span></span>
<span id="L116"><span class="lineNum"> 116</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 75 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 76 : static const std::vector&lt;DecodeFrame&gt; empty;</span></span>
<span id="L117"><span class="lineNum"> 117</span> [<span class="tlaGBC" title="Branch 0 was taken 74 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 76 : return storage ? storage-&gt;frames : empty;</span></span>
<span id="L118"><span class="lineNum"> 118</span> : : }</span>
<span id="L119"><span class="lineNum"> 119</span> : : </span>
<span id="L120"><span class="lineNum"> 120</span> :<span class="tlaGNC"> 6555 : std::shared_ptr&lt;const DecodeFrame&gt; DecodeDatabase::FindFrame(const FrameKey &amp;key) const {</span></span>
<span id="L121"><span class="lineNum"> 121</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6539 times"> + </span>]:<span class="tlaGNC"> 6555 : if (!storage)</span></span>
<span id="L122"><span class="lineNum"> 122</span> :<span class="tlaGNC"> 16 : return nullptr;</span></span>
<span id="L123"><span class="lineNum"> 123</span> : : const std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt;::const_iterator it =</span>
<span id="L124"><span class="lineNum"> 124</span> [<span class="tlaGBC" title="Branch 0 was taken 6539 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6539 : storage-&gt;frameIndexByKey.find(key);</span></span>
<span id="L125"><span class="lineNum"> 125</span> [<span class="tlaGBC" title="Branch 0 was taken 115 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6424 times"> + </span>]:<span class="tlaGNC"> 6539 : if (it == storage-&gt;frameIndexByKey.end())</span></span>
<span id="L126"><span class="lineNum"> 126</span> :<span class="tlaGNC"> 115 : return nullptr;</span></span>
<span id="L127"><span class="lineNum"> 127</span> :<span class="tlaGNC"> 6424 : return std::shared_ptr&lt;const DecodeFrame&gt;(storage, &amp;storage-&gt;frames[it-&gt;second]);</span></span>
<span id="L128"><span class="lineNum"> 128</span> : : }</span>
<span id="L129"><span class="lineNum"> 129</span> : : </span>
<span id="L130"><span class="lineNum"> 130</span> :<span class="tlaGNC"> 116 : PgnLookupResult DecodeDatabase::FindFrameByPgn(std::uint32_t pgn) const {</span></span>
<span id="L131"><span class="lineNum"> 131</span> :<span class="tlaGNC"> 116 : PgnLookupResult result;</span></span>
<span id="L132"><span class="lineNum"> 132</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 92 times"> + </span>]:<span class="tlaGNC"> 116 : if (!storage)</span></span>
<span id="L133"><span class="lineNum"> 133</span> :<span class="tlaGNC"> 24 : return result;</span></span>
<span id="L134"><span class="lineNum"> 134</span> : : const std::unordered_map&lt;std::uint32_t, std::vector&lt;std::size_t&gt;&gt;::const_iterator it =</span>
<span id="L135"><span class="lineNum"> 135</span> [<span class="tlaGBC" title="Branch 0 was taken 92 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 92 : storage-&gt;frameIndicesByPgn.find(pgn);</span></span>
<span id="L136"><span class="lineNum"> 136</span> [<span class="tlaGBC" title="Branch 0 was taken 47 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 45 times"> + </span>]:<span class="tlaGNC"> 92 : if (it == storage-&gt;frameIndicesByPgn.end())</span></span>
<span id="L137"><span class="lineNum"> 137</span> :<span class="tlaGNC"> 47 : return result;</span></span>
<span id="L138"><span class="lineNum"> 138</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span>]:<span class="tlaGNC"> 45 : if (it-&gt;second.size() != 1U) {</span></span>
<span id="L139"><span class="lineNum"> 139</span> :<span class="tlaGNC"> 16 : result.ambiguous = true;</span></span>
<span id="L140"><span class="lineNum"> 140</span> :<span class="tlaGNC"> 16 : return result;</span></span>
<span id="L141"><span class="lineNum"> 141</span> : : }</span>
<span id="L142"><span class="lineNum"> 142</span> :<span class="tlaGNC"> 29 : result.definition = std::shared_ptr&lt;const DecodeFrame&gt;(storage, &amp;storage-&gt;frames[it-&gt;second[0]]);</span></span>
<span id="L143"><span class="lineNum"> 143</span> :<span class="tlaGNC"> 29 : return result;</span></span>
<span id="L144"><span class="lineNum"> 144</span> :<span class="tlaUNC"> 0 : }</span></span>
<span id="L145"><span class="lineNum"> 145</span> : : </span>
<span id="L146"><span class="lineNum"> 146</span> :<span class="tlaGNC"> 53 : std::shared_ptr&lt;const DecodeSignal&gt; DecodeDatabase::FindSignal(const SignalKey &amp;key) const {</span></span>
<span id="L147"><span class="lineNum"> 147</span> [<span class="tlaGBC" title="Branch 0 was taken 53 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 53 : const std::shared_ptr&lt;const DecodeFrame&gt; frame = FindFrame(key.frame);</span></span>
<span id="L148"><span class="lineNum"> 148</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 43 times"> + </span>]:<span class="tlaGNC"> 53 : if (!frame)</span></span>
<span id="L149"><span class="lineNum"> 149</span> :<span class="tlaGNC"> 10 : return nullptr;</span></span>
<span id="L150"><span class="lineNum"> 150</span> [<span class="tlaGBC" title="Branch 0 was taken 48 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span>]:<span class="tlaGNC"> 53 : for (const DecodeSignal &amp;signal: frame-&gt;signals) {</span></span>
<span id="L151"><span class="lineNum"> 151</span> [<span class="tlaGBC" title="Branch 0 was taken 38 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 48 : if (signal.name == key.name)</span></span>
<span id="L152"><span class="lineNum"> 152</span> :<span class="tlaGNC"> 38 : return std::shared_ptr&lt;const DecodeSignal&gt;(frame, &amp;signal);</span></span>
<span id="L153"><span class="lineNum"> 153</span> : : }</span>
<span id="L154"><span class="lineNum"> 154</span> :<span class="tlaGNC"> 5 : return nullptr;</span></span>
<span id="L155"><span class="lineNum"> 155</span> :<span class="tlaGNC"> 53 : }</span></span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,108 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.h<span style="font-size: 80%;"> (<a href="decode_database.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="decode_database.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L101">DecodeDatabase::DecodeDatabase()</a></td>
<td class="coverFnHi">21</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L81">DecodeFrame::DecodeFrame()</a></td>
<td class="coverFnHi">2400</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L60">DecodeSignal::DecodeSignal()</a></td>
<td class="coverFnHi">2438</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L84">DecodeFrame::GetKey() const</a></td>
<td class="coverFnHi">11038</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,108 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.h<span style="font-size: 80%;"> (<a href="decode_database.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="decode_database.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L101">DecodeDatabase::DecodeDatabase()</a></td>
<td class="coverFnHi">21</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L81">DecodeFrame::DecodeFrame()</a></td>
<td class="coverFnHi">2400</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L84">DecodeFrame::GetKey() const</a></td>
<td class="coverFnHi">11038</td>
</tr>
<tr>
<td class="coverFn"><a href="decode_database.h.gcov.html#L60">DecodeSignal::DecodeSignal()</a></td>
<td class="coverFnHi">2438</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,209 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/decode_database.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.h<span style="font-size: 80%;"> (source / <a href="decode_database.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : * @file decode_database.h</span>
<span id="L3"><span class="lineNum"> 3</span> : * @brief Runtime definitions and immutable indexed database.</span>
<span id="L4"><span class="lineNum"> 4</span> : *</span>
<span id="L5"><span class="lineNum"> 5</span> : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : *</span>
<span id="L8"><span class="lineNum"> 8</span> : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : */</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #ifndef DECODE_DATABASE_H</span>
<span id="L13"><span class="lineNum"> 13</span> : #define DECODE_DATABASE_H</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &quot;attributes.h&quot;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &quot;definition_key.h&quot;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &quot;multiplexing.h&quot;</span>
<span id="L18"><span class="lineNum"> 18</span> : #include &quot;value_descriptions.h&quot;</span>
<span id="L19"><span class="lineNum"> 19</span> : #include &lt;cstdint&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : #include &lt;memory&gt;</span>
<span id="L21"><span class="lineNum"> 21</span> : #include &lt;string&gt;</span>
<span id="L22"><span class="lineNum"> 22</span> : #include &lt;unordered_map&gt;</span>
<span id="L23"><span class="lineNum"> 23</span> : #include &lt;vector&gt;</span>
<span id="L24"><span class="lineNum"> 24</span> : </span>
<span id="L25"><span class="lineNum"> 25</span> : /**</span>
<span id="L26"><span class="lineNum"> 26</span> : * @brief Signal byte order used for runtime decoding.</span>
<span id="L27"><span class="lineNum"> 27</span> : */</span>
<span id="L28"><span class="lineNum"> 28</span> : enum class ByteOrder {</span>
<span id="L29"><span class="lineNum"> 29</span> : Intel,</span>
<span id="L30"><span class="lineNum"> 30</span> : Motorola</span>
<span id="L31"><span class="lineNum"> 31</span> : };</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : /**</span>
<span id="L34"><span class="lineNum"> 34</span> : * @brief Signal numeric type.</span>
<span id="L35"><span class="lineNum"> 35</span> : */</span>
<span id="L36"><span class="lineNum"> 36</span> : enum class ValueType {</span>
<span id="L37"><span class="lineNum"> 37</span> : Unsigned,</span>
<span id="L38"><span class="lineNum"> 38</span> : Signed</span>
<span id="L39"><span class="lineNum"> 39</span> : };</span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> : /**</span>
<span id="L42"><span class="lineNum"> 42</span> : * @brief Runtime-ready signal definition.</span>
<span id="L43"><span class="lineNum"> 43</span> : */</span>
<span id="L44"><span class="lineNum"> 44</span> : struct DecodeSignal {</span>
<span id="L45"><span class="lineNum"> 45</span> : Multiplexing multiplexing; /**&lt; Selector role and branch value. */</span>
<span id="L46"><span class="lineNum"> 46</span> : std::string name; /**&lt; Signal name. */</span>
<span id="L47"><span class="lineNum"> 47</span> : std::uint32_t startBit = 0U; /**&lt; DBC start bit. */</span>
<span id="L48"><span class="lineNum"> 48</span> : std::uint32_t length = 0U; /**&lt; Signal length in bits. */</span>
<span id="L49"><span class="lineNum"> 49</span> : ByteOrder byteOrder = ByteOrder::Intel; /**&lt; Intel or Motorola. */</span>
<span id="L50"><span class="lineNum"> 50</span> : ValueType valueType = ValueType::Unsigned; /**&lt; Signed or unsigned. */</span>
<span id="L51"><span class="lineNum"> 51</span> : double factor = 1.0; /**&lt; Scaling factor. */</span>
<span id="L52"><span class="lineNum"> 52</span> : double offset = 0.0; /**&lt; Physical offset. */</span>
<span id="L53"><span class="lineNum"> 53</span> : double minimum = 0.0; /**&lt; Minimum physical value. */</span>
<span id="L54"><span class="lineNum"> 54</span> : double maximum = 0.0; /**&lt; Maximum physical value. */</span>
<span id="L55"><span class="lineNum"> 55</span> : std::string unit; /**&lt; Physical unit. */</span>
<span id="L56"><span class="lineNum"> 56</span> : std::vector&lt;std::string&gt; receivers; /**&lt; Receivers. */</span>
<span id="L57"><span class="lineNum"> 57</span> : ValueDescriptions valueDescriptions; /**&lt; Raw integer state descriptions. */</span>
<span id="L58"><span class="lineNum"> 58</span> : std::string comment; /**&lt; Comment. */</span>
<span id="L59"><span class="lineNum"> 59</span> : </span>
<span id="L60"><span class="lineNum"> 60</span> : AttributeMap attributes; /**&lt; Effective attributes after defaults and overrides. */</span>
<span id="L61"><span class="lineNum"> 61</span> : </span>
<span id="L62"><span class="lineNum"> 62</span> <span class="tlaGNC"> 2438 : DecodeSignal() = default;</span></span>
<span id="L63"><span class="lineNum"> 63</span> : };</span>
<span id="L64"><span class="lineNum"> 64</span> : </span>
<span id="L65"><span class="lineNum"> 65</span> : /**</span>
<span id="L66"><span class="lineNum"> 66</span> : * @brief Runtime-ready frame definition.</span>
<span id="L67"><span class="lineNum"> 67</span> : */</span>
<span id="L68"><span class="lineNum"> 68</span> : struct DecodeFrame {</span>
<span id="L69"><span class="lineNum"> 69</span> : std::string name; /**&lt; Frame name. */</span>
<span id="L70"><span class="lineNum"> 70</span> : std::uint32_t canId = 0U; /**&lt; Normalized CAN ID. */</span>
<span id="L71"><span class="lineNum"> 71</span> : bool isExtended = false; /**&lt; true for extended frame. */</span>
<span id="L72"><span class="lineNum"> 72</span> : std::uint8_t dlc = 0U; /**&lt; Payload length. */</span>
<span id="L73"><span class="lineNum"> 73</span> : std::uint32_t pgn = 0U; /**&lt; PGN if available. */</span>
<span id="L74"><span class="lineNum"> 74</span> : bool hasPgn = false; /**&lt; Explicit J1939 opt-in; pgn must match canId. */</span>
<span id="L75"><span class="lineNum"> 75</span> : std::string transmitter; /**&lt; Transmitter ECU. */</span>
<span id="L76"><span class="lineNum"> 76</span> : std::string comment; /**&lt; Frame comment. */</span>
<span id="L77"><span class="lineNum"> 77</span> : std::vector&lt;DecodeSignal&gt; signals; /**&lt; Signal definitions. */</span>
<span id="L78"><span class="lineNum"> 78</span> : </span>
<span id="L79"><span class="lineNum"> 79</span> : AttributeMap attributes; /**&lt; Effective attributes after defaults and overrides. */</span>
<span id="L80"><span class="lineNum"> 80</span> : std::optional&lt;std::string&gt; frameFormat; /**&lt; VFrameFormat label, when declared. */</span>
<span id="L81"><span class="lineNum"> 81</span> : std::optional&lt;std::uint32_t&gt; cycleTimeMs; /**&lt; GenMsgCycleTime in milliseconds, when declared. */</span>
<span id="L82"><span class="lineNum"> 82</span> : </span>
<span id="L83"><span class="lineNum"> 83</span> <span class="tlaGNC"> 2400 : DecodeFrame() = default;</span></span>
<span id="L84"><span class="lineNum"> 84</span> : </span>
<span id="L85"><span class="lineNum"> 85</span> : /** @brief Return the stable normalized frame identifier. */</span>
<span id="L86"><span class="lineNum"> 86</span> <span class="tlaGNC"> 11038 : FrameKey GetKey() const {</span></span>
<span id="L87"><span class="lineNum"> 87</span> <span class="tlaGNC"> 11038 : return FrameKey(canId, isExtended);</span></span>
<span id="L88"><span class="lineNum"> 88</span> : }</span>
<span id="L89"><span class="lineNum"> 89</span> : };</span>
<span id="L90"><span class="lineNum"> 90</span> : </span>
<span id="L91"><span class="lineNum"> 91</span> : /** A PGN lookup rejects multiple definitions rather than choosing by order. */</span>
<span id="L92"><span class="lineNum"> 92</span> : struct PgnLookupResult {</span>
<span id="L93"><span class="lineNum"> 93</span> : std::shared_ptr&lt;const DecodeFrame&gt; definition; /**&lt; Owning matched definition; empty if missing or ambiguous. */</span>
<span id="L94"><span class="lineNum"> 94</span> : bool ambiguous = false; /**&lt; True when multiple definitions share the requested PGN. */</span>
<span id="L95"><span class="lineNum"> 95</span> : };</span>
<span id="L96"><span class="lineNum"> 96</span> : </span>
<span id="L97"><span class="lineNum"> 97</span> : /**</span>
<span id="L98"><span class="lineNum"> 98</span> : * @brief Immutable runtime snapshot. Copies share storage; reload replaces a snapshot.</span>
<span id="L99"><span class="lineNum"> 99</span> : * Owning lookup handles and decoded results keep old definitions alive.</span>
<span id="L100"><span class="lineNum"> 100</span> : */</span>
<span id="L101"><span class="lineNum"> 101</span> : class DecodeDatabase {</span>
<span id="L102"><span class="lineNum"> 102</span> : public:</span>
<span id="L103"><span class="lineNum"> 103</span> <span class="tlaGNC"> 21 : DecodeDatabase() = default;</span></span>
<span id="L104"><span class="lineNum"> 104</span> : /**</span>
<span id="L105"><span class="lineNum"> 105</span> : * Copy and validate definitions before building the frame index.</span>
<span id="L106"><span class="lineNum"> 106</span> : * Input aliases cannot modify the snapshot, even for rvalue input.</span>
<span id="L107"><span class="lineNum"> 107</span> : * @throws std::invalid_argument for invalid metadata or duplicate keys.</span>
<span id="L108"><span class="lineNum"> 108</span> : */</span>
<span id="L109"><span class="lineNum"> 109</span> : explicit DecodeDatabase(const std::vector&lt;DecodeFrame&gt; &amp;frames);</span>
<span id="L110"><span class="lineNum"> 110</span> : </span>
<span id="L111"><span class="lineNum"> 111</span> : /** Borrowed view, valid while this snapshot remains alive and unchanged. */</span>
<span id="L112"><span class="lineNum"> 112</span> : const std::vector&lt;DecodeFrame&gt; &amp;GetFrames() const;</span>
<span id="L113"><span class="lineNum"> 113</span> : /** Owning handles retain the entire snapshot across reload or destruction. */</span>
<span id="L114"><span class="lineNum"> 114</span> : std::shared_ptr&lt;const DecodeFrame&gt; FindFrame(const FrameKey &amp;key) const;</span>
<span id="L115"><span class="lineNum"> 115</span> : /** Only explicitly marked hasPgn frames participate; ambiguous results have no definition. */</span>
<span id="L116"><span class="lineNum"> 116</span> : PgnLookupResult FindFrameByPgn(std::uint32_t pgn) const;</span>
<span id="L117"><span class="lineNum"> 117</span> : /** @brief Return an owning signal handle, or an empty handle for a missing key. */</span>
<span id="L118"><span class="lineNum"> 118</span> : std::shared_ptr&lt;const DecodeSignal&gt; FindSignal(const SignalKey &amp;key) const;</span>
<span id="L119"><span class="lineNum"> 119</span> : </span>
<span id="L120"><span class="lineNum"> 120</span> : private:</span>
<span id="L121"><span class="lineNum"> 121</span> : struct Storage {</span>
<span id="L122"><span class="lineNum"> 122</span> : std::vector&lt;DecodeFrame&gt; frames;</span>
<span id="L123"><span class="lineNum"> 123</span> : std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt; frameIndexByKey;</span>
<span id="L124"><span class="lineNum"> 124</span> : </span>
<span id="L125"><span class="lineNum"> 125</span> : std::unordered_map&lt;std::uint32_t, std::vector&lt;std::size_t&gt;&gt; frameIndicesByPgn;</span>
<span id="L126"><span class="lineNum"> 126</span> : </span>
<span id="L127"><span class="lineNum"> 127</span> : explicit Storage(const std::vector&lt;DecodeFrame&gt; &amp;definitions);</span>
<span id="L128"><span class="lineNum"> 128</span> : };</span>
<span id="L129"><span class="lineNum"> 129</span> : </span>
<span id="L130"><span class="lineNum"> 130</span> : std::shared_ptr&lt;const Storage&gt; storage;</span>
<span id="L131"><span class="lineNum"> 131</span> : };</span>
<span id="L132"><span class="lineNum"> 132</span> : </span>
<span id="L133"><span class="lineNum"> 133</span> : #endif /* DECODE_DATABASE_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/definition_key.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - definition_key.h<span style="font-size: 80%;"> (<a href="definition_key.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">18</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">7</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="definition_key.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L62">SignalKeyHasher::operator()(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">9</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L54">SignalKey::operator==(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L47">SignalKey::SignalKey()</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L49">SignalKey::SignalKey(FrameKey, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;)</a></td>
<td class="coverFnHi">6454</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L25">FrameKey::operator==(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">6502</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L35">FrameKeyHasher::operator()(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">11161</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L17">FrameKey::FrameKey()</a></td>
<td class="coverFnHi">12789</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L20">FrameKey::FrameKey(unsigned int, bool)</a></td>
<td class="coverFnHi">23974</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/definition_key.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - definition_key.h<span style="font-size: 80%;"> (<a href="definition_key.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">18</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">7</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="definition_key.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L17">FrameKey::FrameKey()</a></td>
<td class="coverFnHi">12789</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L20">FrameKey::FrameKey(unsigned int, bool)</a></td>
<td class="coverFnHi">23974</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L25">FrameKey::operator==(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">6502</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L35">FrameKeyHasher::operator()(FrameKey const&amp;) const</a></td>
<td class="coverFnHi">11161</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L47">SignalKey::SignalKey()</a></td>
<td class="coverFnHi">6380</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L49">SignalKey::SignalKey(FrameKey, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;)</a></td>
<td class="coverFnHi">6454</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L54">SignalKey::operator==(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
<td class="coverFn"><a href="definition_key.h.gcov.html#L62">SignalKeyHasher::operator()(SignalKey const&amp;) const</a></td>
<td class="coverFnHi">9</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,154 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/definition_key.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - definition_key.h<span style="font-size: 80%;"> (source / <a href="definition_key.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">18</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">70.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">7</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : // Copyright (c) 2026 Dim Himro</span>
<span id="L3"><span class="lineNum"> 3</span> : : </span>
<span id="L4"><span class="lineNum"> 4</span> : : #ifndef DEFINITION_KEY_H</span>
<span id="L5"><span class="lineNum"> 5</span> : : #define DEFINITION_KEY_H</span>
<span id="L6"><span class="lineNum"> 6</span> : : </span>
<span id="L7"><span class="lineNum"> 7</span> : : #include &lt;cstdint&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : : #include &lt;functional&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : : #include &lt;string&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : : #include &lt;utility&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : /**</span>
<span id="L13"><span class="lineNum"> 13</span> : : * @brief Stable frame identifier: normalized CAN ID and frame type.</span>
<span id="L14"><span class="lineNum"> 14</span> : : */</span>
<span id="L15"><span class="lineNum"> 15</span> : : struct FrameKey {</span>
<span id="L16"><span class="lineNum"> 16</span> : : std::uint32_t canId = 0U; /**&lt; Normalized CAN identifier. */</span>
<span id="L17"><span class="lineNum"> 17</span> : : bool isExtended = false; /**&lt; True for extended CAN frames. */</span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> :<span class="tlaGNC"> 12789 : FrameKey() = default;</span></span>
<span id="L20"><span class="lineNum"> 20</span> : : </span>
<span id="L21"><span class="lineNum"> 21</span> : : /** @brief Create a key from a normalized identifier and frame type. */</span>
<span id="L22"><span class="lineNum"> 22</span> :<span class="tlaGNC"> 23974 : FrameKey(std::uint32_t id, bool extended)</span></span>
<span id="L23"><span class="lineNum"> 23</span> :<span class="tlaGNC"> 23974 : : canId(id), isExtended(extended) {</span></span>
<span id="L24"><span class="lineNum"> 24</span> :<span class="tlaGNC"> 23974 : }</span></span>
<span id="L25"><span class="lineNum"> 25</span> : : </span>
<span id="L26"><span class="lineNum"> 26</span> : : /** @brief Compare all logical identity fields. */</span>
<span id="L27"><span class="lineNum"> 27</span> :<span class="tlaGNC"> 6502 : bool operator==(const FrameKey &amp;other) const {</span></span>
<span id="L28"><span class="lineNum"> 28</span> [<span class="tlaGBC" title="Branch 0 was taken 6498 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 6498 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 6502 : return (canId == other.canId) &amp;&amp; (isExtended == other.isExtended);</span></span>
<span id="L29"><span class="lineNum"> 29</span> : : }</span>
<span id="L30"><span class="lineNum"> 30</span> : : };</span>
<span id="L31"><span class="lineNum"> 31</span> : : </span>
<span id="L32"><span class="lineNum"> 32</span> : : /**</span>
<span id="L33"><span class="lineNum"> 33</span> : : * @brief Hasher for frame key.</span>
<span id="L34"><span class="lineNum"> 34</span> : : */</span>
<span id="L35"><span class="lineNum"> 35</span> : : struct FrameKeyHasher {</span>
<span id="L36"><span class="lineNum"> 36</span> : : /** @brief Hash the logical identity fields. */</span>
<span id="L37"><span class="lineNum"> 37</span> :<span class="tlaGNC"> 11161 : std::size_t operator()(const FrameKey &amp;key) const {</span></span>
<span id="L38"><span class="lineNum"> 38</span> :<span class="tlaGNC"> 11161 : const std::size_t a = static_cast&lt;std::size_t&gt;(key.canId);</span></span>
<span id="L39"><span class="lineNum"> 39</span> [<span class="tlaGBC" title="Branch 0 was taken 273 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10888 times"> + </span>]:<span class="tlaGNC"> 11161 : const std::size_t b = key.isExtended ? 1U : 0U;</span></span>
<span id="L40"><span class="lineNum"> 40</span> :<span class="tlaGNC"> 11161 : return (a * 1315423911U) ^ b;</span></span>
<span id="L41"><span class="lineNum"> 41</span> : : }</span>
<span id="L42"><span class="lineNum"> 42</span> : : };</span>
<span id="L43"><span class="lineNum"> 43</span> : : </span>
<span id="L44"><span class="lineNum"> 44</span> : : /** Stable signal identifier within one logical DBC database. */</span>
<span id="L45"><span class="lineNum"> 45</span> : : struct SignalKey {</span>
<span id="L46"><span class="lineNum"> 46</span> : : FrameKey frame; /**&lt; Owning frame identity. */</span>
<span id="L47"><span class="lineNum"> 47</span> : : std::string name; /**&lt; Signal name within the frame. */</span>
<span id="L48"><span class="lineNum"> 48</span> : : </span>
<span id="L49"><span class="lineNum"> 49</span> :<span class="tlaGNC"> 6380 : SignalKey() = default;</span></span>
<span id="L50"><span class="lineNum"> 50</span> : : /** @brief Create a signal key from its frame identity and name. */</span>
<span id="L51"><span class="lineNum"> 51</span> :<span class="tlaGNC"> 6454 : SignalKey(FrameKey frameKey, std::string signalName)</span></span>
<span id="L52"><span class="lineNum"> 52</span> :<span class="tlaGNC"> 6454 : : frame(frameKey), name(std::move(signalName)) {</span></span>
<span id="L53"><span class="lineNum"> 53</span> :<span class="tlaGNC"> 6454 : }</span></span>
<span id="L54"><span class="lineNum"> 54</span> : : </span>
<span id="L55"><span class="lineNum"> 55</span> : : /** @brief Compare all logical identity fields. */</span>
<span id="L56"><span class="lineNum"> 56</span> :<span class="tlaGNC"> 22 : bool operator==(const SignalKey &amp;other) const {</span></span>
<span id="L57"><span class="lineNum"> 57</span> [<span class="tlaGBC" title="Branch 0 was taken 22 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 22 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 22 : return frame == other.frame &amp;&amp; name == other.name;</span></span>
<span id="L58"><span class="lineNum"> 58</span> : : }</span>
<span id="L59"><span class="lineNum"> 59</span> : : };</span>
<span id="L60"><span class="lineNum"> 60</span> : : </span>
<span id="L61"><span class="lineNum"> 61</span> : : /** @brief Hasher for stable signal keys. */</span>
<span id="L62"><span class="lineNum"> 62</span> : : struct SignalKeyHasher {</span>
<span id="L63"><span class="lineNum"> 63</span> : : /** @brief Hash the logical identity fields. */</span>
<span id="L64"><span class="lineNum"> 64</span> :<span class="tlaGNC"> 9 : std::size_t operator()(const SignalKey &amp;key) const {</span></span>
<span id="L65"><span class="lineNum"> 65</span> :<span class="tlaGNC"> 9 : return FrameKeyHasher()(key.frame) ^ (std::hash&lt;std::string&gt;()(key.name) &lt;&lt; 1U);</span></span>
<span id="L66"><span class="lineNum"> 66</span> : : }</span>
<span id="L67"><span class="lineNum"> 67</span> : : };</span>
<span id="L68"><span class="lineNum"> 68</span> : : </span>
<span id="L69"><span class="lineNum"> 69</span> : : #endif /* DEFINITION_KEY_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/frame_info.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - frame_info.h<span style="font-size: 80%;"> (<a href="frame_info.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="frame_info.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="frame_info.h.gcov.html#L39">FrameInfo::FrameInfo()</a></td>
<td class="coverFnHi">716</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/frame_info.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - frame_info.h<span style="font-size: 80%;"> (<a href="frame_info.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="frame_info.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="frame_info.h.gcov.html#L39">FrameInfo::FrameInfo()</a></td>
<td class="coverFnHi">716</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,120 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/frame_info.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - frame_info.h<span style="font-size: 80%;"> (source / <a href="frame_info.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : * @file frame_info.h</span>
<span id="L3"><span class="lineNum"> 3</span> : * @brief Parsed CAN frame metadata.</span>
<span id="L4"><span class="lineNum"> 4</span> : *</span>
<span id="L5"><span class="lineNum"> 5</span> : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : *</span>
<span id="L8"><span class="lineNum"> 8</span> : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : */</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #ifndef FRAME_INFO_H</span>
<span id="L13"><span class="lineNum"> 13</span> : #define FRAME_INFO_H</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &quot;attributes.h&quot;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;cstdint&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;string&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : #include &lt;vector&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : </span>
<span id="L20"><span class="lineNum"> 20</span> : #include &quot;signal_info.h&quot;</span>
<span id="L21"><span class="lineNum"> 21</span> : </span>
<span id="L22"><span class="lineNum"> 22</span> : /**</span>
<span id="L23"><span class="lineNum"> 23</span> : * @brief Describes one CAN frame from a DBC file.</span>
<span id="L24"><span class="lineNum"> 24</span> : */</span>
<span id="L25"><span class="lineNum"> 25</span> : struct FrameInfo {</span>
<span id="L26"><span class="lineNum"> 26</span> : std::string name; /**&lt; Frame name. */</span>
<span id="L27"><span class="lineNum"> 27</span> : std::uint32_t canId = 0U; /**&lt; Normalized CAN identifier. */</span>
<span id="L28"><span class="lineNum"> 28</span> : bool isExtended = false; /**&lt; true for extended frame. */</span>
<span id="L29"><span class="lineNum"> 29</span> : std::uint32_t pgn = 0U; /**&lt; J1939 PGN if applicable. */</span>
<span id="L30"><span class="lineNum"> 30</span> : bool hasPgn = false; /**&lt; Explicit J1939 opt-in; pgn is derived from canId. */</span>
<span id="L31"><span class="lineNum"> 31</span> : std::uint8_t dlc = 0U; /**&lt; Frame payload length. */</span>
<span id="L32"><span class="lineNum"> 32</span> : std::string transmitter; /**&lt; Transmitter ECU name. */</span>
<span id="L33"><span class="lineNum"> 33</span> : std::string comment; /**&lt; Optional frame comment. */</span>
<span id="L34"><span class="lineNum"> 34</span> : std::vector&lt;SignalInfo&gt; signals; /**&lt; Signals contained in the frame. */</span>
<span id="L35"><span class="lineNum"> 35</span> : </span>
<span id="L36"><span class="lineNum"> 36</span> : std::optional&lt;std::string&gt; frameFormat; /**&lt; VFrameFormat label, when declared. */ /**&lt; VFrameFormat enum label. */</span>
<span id="L37"><span class="lineNum"> 37</span> : std::optional&lt;std::uint32_t&gt; cycleTimeMs; /**&lt; GenMsgCycleTime in milliseconds, when declared. */ /**&lt; GenMsgCycleTime; zero means unspecified. */</span>
<span id="L38"><span class="lineNum"> 38</span> : </span>
<span id="L39"><span class="lineNum"> 39</span> : AttributeMap attributes; /**&lt; Effective attributes after defaults and overrides. */ /**&lt; Effective values, including defaults. */</span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> <span class="tlaGNC"> 716 : FrameInfo() = default;</span></span>
<span id="L42"><span class="lineNum"> 42</span> : };</span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> : #endif /* FRAME_INFO_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
+439
View File
@@ -0,0 +1,439 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.6&nbsp;%</td>
<td class="headerCovTableEntry">1185</td>
<td class="headerCovTableEntry">1168</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">158</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">71.6&nbsp;%</td>
<td class="headerCovTableEntry">2152</td>
<td class="headerCovTableEntry">1540</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>File <span title="Click to sort table by file name" class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></a></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Branch Coverage <span title="Click to sort table by branch coverage" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Click to sort table by branch coverage" border=0></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.h">dbc_parser.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h">decode_database.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="frame_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/frame_info.h">frame_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h">signal_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h">tree_node.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h">dbc_statement_handler.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerLo">45.5&nbsp;%</td>
<td class="coverNumDflt">22</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="typefactory.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h">typefactory.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">27</td>
<td class="coverNumDflt">27</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decode_builder.cpp">dbc_decode_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">40</td>
<td class="coverPerLo">62.5&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">25</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_tree_builder.cpp">dbc_tree_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
</td>
<td class="coverPerHi">91.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.cpp">dbc_statement_handler.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.5%"><img src="../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
</td>
<td class="coverPerHi">99.5&nbsp;%</td>
<td class="coverNumDflt">370</td>
<td class="coverNumDflt">368</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumDflt">820</td>
<td class="coverNumDflt">561</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">31</td>
</tr>
<tr>
<td class="coverFile"><a href="definition_key.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h">definition_key.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
<td class="coverPerLo">70.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.cpp">dbc_parser.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
</td>
<td class="coverPerHi">99.0&nbsp;%</td>
<td class="coverNumDflt">99</td>
<td class="coverNumDflt">98</td>
<td class="coverPerLo">70.4&nbsp;%</td>
<td class="coverNumDflt">216</td>
<td class="coverNumDflt">152</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.cpp">dbc_decoder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.9%"><img src="../snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
<td class="coverPerHi">94.9&nbsp;%</td>
<td class="coverNumDflt">156</td>
<td class="coverNumDflt">148</td>
<td class="coverPerLo">72.8&nbsp;%</td>
<td class="coverNumDflt">158</td>
<td class="coverNumDflt">115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_attributes.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_attributes.cpp">dbc_attributes.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.8%"><img src="../snow.png" width=1 height=10 alt="98.8%"></td></tr></table>
</td>
<td class="coverPerHi">98.8&nbsp;%</td>
<td class="coverNumDflt">260</td>
<td class="coverNumDflt">257</td>
<td class="coverPerLo">73.5&nbsp;%</td>
<td class="coverNumDflt">604</td>
<td class="coverNumDflt">444</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">20</td>
<td class="coverNumDflt">20</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h">dbc_decoder.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">3</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.cpp">tree_node.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="98.1%"><img src="../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
</td>
<td class="coverPerHi">98.1&nbsp;%</td>
<td class="coverNumDflt">53</td>
<td class="coverNumDflt">52</td>
<td class="coverPerMed">76.2&nbsp;%</td>
<td class="coverNumDflt">42</td>
<td class="coverNumDflt">32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">15</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.cpp">decode_database.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumDflt">110</td>
<td class="coverNumDflt">109</td>
<td class="coverPerMed">80.2&nbsp;%</td>
<td class="coverNumDflt">182</td>
<td class="coverNumDflt">146</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="value_descriptions.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/value_descriptions.h">value_descriptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="j1939.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/j1939.h">j1939.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_diagnostic.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h">dbc_diagnostic.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_layout.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_layout.h">signal_layout.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="text_utils.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/text_utils.h">text_utils.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
+439
View File
@@ -0,0 +1,439 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.6&nbsp;%</td>
<td class="headerCovTableEntry">1185</td>
<td class="headerCovTableEntry">1168</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">158</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">71.6&nbsp;%</td>
<td class="headerCovTableEntry">2152</td>
<td class="headerCovTableEntry">1540</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>File <span title="Click to sort table by file name" class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></a></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Branch Coverage <span title="Click to sort table by branch coverage" class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Click to sort table by branch coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decode_builder.cpp">dbc_decode_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">40</td>
<td class="coverPerLo">62.5&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">25</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_diagnostic.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h">dbc_diagnostic.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.h">dbc_parser.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_tree_builder.cpp">dbc_tree_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
</td>
<td class="coverPerHi">91.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="frame_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/frame_info.h">frame_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="j1939.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/j1939.h">j1939.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h">signal_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="text_utils.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/text_utils.h">text_utils.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h">tree_node.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_layout.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_layout.h">signal_layout.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="value_descriptions.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/value_descriptions.h">value_descriptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h">dbc_decoder.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">3</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.cpp">dbc_parser.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
</td>
<td class="coverPerHi">99.0&nbsp;%</td>
<td class="coverNumDflt">99</td>
<td class="coverNumDflt">98</td>
<td class="coverPerLo">70.4&nbsp;%</td>
<td class="coverNumDflt">216</td>
<td class="coverNumDflt">152</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h">decode_database.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="definition_key.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h">definition_key.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
<td class="coverPerLo">70.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h">dbc_statement_handler.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerLo">45.5&nbsp;%</td>
<td class="coverNumDflt">22</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.cpp">decode_database.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumDflt">110</td>
<td class="coverNumDflt">109</td>
<td class="coverPerMed">80.2&nbsp;%</td>
<td class="coverNumDflt">182</td>
<td class="coverNumDflt">146</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.cpp">dbc_decoder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.9%"><img src="../snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
<td class="coverPerHi">94.9&nbsp;%</td>
<td class="coverNumDflt">156</td>
<td class="coverNumDflt">148</td>
<td class="coverPerLo">72.8&nbsp;%</td>
<td class="coverNumDflt">158</td>
<td class="coverNumDflt">115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.cpp">tree_node.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="98.1%"><img src="../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
</td>
<td class="coverPerHi">98.1&nbsp;%</td>
<td class="coverNumDflt">53</td>
<td class="coverNumDflt">52</td>
<td class="coverPerMed">76.2&nbsp;%</td>
<td class="coverNumDflt">42</td>
<td class="coverNumDflt">32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">15</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_attributes.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_attributes.cpp">dbc_attributes.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.8%"><img src="../snow.png" width=1 height=10 alt="98.8%"></td></tr></table>
</td>
<td class="coverPerHi">98.8&nbsp;%</td>
<td class="coverNumDflt">260</td>
<td class="coverNumDflt">257</td>
<td class="coverPerLo">73.5&nbsp;%</td>
<td class="coverNumDflt">604</td>
<td class="coverNumDflt">444</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">20</td>
<td class="coverNumDflt">20</td>
</tr>
<tr>
<td class="coverFile"><a href="typefactory.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h">typefactory.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">27</td>
<td class="coverNumDflt">27</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.cpp">dbc_statement_handler.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.5%"><img src="../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
</td>
<td class="coverPerHi">99.5&nbsp;%</td>
<td class="coverNumDflt">370</td>
<td class="coverNumDflt">368</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumDflt">820</td>
<td class="coverNumDflt">561</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">31</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
+439
View File
@@ -0,0 +1,439 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.6&nbsp;%</td>
<td class="headerCovTableEntry">1185</td>
<td class="headerCovTableEntry">1168</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">158</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">71.6&nbsp;%</td>
<td class="headerCovTableEntry">2152</td>
<td class="headerCovTableEntry">1540</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>File <span title="Click to sort table by file name" class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></a></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></span></td>
<td class="tableHead" colspan=3>Branch Coverage <span title="Click to sort table by branch coverage" class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Click to sort table by branch coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_tree_builder.cpp">dbc_tree_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
</td>
<td class="coverPerHi">91.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.cpp">dbc_decoder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.9%"><img src="../snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
<td class="coverPerHi">94.9&nbsp;%</td>
<td class="coverNumDflt">156</td>
<td class="coverNumDflt">148</td>
<td class="coverPerLo">72.8&nbsp;%</td>
<td class="coverNumDflt">158</td>
<td class="coverNumDflt">115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.cpp">tree_node.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="98.1%"><img src="../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
</td>
<td class="coverPerHi">98.1&nbsp;%</td>
<td class="coverNumDflt">53</td>
<td class="coverNumDflt">52</td>
<td class="coverPerMed">76.2&nbsp;%</td>
<td class="coverNumDflt">42</td>
<td class="coverNumDflt">32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">15</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_attributes.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_attributes.cpp">dbc_attributes.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.8%"><img src="../snow.png" width=1 height=10 alt="98.8%"></td></tr></table>
</td>
<td class="coverPerHi">98.8&nbsp;%</td>
<td class="coverNumDflt">260</td>
<td class="coverNumDflt">257</td>
<td class="coverPerLo">73.5&nbsp;%</td>
<td class="coverNumDflt">604</td>
<td class="coverNumDflt">444</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">20</td>
<td class="coverNumDflt">20</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.cpp">dbc_parser.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
</td>
<td class="coverPerHi">99.0&nbsp;%</td>
<td class="coverNumDflt">99</td>
<td class="coverNumDflt">98</td>
<td class="coverPerLo">70.4&nbsp;%</td>
<td class="coverNumDflt">216</td>
<td class="coverNumDflt">152</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.cpp">decode_database.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumDflt">110</td>
<td class="coverNumDflt">109</td>
<td class="coverPerMed">80.2&nbsp;%</td>
<td class="coverNumDflt">182</td>
<td class="coverNumDflt">146</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.cpp">dbc_statement_handler.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.5%"><img src="../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
</td>
<td class="coverPerHi">99.5&nbsp;%</td>
<td class="coverNumDflt">370</td>
<td class="coverNumDflt">368</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumDflt">820</td>
<td class="coverNumDflt">561</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">31</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.h">dbc_parser.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="frame_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/frame_info.h">frame_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h">signal_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h">tree_node.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="j1939.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/j1939.h">j1939.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h">dbc_decoder.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">3</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_diagnostic.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h">dbc_diagnostic.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h">decode_database.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_layout.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_layout.h">signal_layout.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h">dbc_statement_handler.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerLo">45.5&nbsp;%</td>
<td class="coverNumDflt">22</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="value_descriptions.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/value_descriptions.h">value_descriptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="text_utils.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/text_utils.h">text_utils.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="typefactory.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h">typefactory.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">27</td>
<td class="coverNumDflt">27</td>
</tr>
<tr>
<td class="coverFile"><a href="definition_key.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h">definition_key.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
<td class="coverPerLo">70.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decode_builder.cpp">dbc_decode_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">40</td>
<td class="coverPerLo">62.5&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">25</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
+439
View File
@@ -0,0 +1,439 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.6&nbsp;%</td>
<td class="headerCovTableEntry">1185</td>
<td class="headerCovTableEntry">1168</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">158</td>
<td class="headerCovTableEntry">158</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">71.6&nbsp;%</td>
<td class="headerCovTableEntry">2152</td>
<td class="headerCovTableEntry">1540</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
<td width="6%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>File <span title="Click to sort table by file name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Branch Coverage <span title="Click to sort table by branch coverage" class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Click to sort table by branch coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_attributes.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_attributes.cpp">dbc_attributes.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.8%"><img src="../snow.png" width=1 height=10 alt="98.8%"></td></tr></table>
</td>
<td class="coverPerHi">98.8&nbsp;%</td>
<td class="coverNumDflt">260</td>
<td class="coverNumDflt">257</td>
<td class="coverPerLo">73.5&nbsp;%</td>
<td class="coverNumDflt">604</td>
<td class="coverNumDflt">444</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">20</td>
<td class="coverNumDflt">20</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decode_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decode_builder.cpp">dbc_decode_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">40</td>
<td class="coverPerLo">62.5&nbsp;%</td>
<td class="coverNumDflt">40</td>
<td class="coverNumDflt">25</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.cpp">dbc_decoder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.9%"><img src="../snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
<td class="coverPerHi">94.9&nbsp;%</td>
<td class="coverNumDflt">156</td>
<td class="coverNumDflt">148</td>
<td class="coverPerLo">72.8&nbsp;%</td>
<td class="coverNumDflt">158</td>
<td class="coverNumDflt">115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_decoder.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h">dbc_decoder.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">3</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_diagnostic.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h">dbc_diagnostic.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.cpp">dbc_parser.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
</td>
<td class="coverPerHi">99.0&nbsp;%</td>
<td class="coverNumDflt">99</td>
<td class="coverNumDflt">98</td>
<td class="coverPerLo">70.4&nbsp;%</td>
<td class="coverNumDflt">216</td>
<td class="coverNumDflt">152</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_parser.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_parser.h">dbc_parser.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.cpp">dbc_statement_handler.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.5%"><img src="../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
</td>
<td class="coverPerHi">99.5&nbsp;%</td>
<td class="coverNumDflt">370</td>
<td class="coverNumDflt">368</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumDflt">820</td>
<td class="coverNumDflt">561</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">31</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_statement_handler.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h">dbc_statement_handler.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerLo">45.5&nbsp;%</td>
<td class="coverNumDflt">22</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="dbc_tree_builder.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_tree_builder.cpp">dbc_tree_builder.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
</td>
<td class="coverPerHi">91.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.cpp">decode_database.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumDflt">110</td>
<td class="coverNumDflt">109</td>
<td class="coverPerMed">80.2&nbsp;%</td>
<td class="coverNumDflt">182</td>
<td class="coverNumDflt">146</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
</tr>
<tr>
<td class="coverFile"><a href="decode_database.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h">decode_database.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="definition_key.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h">definition_key.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
<td class="coverPerLo">70.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
</tr>
<tr>
<td class="coverFile"><a href="frame_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/frame_info.h">frame_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="j1939.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/j1939.h">j1939.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_info.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h">signal_info.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="signal_layout.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_layout.h">signal_layout.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="text_utils.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/text_utils.h">text_utils.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.cpp.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.cpp">tree_node.cpp</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="98.1%"><img src="../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
</td>
<td class="coverPerHi">98.1&nbsp;%</td>
<td class="coverNumDflt">53</td>
<td class="coverNumDflt">52</td>
<td class="coverPerMed">76.2&nbsp;%</td>
<td class="coverNumDflt">42</td>
<td class="coverNumDflt">32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">15</td>
</tr>
<tr>
<td class="coverFile"><a href="tree_node.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h">tree_node.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
<td class="coverPerHi">-</td>
<td class="coverNumDflt"></td>
<td class="coverNumDflt"></td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="typefactory.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h">typefactory.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">27</td>
<td class="coverNumDflt">27</td>
</tr>
<tr>
<td class="coverFile"><a href="value_descriptions.h.gcov.html" title="Click to go to file /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/value_descriptions.h">value_descriptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">8</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/j1939.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - j1939.h<span style="font-size: 80%;"> (<a href="j1939.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="j1939.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="j1939.h.gcov.html#L9">ExtractJ1939Pgn(unsigned int)</a></td>
<td class="coverFnHi">130</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/j1939.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - j1939.h<span style="font-size: 80%;"> (<a href="j1939.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="j1939.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="j1939.h.gcov.html#L9">ExtractJ1939Pgn(unsigned int)</a></td>
<td class="coverFnHi">130</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
+102
View File
@@ -0,0 +1,102 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/j1939.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - j1939.h<span style="font-size: 80%;"> (source / <a href="j1939.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #ifndef J1939_H</span>
<span id="L3"><span class="lineNum"> 3</span> : : #define J1939_H</span>
<span id="L4"><span class="lineNum"> 4</span> : : </span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &lt;cstdint&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : : </span>
<span id="L7"><span class="lineNum"> 7</span> : : /** Extract an 18-bit PGN from a normalized 29-bit ID explicitly interpreted as J1939.</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Priority and source address are excluded. PDU1 also excludes destination address.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * Both data-page bits are retained; this does not validate the J1939 protocol.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> :<span class="tlaGNC"> 130 : inline std::uint32_t ExtractJ1939Pgn(std::uint32_t canId) {</span></span>
<span id="L12"><span class="lineNum"> 12</span> :<span class="tlaGNC"> 130 : const std::uint32_t pf = (canId &gt;&gt; 16U) &amp; 0xFFU;</span></span>
<span id="L13"><span class="lineNum"> 13</span> :<span class="tlaGNC"> 130 : const std::uint32_t pgn = (canId &gt;&gt; 8U) &amp; 0x3FFFFU;</span></span>
<span id="L14"><span class="lineNum"> 14</span> [<span class="tlaGBC" title="Branch 0 was taken 78 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 52 times"> + </span>]:<span class="tlaGNC"> 130 : return pf &lt; 240U ? pgn &amp; 0x3FF00U : pgn;</span></span>
<span id="L15"><span class="lineNum"> 15</span> : : }</span>
<span id="L16"><span class="lineNum"> 16</span> : : </span>
<span id="L17"><span class="lineNum"> 17</span> : : #endif /* J1939_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_info.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_info.h<span style="font-size: 80%;"> (<a href="signal_info.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="signal_info.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="signal_info.h.gcov.html#L41">SignalInfo::SignalInfo()</a></td>
<td class="coverFnHi">592</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_info.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_info.h<span style="font-size: 80%;"> (<a href="signal_info.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="signal_info.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="signal_info.h.gcov.html#L41">SignalInfo::SignalInfo()</a></td>
<td class="coverFnHi">592</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,122 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_info.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_info.h<span style="font-size: 80%;"> (source / <a href="signal_info.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : * @file signal_info.h</span>
<span id="L3"><span class="lineNum"> 3</span> : * @brief Parsed CAN signal metadata.</span>
<span id="L4"><span class="lineNum"> 4</span> : *</span>
<span id="L5"><span class="lineNum"> 5</span> : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : *</span>
<span id="L8"><span class="lineNum"> 8</span> : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : */</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #ifndef SIGNAL_INFO_H</span>
<span id="L13"><span class="lineNum"> 13</span> : #define SIGNAL_INFO_H</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &quot;attributes.h&quot;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &quot;multiplexing.h&quot;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &quot;value_descriptions.h&quot;</span>
<span id="L18"><span class="lineNum"> 18</span> : #include &lt;cstdint&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : #include &lt;string&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : #include &lt;vector&gt;</span>
<span id="L21"><span class="lineNum"> 21</span> : </span>
<span id="L22"><span class="lineNum"> 22</span> : /**</span>
<span id="L23"><span class="lineNum"> 23</span> : * @brief Describes one signal inside a DBC frame.</span>
<span id="L24"><span class="lineNum"> 24</span> : */</span>
<span id="L25"><span class="lineNum"> 25</span> : struct SignalInfo {</span>
<span id="L26"><span class="lineNum"> 26</span> : Multiplexing multiplexing; /**&lt; Selector role and branch value. */</span>
<span id="L27"><span class="lineNum"> 27</span> : std::string name; /**&lt; Signal name. */</span>
<span id="L28"><span class="lineNum"> 28</span> : std::uint32_t startBit = 0U; /**&lt; Start bit in DBC notation. */</span>
<span id="L29"><span class="lineNum"> 29</span> : std::uint32_t length = 0U; /**&lt; Signal length in bits. */</span>
<span id="L30"><span class="lineNum"> 30</span> : bool isLittleEndian = true; /**&lt; true for Intel, false for Motorola. */</span>
<span id="L31"><span class="lineNum"> 31</span> : bool isSigned = false; /**&lt; true if signal is signed. */</span>
<span id="L32"><span class="lineNum"> 32</span> : double factor = 1.0; /**&lt; Scaling factor. */</span>
<span id="L33"><span class="lineNum"> 33</span> : double offset = 0.0; /**&lt; Physical offset. */</span>
<span id="L34"><span class="lineNum"> 34</span> : double minimum = 0.0; /**&lt; Minimum physical value. */</span>
<span id="L35"><span class="lineNum"> 35</span> : double maximum = 0.0; /**&lt; Maximum physical value. */</span>
<span id="L36"><span class="lineNum"> 36</span> : std::string unit; /**&lt; Physical unit. */</span>
<span id="L37"><span class="lineNum"> 37</span> : std::vector&lt;std::string&gt; receivers; /**&lt; Signal receivers. */</span>
<span id="L38"><span class="lineNum"> 38</span> : ValueDescriptions valueDescriptions; /**&lt; Raw integer state descriptions. */</span>
<span id="L39"><span class="lineNum"> 39</span> : std::string comment; /**&lt; Optional signal comment. */</span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> : AttributeMap attributes; /**&lt; Effective attributes after defaults and overrides. */ /**&lt; Effective values, including defaults. */</span>
<span id="L42"><span class="lineNum"> 42</span> : </span>
<span id="L43"><span class="lineNum"> 43</span> <span class="tlaGNC"> 592 : SignalInfo() = default;</span></span>
<span id="L44"><span class="lineNum"> 44</span> : };</span>
<span id="L45"><span class="lineNum"> 45</span> : </span>
<span id="L46"><span class="lineNum"> 46</span> : #endif /* SIGNAL_INFO_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,101 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_layout.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_layout.h<span style="font-size: 80%;"> (<a href="signal_layout.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="signal_layout.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="signal_layout.h.gcov.html#L6">SignalStartCoordinate(unsigned int, bool)</a></td>
<td class="coverFnHi">352521</td>
</tr>
<tr>
<td class="coverFn"><a href="signal_layout.h.gcov.html#L11">IsValidSignalLayout(unsigned int, unsigned int, bool, unsigned char)</a></td>
<td class="coverFnHi">360851</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,101 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_layout.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_layout.h<span style="font-size: 80%;"> (<a href="signal_layout.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="signal_layout.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="signal_layout.h.gcov.html#L11">IsValidSignalLayout(unsigned int, unsigned int, bool, unsigned char)</a></td>
<td class="coverFnHi">360851</td>
</tr>
<tr>
<td class="coverFn"><a href="signal_layout.h.gcov.html#L6">SignalStartCoordinate(unsigned int, bool)</a></td>
<td class="coverFnHi">352521</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,104 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/signal_layout.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - signal_layout.h<span style="font-size: 80%;"> (source / <a href="signal_layout.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">8</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
<span id="L2"><span class="lineNum"> 2</span> : : #ifndef SIGNAL_LAYOUT_H</span>
<span id="L3"><span class="lineNum"> 3</span> : : #define SIGNAL_LAYOUT_H</span>
<span id="L4"><span class="lineNum"> 4</span> : : </span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &lt;cstdint&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : : </span>
<span id="L7"><span class="lineNum"> 7</span> : : /** Linear coordinate in the signal's bit order, widened before arithmetic. */</span>
<span id="L8"><span class="lineNum"> 8</span> :<span class="tlaGNC"> 352521 : inline std::uint64_t SignalStartCoordinate(std::uint32_t startBit, bool littleEndian) {</span></span>
<span id="L9"><span class="lineNum"> 9</span> [<span class="tlaGBC" title="Branch 0 was taken 176628 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 175893 times"> + </span>]:<span class="tlaGNC"> 352521 : return littleEndian ? std::uint64_t(startBit)</span></span>
<span id="L10"><span class="lineNum"> 10</span> :<span class="tlaGNC"> 352521 : : std::uint64_t(startBit / 8U) * 8U + 7U - startBit % 8U;</span></span>
<span id="L11"><span class="lineNum"> 11</span> : : }</span>
<span id="L12"><span class="lineNum"> 12</span> : : </span>
<span id="L13"><span class="lineNum"> 13</span> :<span class="tlaGNC"> 360851 : inline bool IsValidSignalLayout(std::uint32_t startBit, std::uint32_t length,</span></span>
<span id="L14"><span class="lineNum"> 14</span> : : bool littleEndian, std::uint8_t dlc) {</span>
<span id="L15"><span class="lineNum"> 15</span> [<span class="tlaGBC" title="Branch 0 was taken 355515 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5336 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 350157 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5358 times"> + </span>]:<span class="tlaGNC"> 711008 : return length &gt;= 1U &amp;&amp; length &lt;= 64U &amp;&amp;</span></span>
<span id="L16"><span class="lineNum"> 16</span> [<span class="tlaGBC" title="Branch 0 was taken 331954 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 18203 times"> + </span>]:<span class="tlaGNC"> 711008 : SignalStartCoordinate(startBit, littleEndian) + length &lt;= std::uint64_t(dlc) * 8U;</span></span>
<span id="L17"><span class="lineNum"> 17</span> : : }</span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> : : #endif</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/text_utils.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - text_utils.h<span style="font-size: 80%;"> (<a href="text_utils.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="text_utils.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="text_utils.h.gcov.html#L6">dbc_detail::TrimText(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2913</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/text_utils.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - text_utils.h<span style="font-size: 80%;"> (<a href="text_utils.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="text_utils.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="text_utils.h.gcov.html#L6">dbc_detail::TrimText(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">2913</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,108 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/text_utils.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - text_utils.h<span style="font-size: 80%;"> (source / <a href="text_utils.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : #ifndef DBC_TEXT_UTILS_H</span>
<span id="L2"><span class="lineNum"> 2</span> : : #define DBC_TEXT_UTILS_H</span>
<span id="L3"><span class="lineNum"> 3</span> : : </span>
<span id="L4"><span class="lineNum"> 4</span> : : #include &lt;cctype&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : : #include &lt;string&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : : </span>
<span id="L7"><span class="lineNum"> 7</span> : : namespace dbc_detail {</span>
<span id="L8"><span class="lineNum"> 8</span> :<span class="tlaGNC"> 2913 : inline std::string TrimText(const std::string &amp;text) {</span></span>
<span id="L9"><span class="lineNum"> 9</span> :<span class="tlaGNC"> 2913 : std::string::size_type begin = 0U;</span></span>
<span id="L10"><span class="lineNum"> 10</span> [<span class="tlaGBC" title="Branch 0 was taken 2692 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 343 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 122 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2913 times"> + </span>]:<span class="tlaGNC"> 5727 : while ((begin &lt; text.size()) &amp;&amp;</span></span>
<span id="L11"><span class="lineNum"> 11</span> [<span class="tlaGBC" title="Branch 0 was taken 122 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2570 times"> + </span>]:<span class="tlaGNC"> 2692 : std::isspace(static_cast&lt;unsigned char&gt;(text[begin])))</span></span>
<span id="L12"><span class="lineNum"> 12</span> :<span class="tlaGNC"> 122 : ++begin;</span></span>
<span id="L13"><span class="lineNum"> 13</span> : : </span>
<span id="L14"><span class="lineNum"> 14</span> :<span class="tlaGNC"> 2913 : std::string::size_type end = text.size();</span></span>
<span id="L15"><span class="lineNum"> 15</span> [<span class="tlaGBC" title="Branch 0 was taken 2574 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 343 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2913 times"> + </span>]:<span class="tlaGNC"> 5491 : while ((end &gt; begin) &amp;&amp;</span></span>
<span id="L16"><span class="lineNum"> 16</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2570 times"> + </span>]:<span class="tlaGNC"> 2574 : std::isspace(static_cast&lt;unsigned char&gt;(text[end - 1U])))</span></span>
<span id="L17"><span class="lineNum"> 17</span> :<span class="tlaGNC"> 4 : --end;</span></span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> :<span class="tlaGNC"> 2913 : return text.substr(begin, end - begin);</span></span>
<span id="L20"><span class="lineNum"> 20</span> : : }</span>
<span id="L21"><span class="lineNum"> 21</span> : : }</span>
<span id="L22"><span class="lineNum"> 22</span> : : </span>
<span id="L23"><span class="lineNum"> 23</span> : : #endif</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,205 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.cpp<span style="font-size: 80%;"> (<a href="tree_node.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.1&nbsp;%</td>
<td class="headerCovTableEntry">53</td>
<td class="headerCovTableEntry">52</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">15</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">76.2&nbsp;%</td>
<td class="headerCovTableEntry">42</td>
<td class="headerCovTableEntry">32</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="tree_node.cpp.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L89">TreeNode::GetSignalKey() const</a></td>
<td class="coverFnHi">9</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L13">TreeNode::TreeNode()</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L81">TreeNode::GetFrameKey() const</a></td>
<td class="coverFnHi">23</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L61">TreeNode::GetName[abi:cxx11]() const</a></td>
<td class="coverFnHi">29</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L57">TreeNode::GetType() const</a></td>
<td class="coverFnHi">44</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L50">TreeNode::GetChild(unsigned long)</a></td>
<td class="coverFnHi">91</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L17">TreeNode::TreeNode(FrameInfo const&amp;)</a></td>
<td class="coverFnHi">97</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L21">TreeNode::TreeNode(SignalInfo const&amp;)</a></td>
<td class="coverFnHi">110</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L25">TreeNode::AddChild(std::unique_ptr&lt;TreeNode, std::default_delete&lt;TreeNode&gt; &gt;&amp;&amp;)</a></td>
<td class="coverFnHi">206</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L65">TreeNode::GetFrame() const</a></td>
<td class="coverFnHi">274</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L69">TreeNode::GetSignal() const</a></td>
<td class="coverFnHi">281</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L77">TreeNode::GetRow() const</a></td>
<td class="coverFnHi">1547</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L73">TreeNode::GetParent() const</a></td>
<td class="coverFnHi">1875</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L39">TreeNode::GetChildCount() const</a></td>
<td class="coverFnHi">2120</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L43">TreeNode::GetChild(unsigned long) const</a></td>
<td class="coverFnHi">3430</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,205 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.cpp - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.cpp<span style="font-size: 80%;"> (<a href="tree_node.cpp.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.1&nbsp;%</td>
<td class="headerCovTableEntry">53</td>
<td class="headerCovTableEntry">52</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">15</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">76.2&nbsp;%</td>
<td class="headerCovTableEntry">42</td>
<td class="headerCovTableEntry">32</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="tree_node.cpp.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L25">TreeNode::AddChild(std::unique_ptr&lt;TreeNode, std::default_delete&lt;TreeNode&gt; &gt;&amp;&amp;)</a></td>
<td class="coverFnHi">206</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L50">TreeNode::GetChild(unsigned long)</a></td>
<td class="coverFnHi">91</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L43">TreeNode::GetChild(unsigned long) const</a></td>
<td class="coverFnHi">3430</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L39">TreeNode::GetChildCount() const</a></td>
<td class="coverFnHi">2120</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L65">TreeNode::GetFrame() const</a></td>
<td class="coverFnHi">274</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L81">TreeNode::GetFrameKey() const</a></td>
<td class="coverFnHi">23</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L61">TreeNode::GetName[abi:cxx11]() const</a></td>
<td class="coverFnHi">29</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L73">TreeNode::GetParent() const</a></td>
<td class="coverFnHi">1875</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L77">TreeNode::GetRow() const</a></td>
<td class="coverFnHi">1547</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L69">TreeNode::GetSignal() const</a></td>
<td class="coverFnHi">281</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L89">TreeNode::GetSignalKey() const</a></td>
<td class="coverFnHi">9</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L57">TreeNode::GetType() const</a></td>
<td class="coverFnHi">44</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L13">TreeNode::TreeNode()</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L17">TreeNode::TreeNode(FrameInfo const&amp;)</a></td>
<td class="coverFnHi">97</td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.cpp.gcov.html#L21">TreeNode::TreeNode(SignalInfo const&amp;)</a></td>
<td class="coverFnHi">110</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,183 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.cpp</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.cpp<span style="font-size: 80%;"> (source / <a href="tree_node.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">98.1&nbsp;%</td>
<td class="headerCovTableEntry">53</td>
<td class="headerCovTableEntry">52</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">15</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryMed">76.2&nbsp;%</td>
<td class="headerCovTableEntry">42</td>
<td class="headerCovTableEntry">32</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : : * @file tree_node.cpp</span>
<span id="L3"><span class="lineNum"> 3</span> : : * @brief Tree node ownership and navigation.</span>
<span id="L4"><span class="lineNum"> 4</span> : : *</span>
<span id="L5"><span class="lineNum"> 5</span> : : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : : *</span>
<span id="L8"><span class="lineNum"> 8</span> : : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : : */</span>
<span id="L11"><span class="lineNum"> 11</span> : : </span>
<span id="L12"><span class="lineNum"> 12</span> : : #include &quot;tree_node.h&quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : : #include &lt;stdexcept&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : : </span>
<span id="L15"><span class="lineNum"> 15</span> :<span class="tlaGNC"> 22 : TreeNode::TreeNode()</span></span>
<span id="L16"><span class="lineNum"> 16</span> [<span class="tlaGBC" title="Branch 0 was taken 22 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 66 : : m_type(NodeType::Root), m_name(&quot;dbc&quot;) {</span></span>
<span id="L17"><span class="lineNum"> 17</span> :<span class="tlaGNC"> 22 : }</span></span>
<span id="L18"><span class="lineNum"> 18</span> : : </span>
<span id="L19"><span class="lineNum"> 19</span> :<span class="tlaGNC"> 97 : TreeNode::TreeNode(const FrameInfo &amp;frame)</span></span>
<span id="L20"><span class="lineNum"> 20</span> [<span class="tlaGBC" title="Branch 0 was taken 97 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 97 : : m_type(NodeType::Frame), m_name(frame.name), m_frame(std::make_unique&lt;FrameInfo&gt;(frame)) {</span></span>
<span id="L21"><span class="lineNum"> 21</span> :<span class="tlaGNC"> 97 : }</span></span>
<span id="L22"><span class="lineNum"> 22</span> : : </span>
<span id="L23"><span class="lineNum"> 23</span> :<span class="tlaGNC"> 110 : TreeNode::TreeNode(const SignalInfo &amp;signal)</span></span>
<span id="L24"><span class="lineNum"> 24</span> [<span class="tlaGBC" title="Branch 0 was taken 110 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 110 : : m_type(NodeType::Signal), m_name(signal.name), m_signal(std::make_unique&lt;SignalInfo&gt;(signal)) {</span></span>
<span id="L25"><span class="lineNum"> 25</span> :<span class="tlaGNC"> 110 : }</span></span>
<span id="L26"><span class="lineNum"> 26</span> : : </span>
<span id="L27"><span class="lineNum"> 27</span> :<span class="tlaGNC"> 206 : void TreeNode::AddChild(std::unique_ptr&lt;TreeNode&gt; &amp;&amp;child) {</span></span>
<span id="L28"><span class="lineNum"> 28</span> [<span class="tlaGBC" title="Branch 0 was taken 205 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1 time"> + </span>]:<span class="tlaGNC"> 206 : if (child) {</span></span>
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 271 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 203 times"> + </span>]:<span class="tlaGNC"> 474 : for (const TreeNode *ancestor = this; ancestor; ancestor = ancestor-&gt;m_parent) {</span></span>
<span id="L30"><span class="lineNum"> 30</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 269 times"> + </span>]:<span class="tlaGNC"> 271 : if (ancestor == child.get())</span></span>
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2 : throw std::invalid_argument(&quot;Cannot insert a node into its own subtree&quot;);</span></span>
<span id="L32"><span class="lineNum"> 32</span> : : }</span>
<span id="L33"><span class="lineNum"> 33</span> [<span class="tlaUNC" title="Branch 0 was not taken"> - </span><span class="tlaGBC" title="Branch 1 was taken 203 times"> + </span>]:<span class="tlaGNC"> 203 : if (child-&gt;m_parent)</span></span>
<span id="L34"><span class="lineNum"> 34</span> [<span class="tlaUNC" title="Branch 0 was not executed"> # </span><span class="tlaUNC" title="Branch 1 was not executed"> # </span>]:<span class="tlaUNC"> 0 : throw std::invalid_argument(&quot;Child is already attached&quot;);</span></span>
<span id="L35"><span class="lineNum"> 35</span> :<span class="tlaGNC"> 203 : m_children.push_back(std::move(child));</span></span>
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 203 : m_children.back()-&gt;m_parent = this;</span></span>
<span id="L37"><span class="lineNum"> 37</span> :<span class="tlaGNC"> 203 : m_children.back()-&gt;m_row = m_children.size() - 1U;</span></span>
<span id="L38"><span class="lineNum"> 38</span> : : }</span>
<span id="L39"><span class="lineNum"> 39</span> :<span class="tlaGNC"> 204 : }</span></span>
<span id="L40"><span class="lineNum"> 40</span> : : </span>
<span id="L41"><span class="lineNum"> 41</span> :<span class="tlaGNC"> 2120 : std::size_t TreeNode::GetChildCount() const {</span></span>
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 2120 : return m_children.size();</span></span>
<span id="L43"><span class="lineNum"> 43</span> : : }</span>
<span id="L44"><span class="lineNum"> 44</span> : : </span>
<span id="L45"><span class="lineNum"> 45</span> :<span class="tlaGNC"> 3430 : const TreeNode *TreeNode::GetChild(std::size_t index) const {</span></span>
<span id="L46"><span class="lineNum"> 46</span> [<span class="tlaGBC" title="Branch 0 was taken 1107 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2323 times"> + </span>]:<span class="tlaGNC"> 3430 : if (index &gt;= m_children.size())</span></span>
<span id="L47"><span class="lineNum"> 47</span> :<span class="tlaGNC"> 1107 : return nullptr;</span></span>
<span id="L48"><span class="lineNum"> 48</span> : : </span>
<span id="L49"><span class="lineNum"> 49</span> :<span class="tlaGNC"> 2323 : return m_children[index].get();</span></span>
<span id="L50"><span class="lineNum"> 50</span> : : }</span>
<span id="L51"><span class="lineNum"> 51</span> : : </span>
<span id="L52"><span class="lineNum"> 52</span> :<span class="tlaGNC"> 91 : TreeNode *TreeNode::GetChild(std::size_t index) {</span></span>
<span id="L53"><span class="lineNum"> 53</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 89 times"> + </span>]:<span class="tlaGNC"> 91 : if (index &gt;= m_children.size())</span></span>
<span id="L54"><span class="lineNum"> 54</span> :<span class="tlaGNC"> 2 : return nullptr;</span></span>
<span id="L55"><span class="lineNum"> 55</span> : : </span>
<span id="L56"><span class="lineNum"> 56</span> :<span class="tlaGNC"> 89 : return m_children[index].get();</span></span>
<span id="L57"><span class="lineNum"> 57</span> : : }</span>
<span id="L58"><span class="lineNum"> 58</span> : : </span>
<span id="L59"><span class="lineNum"> 59</span> :<span class="tlaGNC"> 44 : NodeType TreeNode::GetType() const {</span></span>
<span id="L60"><span class="lineNum"> 60</span> :<span class="tlaGNC"> 44 : return m_type;</span></span>
<span id="L61"><span class="lineNum"> 61</span> : : }</span>
<span id="L62"><span class="lineNum"> 62</span> : : </span>
<span id="L63"><span class="lineNum"> 63</span> :<span class="tlaGNC"> 29 : const std::string &amp;TreeNode::GetName() const {</span></span>
<span id="L64"><span class="lineNum"> 64</span> :<span class="tlaGNC"> 29 : return m_name;</span></span>
<span id="L65"><span class="lineNum"> 65</span> : : }</span>
<span id="L66"><span class="lineNum"> 66</span> : : </span>
<span id="L67"><span class="lineNum"> 67</span> :<span class="tlaGNC"> 274 : const FrameInfo *TreeNode::GetFrame() const {</span></span>
<span id="L68"><span class="lineNum"> 68</span> :<span class="tlaGNC"> 274 : return m_frame.get();</span></span>
<span id="L69"><span class="lineNum"> 69</span> : : }</span>
<span id="L70"><span class="lineNum"> 70</span> : : </span>
<span id="L71"><span class="lineNum"> 71</span> :<span class="tlaGNC"> 281 : const SignalInfo *TreeNode::GetSignal() const {</span></span>
<span id="L72"><span class="lineNum"> 72</span> :<span class="tlaGNC"> 281 : return m_signal.get();</span></span>
<span id="L73"><span class="lineNum"> 73</span> : : }</span>
<span id="L74"><span class="lineNum"> 74</span> : : </span>
<span id="L75"><span class="lineNum"> 75</span> :<span class="tlaGNC"> 1875 : const TreeNode *TreeNode::GetParent() const {</span></span>
<span id="L76"><span class="lineNum"> 76</span> :<span class="tlaGNC"> 1875 : return m_parent;</span></span>
<span id="L77"><span class="lineNum"> 77</span> : : }</span>
<span id="L78"><span class="lineNum"> 78</span> : : </span>
<span id="L79"><span class="lineNum"> 79</span> :<span class="tlaGNC"> 1547 : std::size_t TreeNode::GetRow() const {</span></span>
<span id="L80"><span class="lineNum"> 80</span> :<span class="tlaGNC"> 1547 : return m_row;</span></span>
<span id="L81"><span class="lineNum"> 81</span> : : }</span>
<span id="L82"><span class="lineNum"> 82</span> : : </span>
<span id="L83"><span class="lineNum"> 83</span> :<span class="tlaGNC"> 23 : std::optional&lt;FrameKey&gt; TreeNode::GetFrameKey() const {</span></span>
<span id="L84"><span class="lineNum"> 84</span> [<span class="tlaGBC" title="Branch 0 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 23 : if (m_frame)</span></span>
<span id="L85"><span class="lineNum"> 85</span> :<span class="tlaGNC"> 13 : return FrameKey(m_frame-&gt;canId, m_frame-&gt;isExtended);</span></span>
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2 times"> + </span> :<span class="tlaGNC"> 10 : if (m_signal &amp;&amp; m_parent &amp;&amp; m_parent-&gt;GetType() == NodeType::Frame)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 5 was not taken"> - </span><span class="tlaGBC" title="Branch 6 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 4 times"> + </span>]
<span id="L87"><span class="lineNum"> 87</span> :<span class="tlaGNC"> 6 : return m_parent-&gt;GetFrameKey();</span></span>
<span id="L88"><span class="lineNum"> 88</span> :<span class="tlaGNC"> 4 : return std::nullopt;</span></span>
<span id="L89"><span class="lineNum"> 89</span> : : }</span>
<span id="L90"><span class="lineNum"> 90</span> : : </span>
<span id="L91"><span class="lineNum"> 91</span> :<span class="tlaGNC"> 9 : std::optional&lt;SignalKey&gt; TreeNode::GetSignalKey() const {</span></span>
<span id="L92"><span class="lineNum"> 92</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 9 : const std::optional&lt;FrameKey&gt; frame = GetFrameKey();</span></span>
<span id="L93"><span class="lineNum"> 93</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span> :<span class="tlaGNC"> 9 : if (m_signal &amp;&amp; frame)</span></span>
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 4 times"> + </span>]
<span id="L94"><span class="lineNum"> 94</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 5 : return SignalKey(*frame, m_signal-&gt;name);</span></span>
<span id="L95"><span class="lineNum"> 95</span> :<span class="tlaGNC"> 4 : return std::nullopt;</span></span>
<span id="L96"><span class="lineNum"> 96</span> : : }</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.h<span style="font-size: 80%;"> (<a href="tree_node.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="tree_node.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.h.gcov.html#L54">TreeNode::~TreeNode()</a></td>
<td class="coverFnHi">229</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.h<span style="font-size: 80%;"> (<a href="tree_node.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="tree_node.h.func-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="tree_node.h.gcov.html#L54">TreeNode::~TreeNode()</a></td>
<td class="coverFnHi">229</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,217 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/tree_node.h</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - tree_node.h<span style="font-size: 80%;"> (source / <a href="tree_node.h.func-c.html" title="Click to go to function table">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : /**</span>
<span id="L2"><span class="lineNum"> 2</span> : * @file tree_node.h</span>
<span id="L3"><span class="lineNum"> 3</span> : * @brief Qt-independent metadata tree nodes.</span>
<span id="L4"><span class="lineNum"> 4</span> : *</span>
<span id="L5"><span class="lineNum"> 5</span> : * Created: 2026-03-13</span>
<span id="L6"><span class="lineNum"> 6</span> : * Author: Deeaitch (Dim. Himro)</span>
<span id="L7"><span class="lineNum"> 7</span> : *</span>
<span id="L8"><span class="lineNum"> 8</span> : * Licensed under the MIT License.</span>
<span id="L9"><span class="lineNum"> 9</span> : * See LICENSE file in the project root for full license text.</span>
<span id="L10"><span class="lineNum"> 10</span> : */</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #ifndef TREE_NODE_H</span>
<span id="L13"><span class="lineNum"> 13</span> : #define TREE_NODE_H</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;cstddef&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;memory&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;optional&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : #include &lt;string&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : #include &lt;vector&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : </span>
<span id="L21"><span class="lineNum"> 21</span> : #include &quot;definition_key.h&quot;</span>
<span id="L22"><span class="lineNum"> 22</span> : #include &quot;frame_info.h&quot;</span>
<span id="L23"><span class="lineNum"> 23</span> : #include &quot;signal_info.h&quot;</span>
<span id="L24"><span class="lineNum"> 24</span> : </span>
<span id="L25"><span class="lineNum"> 25</span> : /**</span>
<span id="L26"><span class="lineNum"> 26</span> : * @brief Type of a tree node.</span>
<span id="L27"><span class="lineNum"> 27</span> : */</span>
<span id="L28"><span class="lineNum"> 28</span> : enum class NodeType {</span>
<span id="L29"><span class="lineNum"> 29</span> : Root,</span>
<span id="L30"><span class="lineNum"> 30</span> : Frame,</span>
<span id="L31"><span class="lineNum"> 31</span> : Signal</span>
<span id="L32"><span class="lineNum"> 32</span> : };</span>
<span id="L33"><span class="lineNum"> 33</span> : </span>
<span id="L34"><span class="lineNum"> 34</span> : /**</span>
<span id="L35"><span class="lineNum"> 35</span> : * @brief Tree node for later use in model/view or other hierarchy consumers.</span>
<span id="L36"><span class="lineNum"> 36</span> : */</span>
<span id="L37"><span class="lineNum"> 37</span> : class TreeNode {</span>
<span id="L38"><span class="lineNum"> 38</span> : public:</span>
<span id="L39"><span class="lineNum"> 39</span> : /**</span>
<span id="L40"><span class="lineNum"> 40</span> : * @brief Create root node.</span>
<span id="L41"><span class="lineNum"> 41</span> : */</span>
<span id="L42"><span class="lineNum"> 42</span> : TreeNode();</span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> : /**</span>
<span id="L45"><span class="lineNum"> 45</span> : * @brief Create frame node.</span>
<span id="L46"><span class="lineNum"> 46</span> : * @param frame Frame payload.</span>
<span id="L47"><span class="lineNum"> 47</span> : */</span>
<span id="L48"><span class="lineNum"> 48</span> : explicit TreeNode(const FrameInfo &amp;frame);</span>
<span id="L49"><span class="lineNum"> 49</span> : </span>
<span id="L50"><span class="lineNum"> 50</span> : /**</span>
<span id="L51"><span class="lineNum"> 51</span> : * @brief Create signal node.</span>
<span id="L52"><span class="lineNum"> 52</span> : * @param signal Signal payload.</span>
<span id="L53"><span class="lineNum"> 53</span> : */</span>
<span id="L54"><span class="lineNum"> 54</span> : explicit TreeNode(const SignalInfo &amp;signal);</span>
<span id="L55"><span class="lineNum"> 55</span> : </span>
<span id="L56"><span class="lineNum"> 56</span> <span class="tlaGNC"> 229 : ~TreeNode() = default;</span></span>
<span id="L57"><span class="lineNum"> 57</span> : </span>
<span id="L58"><span class="lineNum"> 58</span> : TreeNode(const TreeNode &amp;) = delete;</span>
<span id="L59"><span class="lineNum"> 59</span> : TreeNode &amp;operator=(const TreeNode &amp;) = delete;</span>
<span id="L60"><span class="lineNum"> 60</span> : </span>
<span id="L61"><span class="lineNum"> 61</span> : // Node addresses are stable. Transfer unique_ptr ownership instead of nodes.</span>
<span id="L62"><span class="lineNum"> 62</span> : TreeNode(TreeNode &amp;&amp;) = delete;</span>
<span id="L63"><span class="lineNum"> 63</span> : TreeNode &amp;operator=(TreeNode &amp;&amp;) = delete;</span>
<span id="L64"><span class="lineNum"> 64</span> : </span>
<span id="L65"><span class="lineNum"> 65</span> : /**</span>
<span id="L66"><span class="lineNum"> 66</span> : * @brief Add child node.</span>
<span id="L67"><span class="lineNum"> 67</span> : * @param child Child node to add.</span>
<span id="L68"><span class="lineNum"> 68</span> : * A null child is ignored. Existing children keep their addresses and rows.</span>
<span id="L69"><span class="lineNum"> 69</span> : * Ownership must be exclusive; attached nodes cannot be reparented.</span>
<span id="L70"><span class="lineNum"> 70</span> : * @throws std::invalid_argument for self/ancestor insertion or an attached child.</span>
<span id="L71"><span class="lineNum"> 71</span> : * Rejected ownership remains with the caller.</span>
<span id="L72"><span class="lineNum"> 72</span> : */</span>
<span id="L73"><span class="lineNum"> 73</span> : void AddChild(std::unique_ptr&lt;TreeNode&gt; &amp;&amp;child);</span>
<span id="L74"><span class="lineNum"> 74</span> : </span>
<span id="L75"><span class="lineNum"> 75</span> : /** Non-owning parent; nullptr for a detached node or the root. */</span>
<span id="L76"><span class="lineNum"> 76</span> : const TreeNode *GetParent() const;</span>
<span id="L77"><span class="lineNum"> 77</span> : </span>
<span id="L78"><span class="lineNum"> 78</span> : /** Zero-based sibling position; zero for a detached node or the root. */</span>
<span id="L79"><span class="lineNum"> 79</span> : std::size_t GetRow() const;</span>
<span id="L80"><span class="lineNum"> 80</span> : </span>
<span id="L81"><span class="lineNum"> 81</span> : /** Frame identity for frame nodes and signals attached to a frame; otherwise empty. */</span>
<span id="L82"><span class="lineNum"> 82</span> : std::optional&lt;FrameKey&gt; GetFrameKey() const;</span>
<span id="L83"><span class="lineNum"> 83</span> : </span>
<span id="L84"><span class="lineNum"> 84</span> : /** Signal identity (owning frame key and name); empty for other/detached nodes. */</span>
<span id="L85"><span class="lineNum"> 85</span> : std::optional&lt;SignalKey&gt; GetSignalKey() const;</span>
<span id="L86"><span class="lineNum"> 86</span> : </span>
<span id="L87"><span class="lineNum"> 87</span> : /**</span>
<span id="L88"><span class="lineNum"> 88</span> : * @brief Get child count.</span>
<span id="L89"><span class="lineNum"> 89</span> : * @return Number of children.</span>
<span id="L90"><span class="lineNum"> 90</span> : */</span>
<span id="L91"><span class="lineNum"> 91</span> : std::size_t GetChildCount() const;</span>
<span id="L92"><span class="lineNum"> 92</span> : </span>
<span id="L93"><span class="lineNum"> 93</span> : /**</span>
<span id="L94"><span class="lineNum"> 94</span> : * @brief Get child by index.</span>
<span id="L95"><span class="lineNum"> 95</span> : * @param index Child index.</span>
<span id="L96"><span class="lineNum"> 96</span> : * @return Child pointer or nullptr if index is invalid.</span>
<span id="L97"><span class="lineNum"> 97</span> : */</span>
<span id="L98"><span class="lineNum"> 98</span> : const TreeNode *GetChild(std::size_t index) const;</span>
<span id="L99"><span class="lineNum"> 99</span> : </span>
<span id="L100"><span class="lineNum"> 100</span> : /**</span>
<span id="L101"><span class="lineNum"> 101</span> : * @brief Get mutable child by index.</span>
<span id="L102"><span class="lineNum"> 102</span> : * @param index Child index.</span>
<span id="L103"><span class="lineNum"> 103</span> : * @return Child pointer or nullptr if index is invalid.</span>
<span id="L104"><span class="lineNum"> 104</span> : */</span>
<span id="L105"><span class="lineNum"> 105</span> : TreeNode *GetChild(std::size_t index);</span>
<span id="L106"><span class="lineNum"> 106</span> : </span>
<span id="L107"><span class="lineNum"> 107</span> : /**</span>
<span id="L108"><span class="lineNum"> 108</span> : * @brief Get node type.</span>
<span id="L109"><span class="lineNum"> 109</span> : * @return Node type.</span>
<span id="L110"><span class="lineNum"> 110</span> : */</span>
<span id="L111"><span class="lineNum"> 111</span> : NodeType GetType() const;</span>
<span id="L112"><span class="lineNum"> 112</span> : </span>
<span id="L113"><span class="lineNum"> 113</span> : /**</span>
<span id="L114"><span class="lineNum"> 114</span> : * @brief Get display name.</span>
<span id="L115"><span class="lineNum"> 115</span> : * @return Node name.</span>
<span id="L116"><span class="lineNum"> 116</span> : */</span>
<span id="L117"><span class="lineNum"> 117</span> : const std::string &amp;GetName() const;</span>
<span id="L118"><span class="lineNum"> 118</span> : </span>
<span id="L119"><span class="lineNum"> 119</span> : /**</span>
<span id="L120"><span class="lineNum"> 120</span> : * @brief Get frame payload if node is frame.</span>
<span id="L121"><span class="lineNum"> 121</span> : * @return Pointer to frame info or nullptr.</span>
<span id="L122"><span class="lineNum"> 122</span> : */</span>
<span id="L123"><span class="lineNum"> 123</span> : const FrameInfo *GetFrame() const;</span>
<span id="L124"><span class="lineNum"> 124</span> : </span>
<span id="L125"><span class="lineNum"> 125</span> : /**</span>
<span id="L126"><span class="lineNum"> 126</span> : * @brief Get signal payload if node is signal.</span>
<span id="L127"><span class="lineNum"> 127</span> : * @return Pointer to signal info or nullptr.</span>
<span id="L128"><span class="lineNum"> 128</span> : */</span>
<span id="L129"><span class="lineNum"> 129</span> : const SignalInfo *GetSignal() const;</span>
<span id="L130"><span class="lineNum"> 130</span> : </span>
<span id="L131"><span class="lineNum"> 131</span> : private:</span>
<span id="L132"><span class="lineNum"> 132</span> : TreeNode *m_parent = nullptr;</span>
<span id="L133"><span class="lineNum"> 133</span> : std::size_t m_row = 0U;</span>
<span id="L134"><span class="lineNum"> 134</span> : NodeType m_type;</span>
<span id="L135"><span class="lineNum"> 135</span> : std::string m_name;</span>
<span id="L136"><span class="lineNum"> 136</span> : std::vector&lt;std::unique_ptr&lt;TreeNode&gt;&gt; m_children;</span>
<span id="L137"><span class="lineNum"> 137</span> : std::unique_ptr&lt;FrameInfo&gt; m_frame;</span>
<span id="L138"><span class="lineNum"> 138</span> : std::unique_ptr&lt;SignalInfo&gt; m_signal;</span>
<span id="L139"><span class="lineNum"> 139</span> : };</span>
<span id="L140"><span class="lineNum"> 140</span> : </span>
<span id="L141"><span class="lineNum"> 141</span> : #endif /* TREE_NODE_H */</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
@@ -0,0 +1,341 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - core/typefactory.h - functions</title>
<link rel="stylesheet" type="text/css" href="../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - typefactory.h<span style="font-size: 80%;"> (<a href="typefactory.h.gcov.html" title="Click to go to source detail">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">12</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2026-10-20 13:34:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">27</td>
<td class="headerCovTableEntry">27</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td class="headerItem">Branches:</td>
<td class="headerCovTableEntryLo">50.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="typefactory.h.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L104">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::contains(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L64">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::TypeFactory()</a></td>
<td class="coverFnHi">950</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L64">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::TypeFactory()</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L64">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::TypeFactory()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnHi">14238</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::registerType&lt;(anonymous namespace)::FactoryFirst&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::registerType&lt;(anonymous namespace)::FactorySecond&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;CountingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcCommentHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcFrameHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcSignalHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcUnsupportedMultiplexingHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcValueDescriptionHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcAttributeHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">2847</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L76">void TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::registerType&lt;DbcHeaderHandler&gt;(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;)</a></td>
<td class="coverFnAliasHi">6643</td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L97">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::create(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">14239</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L97">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::create(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt;) const</a></td>
<td class="coverFnAliasHi">3</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L97">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::create(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnAliasHi">14236</td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;CountingHandler&gt;()</a></td>
<td class="coverFnHi">14240</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;(anonymous namespace)::FactoryBase&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::instantiate&lt;(anonymous namespace)::FactorySecond&gt;(std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt;)</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;CountingHandler&gt;()</a></td>
<td class="coverFnAliasHi">1</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;(anonymous namespace)::FactoryBase&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::instantiate&lt;(anonymous namespace)::FactoryFirst&gt;(std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt;)</a></td>
<td class="coverFnAliasHi">3</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcCommentHandler&gt;()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcFrameHandler&gt;()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcSignalHandler&gt;()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcUnsupportedMultiplexingHandler&gt;()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcValueDescriptionHandler&gt;()</a></td>
<td class="coverFnAliasHi">949</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcAttributeHandler&gt;()</a></td>
<td class="coverFnAliasHi">2847</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L114">std::shared_ptr&lt;DbcStatementHandler&gt; TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::instantiate&lt;DbcHeaderHandler&gt;()</a></td>
<td class="coverFnAliasHi">6643</td>
</tr>
<tr>
<td class="coverFn"><a href="typefactory.h.gcov.html#L89">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::creator(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnHi">14241</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L89">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, (anonymous namespace)::FactoryBase, std::unique_ptr&lt;int, std::default_delete&lt;int&gt; &gt; &gt;::creator(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnAliasHi">5</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="typefactory.h.gcov.html#L89">TypeFactory&lt;std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, DbcStatementHandler&gt;::creator(std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) const</a></td>
<td class="coverFnAliasHi">14236</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>
Loaded 100 of 766 files, more files were not shown because too many files have changed in this diff. Show more