This commit is contained in:
deeaitch committed 2026-10-11 06:30:18 -04:00
1 parent 51fcdb88ac
commit 0708316a37
155 files changed
+5190 -2691

No files matched your search

+52 -11
View File
@@ -69,9 +69,7 @@
<filename>decode__database_8h.html</filename>
<class kind="struct">DecodeSignal</class>
<class kind="struct">DecodeFrame</class>
<class kind="struct">FrameKey</class>
<class kind="struct">FrameKeyHasher</class>
<class kind="struct">DecodeDatabase</class>
<class kind="class">DecodeDatabase</class>
<member kind="enumeration">
<type></type>
<name>ByteOrder</name>
@@ -168,10 +166,10 @@
<name>DbcDecoder</name>
<filename>classDbcDecoder.html</filename>
<member kind="function">
<type>const DecodeFrame *</type>
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>FindFrame</name>
<anchorfile>classDbcDecoder.html</anchorfile>
<anchor>ab2cfb2fb711c95d3a29365546b89f3da</anchor>
<anchor>a4005c4311f57b7faf21c0cb31463039c</anchor>
<arglist>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</arglist>
</member>
<member kind="function">
@@ -271,18 +269,46 @@
<filename>classDbcValueDescriptionHandler.html</filename>
<base>DbcStatementHandler</base>
</compound>
<compound kind="struct">
<compound kind="class">
<name>DecodeDatabase</name>
<filename>structDecodeDatabase.html</filename>
<filename>classDecodeDatabase.html</filename>
<member kind="function">
<type></type>
<name>DecodeDatabase</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>aa935a3a0d334f932d6a8c89a3818286a</anchor>
<arglist>(std::vector&lt; DecodeFrame &gt; frames)</arglist>
</member>
<member kind="function">
<type>const std::vector&lt; DecodeFrame &gt; &amp;</type>
<name>GetFrames</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>aa034c1510984a85f60ad6c0bd744d6e8</anchor>
<arglist>() const</arglist>
</member>
<member kind="function">
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>FindFrame</name>
<anchorfile>classDecodeDatabase.html</anchorfile>
<anchor>a780d6e747a48b10a5eb0ab85448d2970</anchor>
<arglist>(const FrameKey &amp;key) const</arglist>
</member>
</compound>
<compound kind="struct">
<name>DecodedFrameValue</name>
<filename>structDecodedFrameValue.html</filename>
<member kind="variable">
<type>const DecodeFrame *</type>
<type>std::shared_ptr&lt; const DecodeFrame &gt;</type>
<name>definition</name>
<anchorfile>structDecodedFrameValue.html</anchorfile>
<anchor>a60dda1cc352d2c8087f0bdbc81dd266c</anchor>
<anchor>a33e971ba10030506007aa201c89f351d</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>FrameKey</type>
<name>key</name>
<anchorfile>structDecodedFrameValue.html</anchorfile>
<anchor>a32143efe2023a1ecd977a9ae93e50b73</anchor>
<arglist></arglist>
</member>
<member kind="variable">
@@ -311,10 +337,17 @@
<arglist>() const</arglist>
</member>
<member kind="variable">
<type>const DecodeSignal *</type>
<type>std::shared_ptr&lt; const DecodeSignal &gt;</type>
<name>definition</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>acadc3b3bb21dd6b0412d342c7e6b20d7</anchor>
<anchor>a828b5ef7faefc14fbf5dbd46249bcad2</anchor>
<arglist></arglist>
</member>
<member kind="variable">
<type>SignalKey</type>
<name>key</name>
<anchorfile>structDecodedSignalValue.html</anchorfile>
<anchor>a33df0fcd92b23b3e08539906fc6b4c4a</anchor>
<arglist></arglist>
</member>
<member kind="variable">
@@ -704,6 +737,14 @@
<arglist></arglist>
</member>
</compound>
<compound kind="struct">
<name>SignalKey</name>
<filename>structSignalKey.html</filename>
</compound>
<compound kind="struct">
<name>SignalKeyHasher</name>
<filename>structSignalKeyHasher.html</filename>
</compound>
<compound kind="class">
<name>TreeNode</name>
<filename>classTreeNode.html</filename>
+16 -10
View File
@@ -7,9 +7,10 @@
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:79: warning: Compound DbcUnsupportedMultiplexingHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:74: warning: Compound DbcValueDescriptionHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:12: warning: Compound PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:56: warning: Compound SignalKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:32: warning: Member SignalDecodeStatus (enumeration) of file dbc_decoder.h is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/examples/main.cpp:100: warning: Member main(int argc, char *argv[]) (function) of file examples/main.cpp is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/README.md:1509: warning: end of comment block while expecting command </tt>
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/README.md:1576: warning: end of comment block while expecting command </tt>
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:68: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:26: warning: Member severity (variable) of struct DbcDiagnostic is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_diagnostic.h:27: warning: Member code (variable) of struct DbcDiagnostic is not documented.
@@ -46,15 +47,15 @@
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/qt/dbc_tree_model.h:44: warning: Member flags(const QModelIndex &index) const override (function) of class DbcTreeModel is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:81: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcUnsupportedMultiplexingHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:76: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcValueDescriptionHandler is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:110: warning: Member frames (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:111: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:48: warning: Member status (variable) of struct DecodedSignalValue is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:42: warning: Member multiplexing (variable) of struct DecodeSignal is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:86: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:90: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:99: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:101: warning: Member FindSignal(const SignalKey &key) const (function) of class DecodeDatabase is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_decoder.h:49: warning: Member status (variable) of struct DecodedSignalValue is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:78: warning: Member GetKey() const (function) of struct DecodeFrame is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:44: warning: Member multiplexing (variable) of struct DecodeSignal is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:21: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:25: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:16: warning: Member canId (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:17: warning: Member isExtended (variable) of struct FrameKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:34: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/multiplexing.h:15: warning: Member role (variable) of struct Multiplexing is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/multiplexing.h:16: warning: Member value (variable) of struct Multiplexing is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:13: warning: Member canId (variable) of struct PendingValueDescriptions is not documented.
@@ -63,6 +64,11 @@
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:16: warning: Member descriptions (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:17: warning: Member lineNumber (variable) of struct PendingValueDescriptions is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/signal_info.h:25: warning: Member multiplexing (variable) of struct SignalInfo is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:47: warning: Member SignalKey(FrameKey frameKey, std::string signalName) (function) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:51: warning: Member operator==(const SignalKey &other) const (function) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:43: warning: Member frame (variable) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:44: warning: Member name (variable) of struct SignalKey is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/definition_key.h:57: warning: Member operator()(const SignalKey &key) const (function) of struct SignalKeyHasher is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented.
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented.
+6 -4
View File
@@ -113,20 +113,22 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeModel.html" target="_self">DbcTreeModel</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcUnsupportedMultiplexingHandler.html" target="_self">DbcUnsupportedMultiplexingHandler</a></td><td class="desc"></td></tr>
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcValueDescriptionHandler.html" target="_self">DbcValueDescriptionHandler</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive </td></tr>
<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </td></tr>
<tr id="row_23_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Stable frame identifier: normalized CAN ID and frame type </td></tr>
<tr id="row_25_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structMultiplexing.html" target="_self">Multiplexing</a></td><td class="desc"></td></tr>
<tr id="row_27_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structPendingValueDescriptions.html" target="_self">PendingValueDescriptions</a></td><td class="desc"></td></tr>
<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
<tr id="row_29_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_31_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKey.html" target="_self">SignalKey</a></td><td class="desc"></td></tr>
<tr id="row_31_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKeyHasher.html" target="_self">SignalKeyHasher</a></td><td class="desc"></td></tr>
<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_33_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
+3 -1
View File
@@ -18,7 +18,7 @@ var annotated_dup =
[ "DbcTreeModel", "classDbcTreeModel.html", null ],
[ "DbcUnsupportedMultiplexingHandler", "classDbcUnsupportedMultiplexingHandler.html", null ],
[ "DbcValueDescriptionHandler", "classDbcValueDescriptionHandler.html", null ],
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
[ "DecodeDatabase", "classDecodeDatabase.html", "classDecodeDatabase" ],
[ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ],
[ "DecodedSignalValue", "structDecodedSignalValue.html", "structDecodedSignalValue" ],
[ "DecodeFrame", "structDecodeFrame.html", "structDecodeFrame" ],
@@ -30,6 +30,8 @@ var annotated_dup =
[ "PendingValueDescriptions", "structPendingValueDescriptions.html", null ],
[ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ],
[ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ],
[ "SignalKey", "structSignalKey.html", null ],
[ "SignalKeyHasher", "structSignalKeyHasher.html", null ],
[ "TreeNode", "classTreeNode.html", "classTreeNode" ],
[ "TypeFactory", "classTypeFactory.html", "classTypeFactory" ]
];
+11 -5
View File
@@ -104,7 +104,7 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b" id="r_a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) const</td></tr>
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b" id="r_a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) const</td></tr>
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build runtime decode database. <br /></td></tr>
<tr class="separator:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@@ -120,7 +120,7 @@ Public Member Functions</h2></td></tr>
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> DbcDecodeBuilder::Build </td>
<td class="memname"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> DbcDecodeBuilder::Build </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>source</em></td><td>)</td>
@@ -136,11 +136,17 @@ Public Member Functions</h2></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Runtime-ready decode database. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Immutable runtime snapshot independent of source lifetime. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::invalid_argument</td><td>for duplicate frame keys or signal names. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00015">15</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00046">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00065">DecodeFrame::canId</a>, <a class="el" href="decode__database_8h_source.html#l00055">DecodeSignal::comment</a>, <a class="el" href="decode__database_8h_source.html#l00071">DecodeFrame::comment</a>, <a class="el" href="decode__database_8h_source.html#l00067">DecodeFrame::dlc</a>, <a class="el" href="decode__database_8h_source.html#l00048">DecodeSignal::factor</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00069">DecodeFrame::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00066">DecodeFrame::isExtended</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::length</a>, <a class="el" href="decode__database_8h_source.html#l00051">DecodeSignal::maximum</a>, <a class="el" href="decode__database_8h_source.html#l00050">DecodeSignal::minimum</a>, <a class="el" href="decode__database_8h_source.html#l00043">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00064">DecodeFrame::name</a>, <a class="el" href="decode__database_8h_source.html#l00049">DecodeSignal::offset</a>, <a class="el" href="decode__database_8h_source.html#l00068">DecodeFrame::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00053">DecodeSignal::receivers</a>, <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00070">DecodeFrame::transmitter</a>, <a class="el" href="decode__database_8h_source.html#l00052">DecodeSignal::unit</a>, <a class="el" href="decode__database_8h_source.html#l00054">DecodeSignal::valueDescriptions</a>, and <a class="el" href="decode__database_8h_source.html#l00047">DecodeSignal::valueType</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00048">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00067">DecodeFrame::canId</a>, <a class="el" href="decode__database_8h_source.html#l00057">DecodeSignal::comment</a>, <a class="el" href="decode__database_8h_source.html#l00073">DecodeFrame::comment</a>, <a class="el" href="decode__database_8h_source.html#l00069">DecodeFrame::dlc</a>, <a class="el" href="decode__database_8h_source.html#l00050">DecodeSignal::factor</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00071">DecodeFrame::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00068">DecodeFrame::isExtended</a>, <a class="el" href="decode__database_8h_source.html#l00047">DecodeSignal::length</a>, <a class="el" href="decode__database_8h_source.html#l00053">DecodeSignal::maximum</a>, <a class="el" href="decode__database_8h_source.html#l00052">DecodeSignal::minimum</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00066">DecodeFrame::name</a>, <a class="el" href="decode__database_8h_source.html#l00051">DecodeSignal::offset</a>, <a class="el" href="decode__database_8h_source.html#l00070">DecodeFrame::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00055">DecodeSignal::receivers</a>, <a class="el" href="decode__database_8h_source.html#l00046">DecodeSignal::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00072">DecodeFrame::transmitter</a>, <a class="el" href="decode__database_8h_source.html#l00054">DecodeSignal::unit</a>, <a class="el" href="decode__database_8h_source.html#l00056">DecodeSignal::valueDescriptions</a>, and <a class="el" href="decode__database_8h_source.html#l00049">DecodeSignal::valueType</a>.</p>
</div>
</div>
+1 -1
View File
@@ -97,7 +97,7 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<p>This is the complete list of members for <a class="el" href="classDbcDecoder.html">DbcDecoder</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a>(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</td><td class="entry"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
+17 -15
View File
@@ -105,28 +105,28 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab2cfb2fb711c95d3a29365546b89f3da" id="r_ab2cfb2fb711c95d3a29365546b89f3da"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database, std::uint32_t canId, bool isExtended) const</td></tr>
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find frame definition by CAN ID. <br /></td></tr>
<tr class="separator:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7" id="r_a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) const</td></tr>
<tr class="memitem:a4005c4311f57b7faf21c0cb31463039c" id="r_a4005c4311f57b7faf21c0cb31463039c"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a> (const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database, std::uint32_t canId, bool isExtended) const</td></tr>
<tr class="memdesc:a4005c4311f57b7faf21c0cb31463039c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find frame definition by CAN ID. <br /></td></tr>
<tr class="separator:a4005c4311f57b7faf21c0cb31463039c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7" id="r_a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) const</td></tr>
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decode one raw CAN frame. <br /></td></tr>
<tr class="separator:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Runtime CAN decoder using prebuilt decode database. </p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00072">72</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00074">74</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ab2cfb2fb711c95d3a29365546b89f3da" name="ab2cfb2fb711c95d3a29365546b89f3da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">&#9670;&#160;</a></span>FindFrame()</h2>
<a id="a4005c4311f57b7faf21c0cb31463039c" name="a4005c4311f57b7faf21c0cb31463039c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4005c4311f57b7faf21c0cb31463039c">&#9670;&#160;</a></span>FindFrame()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> * DbcDecoder::FindFrame </td>
<td class="memname">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; DbcDecoder::FindFrame </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramtype">const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>database</em>, </td>
</tr>
<tr>
@@ -158,11 +158,13 @@ Public Member Functions</h2></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to frame definition or nullptr. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Owning immutable frame handle or nullptr. Safe across reload. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00015">15</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__decoder_8cpp_source.html#l00031">Decode()</a>.</p>
<p class="reference">References <a class="el" href="decode__database_8cpp_source.html#l00033">DecodeDatabase::FindFrame()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__decoder_8cpp_source.html#l00021">Decode()</a>.</p>
</div>
</div>
@@ -175,7 +177,7 @@ Public Member Functions</h2></td></tr>
<tr>
<td class="memname"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a> DbcDecoder::Decode </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramtype">const <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;&#160;</td>
<td class="paramname"><em>database</em>, </td>
</tr>
<tr>
@@ -202,9 +204,9 @@ Public Member Functions</h2></td></tr>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Decoded frame value. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00031">31</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00021">21</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00062">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00014">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::isExtended</a>, and <a class="el" href="dbc__decoder_8h_source.html#l00064">DecodedFrameValue::valid</a>.</p>
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00044">DecodedSignalValue::definition</a>, <a class="el" href="dbc__decoder_8h_source.html#l00063">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00015">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::isExtended</a>, <a class="el" href="dbc__decoder_8h_source.html#l00045">DecodedSignalValue::key</a>, <a class="el" href="dbc__decoder_8h_source.html#l00064">DecodedFrameValue::key</a>, and <a class="el" href="dbc__decoder_8h_source.html#l00066">DecodedFrameValue::valid</a>.</p>
</div>
</div>
+1 -1
View File
@@ -1,5 +1,5 @@
var classDbcDecoder =
[
[ "FindFrame", "classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da", null ],
[ "FindFrame", "classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c", null ],
[ "Decode", "classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7", null ]
];
+113
View File
@@ -0,0 +1,113 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDecodeDatabase.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">DecodeDatabase Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DecodeDatabase</b>()=default (defined in <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a>)</td><td class="entry"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a">DecodeDatabase</a>(std::vector&lt; DecodeFrame &gt; frames)</td><td class="entry"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(const FrameKey &amp;key) const</td><td class="entry"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>FindSignal</b>(const SignalKey &amp;key) const (defined in <a class="el" href="classDecodeDatabase.html">DecodeDatabase</a>)</td><td class="entry"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>() const</td><td class="entry"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+234
View File
@@ -0,0 +1,234 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: DecodeDatabase Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classDecodeDatabase.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classDecodeDatabase-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">DecodeDatabase Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive.
<a href="classDecodeDatabase.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="decode__database_8h_source.html">decode_database.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa935a3a0d334f932d6a8c89a3818286a" id="r_aa935a3a0d334f932d6a8c89a3818286a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a">DecodeDatabase</a> (std::vector&lt; <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; frames)</td></tr>
<tr class="separator:aa935a3a0d334f932d6a8c89a3818286a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa034c1510984a85f60ad6c0bd744d6e8" id="r_aa034c1510984a85f60ad6c0bd744d6e8"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a> () const</td></tr>
<tr class="separator:aa034c1510984a85f60ad6c0bd744d6e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a780d6e747a48b10a5eb0ab85448d2970" id="r_a780d6e747a48b10a5eb0ab85448d2970"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a> (const <a class="el" href="structFrameKey.html">FrameKey</a> &amp;key) const</td></tr>
<tr class="separator:a780d6e747a48b10a5eb0ab85448d2970"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0af5b15b9953a4f6551c27ee9ae8b514" id="r_a0af5b15b9953a4f6551c27ee9ae8b514"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; const <a class="el" href="structDecodeSignal.html">DecodeSignal</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDecodeDatabase.html#a0af5b15b9953a4f6551c27ee9ae8b514">FindSignal</a> (const <a class="el" href="structSignalKey.html">SignalKey</a> &amp;key) const</td></tr>
<tr class="separator:a0af5b15b9953a4f6551c27ee9ae8b514"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive. </p>
<p class="definition">Definition at line <a class="el" href="decode__database_8h_source.html#l00087">87</a> of file <a class="el" href="decode__database_8h_source.html">decode_database.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aa935a3a0d334f932d6a8c89a3818286a" name="aa935a3a0d334f932d6a8c89a3818286a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa935a3a0d334f932d6a8c89a3818286a">&#9670;&#160;</a></span>DecodeDatabase()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">DecodeDatabase::DecodeDatabase </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt;&#160;</td>
<td class="paramname"><em>frames</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Freeze definitions and build the frame index. Do not retain mutable aliases into moved input vectors. </p><dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::invalid_argument</td><td>for duplicate frame keys or signal names. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="decode__database_8cpp_source.html#l00024">24</a> of file <a class="el" href="decode__database_8cpp_source.html">decode_database.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aa034c1510984a85f60ad6c0bd744d6e8" name="aa034c1510984a85f60ad6c0bd744d6e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa034c1510984a85f60ad6c0bd744d6e8">&#9670;&#160;</a></span>GetFrames()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::vector&lt; <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; &amp; DecodeDatabase::GetFrames </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Borrowed view, valid while this snapshot remains alive and unchanged. </p>
<p class="definition">Definition at line <a class="el" href="decode__database_8cpp_source.html#l00028">28</a> of file <a class="el" href="decode__database_8cpp_source.html">decode_database.cpp</a>.</p>
</div>
</div>
<a id="a780d6e747a48b10a5eb0ab85448d2970" name="a780d6e747a48b10a5eb0ab85448d2970"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a780d6e747a48b10a5eb0ab85448d2970">&#9670;&#160;</a></span>FindFrame()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::shared_ptr&lt; const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> &gt; DecodeDatabase::FindFrame </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structFrameKey.html">FrameKey</a> &amp;&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Owning handles retain the entire snapshot across reload or destruction. </p>
<p class="definition">Definition at line <a class="el" href="decode__database_8cpp_source.html#l00033">33</a> of file <a class="el" href="decode__database_8cpp_source.html">decode_database.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__decoder_8cpp_source.html#l00015">DbcDecoder::FindFrame()</a>.</p>
</div>
</div>
<a id="a0af5b15b9953a4f6551c27ee9ae8b514" name="a0af5b15b9953a4f6551c27ee9ae8b514"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0af5b15b9953a4f6551c27ee9ae8b514">&#9670;&#160;</a></span>FindSignal()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::shared_ptr&lt; const <a class="el" href="structDecodeSignal.html">DecodeSignal</a> &gt; DecodeDatabase::FindSignal </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structSignalKey.html">SignalKey</a> &amp;&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="decode__database_8cpp_source.html#l00043">43</a> of file <a class="el" href="decode__database_8cpp_source.html">decode_database.cpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="decode__database_8h_source.html">decode_database.h</a></li>
<li><a class="el" href="decode__database_8cpp_source.html">decode_database.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+6
View File
@@ -0,0 +1,6 @@
var classDecodeDatabase =
[
[ "DecodeDatabase", "classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a", null ],
[ "GetFrames", "classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8", null ],
[ "FindFrame", "classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970", null ]
];
+2 -2
View File
@@ -97,7 +97,7 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
<dd><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></dd><dd><a class="el" href="structDbcDatabase.html">DbcDatabase</a></dd><dd><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></dd><dd><a class="el" href="classDbcDecoder.html">DbcDecoder</a></dd><dd><a class="el" href="structDbcDiagnostic.html">DbcDiagnostic</a></dd><dd><a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a></dd><dd><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></dd><dd><a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a></dd><dd><a class="el" href="structDbcParseContext.html">DbcParseContext</a></dd><dd><a class="el" href="classDbcParser.html">DbcParser</a></dd><dd><a class="el" href="structDbcParseResult.html">DbcParseResult</a></dd><dd><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></dd><dd><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></dd><dd><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></dd><dd><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></dd><dd><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></dd><dd><a class="el" href="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</a></dd><dd><a class="el" href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</a></dd><dd><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a></dd><dd><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a></dd><dd><a class="el" href="structDecodedSignalValue.html">DecodedSignalValue</a></dd><dd><a class="el" href="structDecodeFrame.html">DecodeFrame</a></dd><dd><a class="el" href="structDecodeSignal.html">DecodeSignal</a></dd></dl>
<dd><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></dd><dd><a class="el" href="structDbcDatabase.html">DbcDatabase</a></dd><dd><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></dd><dd><a class="el" href="classDbcDecoder.html">DbcDecoder</a></dd><dd><a class="el" href="structDbcDiagnostic.html">DbcDiagnostic</a></dd><dd><a class="el" href="classDbcDiagnosticError.html">DbcDiagnosticError</a></dd><dd><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></dd><dd><a class="el" href="classDbcHeaderHandler.html">DbcHeaderHandler</a></dd><dd><a class="el" href="structDbcParseContext.html">DbcParseContext</a></dd><dd><a class="el" href="classDbcParser.html">DbcParser</a></dd><dd><a class="el" href="structDbcParseResult.html">DbcParseResult</a></dd><dd><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></dd><dd><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></dd><dd><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></dd><dd><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></dd><dd><a class="el" href="classDbcTreeModel.html">DbcTreeModel</a></dd><dd><a class="el" href="classDbcUnsupportedMultiplexingHandler.html">DbcUnsupportedMultiplexingHandler</a></dd><dd><a class="el" href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</a></dd><dd><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></dd><dd><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a></dd><dd><a class="el" href="structDecodedSignalValue.html">DecodedSignalValue</a></dd><dd><a class="el" href="structDecodeFrame.html">DecodeFrame</a></dd><dd><a class="el" href="structDecodeSignal.html">DecodeSignal</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
<dd><a class="el" href="structFrameInfo.html">FrameInfo</a></dd><dd><a class="el" href="structFrameKey.html">FrameKey</a></dd><dd><a class="el" href="structFrameKeyHasher.html">FrameKeyHasher</a></dd></dl>
@@ -112,7 +112,7 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
<dd><a class="el" href="structRawCanFrame.html">RawCanFrame</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
<dd><a class="el" href="structSignalInfo.html">SignalInfo</a></dd></dl>
<dd><a class="el" href="structSignalInfo.html">SignalInfo</a></dd><dd><a class="el" href="structSignalKey.html">SignalKey</a></dd><dd><a class="el" href="structSignalKeyHasher.html">SignalKeyHasher</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
<dd><a class="el" href="classTreeNode.html">TreeNode</a></dd><dd><a class="el" href="classTypeFactory.html">TypeFactory</a></dd></dl>
File diff suppressed because it is too large. Load diff
+1
View File
@@ -97,6 +97,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>&quot;</code><br />
<code>#include &lt;utility&gt;</code><br />
</div>
<p><a href="dbc__decode__builder_8cpp_source.html">Go to the source code of this file.</a></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+70 -70
View File
@@ -100,82 +100,82 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
<div class="contents">
<a href="dbc__decode__builder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>&quot;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="foldopen" id="foldopen00014" data-start="{" data-end="}">
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"> 14</a></span><a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &amp;source)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> result;</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> &amp;sourceFrame : source.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>) {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> targetFrame;</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a> = sourceFrame.name;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = sourceFrame.canId;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a> = sourceFrame.isExtended;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = sourceFrame.dlc;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">pgn</a> = sourceFrame.pgn;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">hasPgn</a> = sourceFrame.hasPgn;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">transmitter</a> = sourceFrame.transmitter;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a> = sourceFrame.comment;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;sourceSignal : sourceFrame.signals) {</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> targetSignal;</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> targetSignal.multiplexing = sourceSignal.multiplexing;</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = sourceSignal.name;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = sourceSignal.startBit;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = sourceSignal.length;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = sourceSignal.factor;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = sourceSignal.offset;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">minimum</a> = sourceSignal.minimum;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">maximum</a> = sourceSignal.maximum;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a> = sourceSignal.unit;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">receivers</a> = sourceSignal.receivers;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">comment</a> = sourceSignal.comment;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">valueDescriptions</a> = sourceSignal.valueDescriptions;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> targetFrame.signals.push_back(targetSignal);</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> }</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="foldopen" id="foldopen00015" data-start="{" data-end="}">
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"> 15</a></span><a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &amp;source)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::vector&lt;DecodeFrame&gt; frames;</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> frames.reserve(source.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size());</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> &amp;sourceFrame: source.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>) {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> targetFrame;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a> = sourceFrame.name;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = sourceFrame.canId;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a> = sourceFrame.isExtended;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = sourceFrame.dlc;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">pgn</a> = sourceFrame.pgn;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">hasPgn</a> = sourceFrame.hasPgn;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">transmitter</a> = sourceFrame.transmitter;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a> = sourceFrame.comment;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> targetFrame.signals.reserve(sourceFrame.signals.size());</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;sourceSignal: sourceFrame.signals) {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> targetSignal;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> targetSignal.multiplexing = sourceSignal.multiplexing;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = sourceSignal.name;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = sourceSignal.startBit;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = sourceSignal.length;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = sourceSignal.factor;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = sourceSignal.offset;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">minimum</a> = sourceSignal.minimum;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">maximum</a> = sourceSignal.maximum;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a> = sourceSignal.unit;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">receivers</a> = sourceSignal.receivers;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">comment</a> = sourceSignal.comment;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> targetSignal.<a class="code hl_variable" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">valueDescriptions</a> = sourceSignal.valueDescriptions;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> result.frames.push_back(targetFrame);</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> result.frameIndexByKey[<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, targetFrame.<a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a>)] =</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> result.frames.size() - 1U;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> targetFrame.signals.push_back(std::move(targetSignal));</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> frames.push_back(std::move(targetFrame));</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> }</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(std::move(frames));</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>}</div>
</div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector&lt; FrameInfo &gt; frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00068">decode_database.h:68</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00071">decode_database.h:71</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00066">decode_database.h:66</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00064">decode_database.h:64</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00070">decode_database.h:70</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00052">decode_database.h:52</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a822155d9bf4ed5f3300c9e9befe606ff"><div class="ttname"><a href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">DecodeSignal::valueDescriptions</a></div><div class="ttdeci">ValueDescriptions valueDescriptions</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00054">decode_database.h:54</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector&lt; std::string &gt; receivers</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00053">decode_database.h:53</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00055">decode_database.h:55</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00070">decode_database.h:70</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00071">decode_database.h:71</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00073">decode_database.h:73</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00068">decode_database.h:68</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00066">decode_database.h:66</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00072">decode_database.h:72</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00052">decode_database.h:52</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00054">decode_database.h:54</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00053">decode_database.h:53</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a822155d9bf4ed5f3300c9e9befe606ff"><div class="ttname"><a href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">DecodeSignal::valueDescriptions</a></div><div class="ttdeci">ValueDescriptions valueDescriptions</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00056">decode_database.h:56</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector&lt; std::string &gt; receivers</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00055">decode_database.h:55</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00057">decode_database.h:57</a></div></div>
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
@@ -108,17 +108,17 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h_source.html','
<div class="foldopen" id="foldopen00021" data-start="{" data-end="};">
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html"> 21</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> {</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>};</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &amp;source) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>};</div>
</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODE_BUILDER_H */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODE_BUILDER_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="adbc__database_8h_html"><div class="ttname"><a href="dbc__database_8h.html">dbc_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
+1
View File
@@ -97,6 +97,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>&quot;</code><br />
<code>#include &lt;utility&gt;</code><br />
</div>
<p><a href="dbc__decoder_8cpp_source.html">Go to the source code of this file.</a></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+198 -200
View File
@@ -100,223 +100,221 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
<div class="contents">
<a href="dbc__decoder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>&quot;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="foldopen" id="foldopen00014" data-start="{" data-end="}">
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"> 14</a></span><span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::uint32_t canId,</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">bool</span> isExtended)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> key(canId, isExtended);</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">const</span> std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt;::const_iterator it =</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> database.frameIndexByKey.find(key);</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="foldopen" id="foldopen00015" data-start="{" data-end="}">
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c"> 15</a></span>std::shared_ptr&lt;const DecodeFrame&gt; <a class="code hl_function" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder::FindFrame</a>(<span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::uint32_t canId,</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">bool</span> isExtended)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordflow">return</span> database.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(canId, isExtended));</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span>}</div>
</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">if</span> (it == database.frameIndexByKey.end())</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">const</span> std::size_t index = it-&gt;second;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">if</span> (index &gt;= database.frames.size())</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">return</span> &amp;database.frames[index];</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>}</div>
</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="foldopen" id="foldopen00031" data-start="{" data-end="}">
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"> 31</a></span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *definition = <a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a>(database, frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>, frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>);</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> (definition == <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> = definition;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> = <span class="keyword">true</span>;</div>
<div class="foldopen" id="foldopen00021" data-start="{" data-end="}">
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"> 21</a></span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a>(<span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> result.<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a> = <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>, frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>);</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">const</span> std::shared_ptr&lt;const DecodeFrame&gt; definition = <a class="code hl_function" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a>(database, frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>, frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>);</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">if</span> (definition == <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> result.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a> = definition;</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> SelectorState selector = ReadSelector(*definition, frame);</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> result.signals.reserve(definition-&gt;signals.size());</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal: definition-&gt;signals) {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = DecodeOneSignal(signal, frame, selector);</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a> = std::shared_ptr&lt;const DecodeSignal&gt;(definition, &amp;signal);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">key</a> = <a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a>, signal.name);</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> result.signals.push_back(std::move(decoded));</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> }</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">const</span> SelectorState selector = ReadSelector(*definition, frame);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal : definition-&gt;signals)</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> result.signals.push_back(DecodeOneSignal(signal, frame, selector));</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>}</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>}</div>
</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>DbcDecoder::SelectorState DbcDecoder::ReadSelector(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> &amp;definition,</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) {</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> SelectorState selector;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> std::size_t count = 0U;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal : definition.signals) {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (signal.multiplexing.role == MultiplexRole::Selector) {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> selector.definition = &amp;signal;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> ++count;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> }</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (count != 1U)</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> selector;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal = *selector.definition;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> selector.valid = signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Unsigned &amp;&amp;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 0U &amp;&amp; signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &lt;= 64U;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> selector.available = selector.valid &amp;&amp; ExtractUnsigned(frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>, signal, selector.value);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> selector;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>}</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> DbcDecoder::DecodeOneSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame,</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> SelectorState &amp;selector) {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> std::uint64_t unsignedValue = 0U;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> = &amp;signal;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U || signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 64U ||</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> (signal.multiplexing.role != MultiplexRole::Unconditional &amp;&amp; !selector.valid)) {</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span> (signal.multiplexing.role == MultiplexRole::Branch) {</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (selector.definition-&gt;length &lt; 64U &amp;&amp; signal.multiplexing.value &gt;= (std::uint64_t(1U) &lt;&lt; selector.definition-&gt;length)) {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (!selector.available) {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> decoded.status = SignalDecodeStatus::SelectorUnavailable;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (signal.multiplexing.value != selector.value) {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> decoded.status = SignalDecodeStatus::Inactive;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span> (!ExtractUnsigned(frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>, signal, unsignedValue)) {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> decoded.status = SignalDecodeStatus::InsufficientPayload;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Signed)</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = SignExtend(unsignedValue, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>);</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>DbcDecoder::SelectorState DbcDecoder::ReadSelector(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> &amp;definition,</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> SelectorState selector;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::size_t count = 0U;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal: definition.signals) {</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span> (signal.multiplexing.role == MultiplexRole::Selector) {</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> selector.definition = &amp;signal;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> ++count;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> }</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span> (count != 1U)</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> selector;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal = *selector.definition;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> selector.valid = signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Unsigned &amp;&amp;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 0U &amp;&amp; signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &lt;= 64U;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> selector.available = selector.valid &amp;&amp; ExtractUnsigned(frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>, signal, selector.value);</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> selector;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>}</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> DbcDecoder::DecodeOneSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame,</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> SelectorState &amp;selector) {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> std::uint64_t unsignedValue = 0U;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U || signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 64U ||</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> (signal.multiplexing.role != MultiplexRole::Unconditional &amp;&amp; !selector.valid)) {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span> (signal.multiplexing.role == MultiplexRole::Branch) {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (selector.definition-&gt;length &lt; 64U &amp;&amp; signal.multiplexing.value &gt;= (std::uint64_t(1U) &lt;&lt; selector.definition-&gt;length)) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (!selector.available) {</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> decoded.status = SignalDecodeStatus::SelectorUnavailable;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> }</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (signal.multiplexing.value != selector.value) {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> decoded.status = SignalDecodeStatus::Inactive;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> }</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span> (!ExtractUnsigned(frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>, signal, unsignedValue)) {</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> decoded.status = SignalDecodeStatus::InsufficientPayload;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> }</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Signed)</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = SignExtend(unsignedValue, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = unsignedValue;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">double</span> numericValue;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> std::int64_t *signedValue = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>))</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> numericValue = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(*signedValue);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = unsignedValue;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">double</span> numericValue;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> std::int64_t *signedValue = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>))</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> numericValue = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(*signedValue);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> numericValue = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(std::get&lt;std::uint64_t&gt;(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>));</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> = numericValue * signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> + signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a>;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> decoded.status = SignalDecodeStatus::Valid;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>}</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> numericValue = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(std::get&lt;std::uint64_t&gt;(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>));</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> = numericValue * signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> + signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a>;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> decoded.status = SignalDecodeStatus::Valid;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> decoded;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keywordtype">bool</span> DbcDecoder::ExtractUnsigned(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U) || (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 64U))</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="keywordtype">bool</span> DbcDecoder::ExtractUnsigned(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U) || (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> &gt; 64U))</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> == ByteOrder::Intel)</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> ExtractIntel(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">return</span> ExtractMotorola(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>}</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> == ByteOrder::Intel)</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span> ExtractIntel(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> ExtractMotorola(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="keywordtype">bool</span> DbcDecoder::ExtractIntel(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> std::uint32_t length,</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> value = 0U;</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keywordtype">bool</span> DbcDecoder::ExtractIntel(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> std::uint32_t length,</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> value = 0U;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> std::uint32_t absoluteBit = startBit + bitIndex;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> std::uint32_t byteIndex = absoluteBit / 8U;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">const</span> std::uint32_t bitInByte = absoluteBit % 8U;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">const</span> std::uint32_t absoluteBit = startBit + bitIndex;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">const</span> std::uint32_t byteIndex = absoluteBit / 8U;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">const</span> std::uint32_t bitInByte = absoluteBit % 8U;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (byteIndex &gt;= data.size())</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> std::uint64_t bitValue =</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> (<span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U) &lt;&lt; bitIndex);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span> (byteIndex &gt;= data.size())</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> value |= bitValue;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">const</span> std::uint64_t bitValue =</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> (<span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U) &lt;&lt; bitIndex);</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> value |= bitValue;</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span>}</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="keywordtype">bool</span> DbcDecoder::ExtractMotorola(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> std::uint32_t length,</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/*</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment"> * DBC Motorola bit numbering:</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment"> * - startBit points to the most significant bit of the signal</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> * - inside a byte, bit numbering goes 7..0</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment"> * - crossing byte boundary moves to the next byte, bit 7</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment"> * Example: a signal starting at 7 follows 7..0, 15..8, 23..16.</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="comment"> */</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> value = 0U;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> std::size_t byteIndex = startBit / 8U;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> std::uint32_t bitInByte = startBit % 8U;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span> (byteIndex &gt;= data.size())</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> value &lt;&lt;= 1U;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> value |= <span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U);</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (bitInByte == 0U) {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> ++byteIndex;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> bitInByte = 7U;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> --bitInByte;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>std::int64_t DbcDecoder::SignExtend(std::uint64_t value, std::uint32_t bitLength) {</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> ((bitLength == 0U) || (bitLength &gt; 64U))</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="keywordtype">bool</span> DbcDecoder::ExtractMotorola(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> std::uint32_t length,</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> std::uint64_t &amp;value) {</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">/*</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="comment"> * DBC Motorola bit numbering:</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment"> * - startBit points to the most significant bit of the signal</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> * - inside a byte, bit numbering goes 7..0</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment"> * - crossing byte boundary moves to the next byte, bit 7</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * Example: a signal starting at 7 follows 7..0, 15..8, 23..16.</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> */</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> value = 0U;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> std::size_t byteIndex = startBit / 8U;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> std::uint32_t bitInByte = startBit % 8U;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex &lt; length; ++bitIndex) {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span> (byteIndex &gt;= data.size())</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> value &lt;&lt;= 1U;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> value |= <span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>((data[byteIndex] &gt;&gt; bitInByte) &amp; 0x01U);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span> (bitInByte == 0U) {</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> ++byteIndex;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> bitInByte = 7U;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> --bitInByte;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span>}</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>std::int64_t DbcDecoder::SignExtend(std::uint64_t value, std::uint32_t bitLength) {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> ((bitLength == 0U) || (bitLength &gt; 64U))</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">const</span> std::uint64_t signMask = std::uint64_t(1U) &lt;&lt; (bitLength - 1U);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">const</span> std::uint64_t valueMask = (bitLength == 64U)</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> ? ~std::uint64_t(0U)</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> : (std::uint64_t(1U) &lt;&lt; bitLength) - 1U;</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> value &amp;= valueMask;</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">const</span> std::uint64_t signMask = std::uint64_t(1U) &lt;&lt; (bitLength - 1U);</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">const</span> std::uint64_t valueMask = (bitLength == 64U)</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> ? ~std::uint64_t(0U)</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> : (std::uint64_t(1U) &lt;&lt; bitLength) - 1U;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> value &amp;= valueMask;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span> ((value &amp; signMask) == 0U)</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>(value);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// The complemented magnitude fits int64_t, including for INT64_MIN.</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> -1 - <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>((~value) &amp; valueMask);</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>}</div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span> ((value &amp; signMask) == 0U)</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>(value);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// The complemented magnitude fits int64_t, including for INT64_MIN.</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">return</span> -1 - <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>((~value) &amp; valueMask);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>}</div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a4005c4311f57b7faf21c0cb31463039c"><div class="ttname"><a href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00015">dbc_decoder.cpp:15</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_a780d6e747a48b10a5eb0ab85448d2970"><div class="ttname"><a href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const FrameKey &amp;key) const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00033">decode_database.cpp:33</a></div></div>
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a32143efe2023a1ecd977a9ae93e50b73"><div class="ttname"><a href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue::key</a></div><div class="ttdeci">FrameKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a33df0fcd92b23b3e08539906fc6b4c4a"><div class="ttname"><a href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue::key</a></div><div class="ttdeci">SignalKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a828b5ef7faefc14fbf5dbd46249bcad2"><div class="ttname"><a href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeSignal &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00048">dbc_decoder.h:48</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector&lt; std::uint8_t &gt; data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
+86 -81
View File
@@ -110,9 +110,9 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="};">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="structRawCanFrame.html"> 24</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> {</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4"> 25</a></span> std::uint32_t <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 0U; </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7"> 26</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83"> 27</a></span> std::vector&lt;std::uint8_t&gt; <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>; </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4"> 25</a></span> std::uint32_t <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 0U; </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7"> 26</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83"> 27</a></span> std::vector&lt;std::uint8_t&gt; <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>; </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>};</div>
</div>
@@ -127,94 +127,99 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="foldopen" id="foldopen00043" data-start="{" data-end="};">
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html"> 43</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> {</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"> 44</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> *<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> = <span class="keyword">nullptr</span>; </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28"> 45</a></span> RawSignalValue <a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = std::uint64_t(0U); </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"> 46</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> = 0.0; </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"> 47</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="foldopen" id="foldopen00051" data-start="{" data-end="}">
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2"> 51</a></span> <span class="keyword">const</span> std::string *<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> &amp;&amp; <a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> ? FindValueDescription(<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>-&gt;<a class="code hl_variable" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">valueDescriptions</a>, <a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>) : <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2"> 44</a></span> std::shared_ptr&lt;const DecodeSignal&gt; <a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>; </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a"> 45</a></span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> <a class="code hl_variable" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">key</a>; </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28"> 46</a></span> RawSignalValue <a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> = std::uint64_t(0U); </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"> 47</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> = 0.0; </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"> 48</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="foldopen" id="foldopen00052" data-start="{" data-end="}">
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2"> 52</a></span> <span class="keyword">const</span> std::string *<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> &amp;&amp; <a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a> ? FindValueDescription(<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>-&gt;valueDescriptions, <a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>) : <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> }</div>
</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>};</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>};</div>
</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="foldopen" id="foldopen00061" data-start="{" data-end="};">
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html"> 61</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"> 62</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> = <span class="keyword">nullptr</span>; </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"> 63</a></span> std::vector&lt;DecodedSignalValue&gt; signals; </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"> 64</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>};</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="foldopen" id="foldopen00062" data-start="{" data-end="};">
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html"> 62</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> {</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d"> 63</a></span> std::shared_ptr&lt;const DecodeFrame&gt; <a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>; </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73"> 64</a></span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> <a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a>; </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"> 65</a></span> std::vector&lt;DecodedSignalValue&gt; signals; </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"> 66</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>};</div>
</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="foldopen" id="foldopen00072" data-start="{" data-end="};">
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classDbcDecoder.html"> 72</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> std::uint32_t canId,</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">bool</span> isExtended) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">struct </span>SelectorState {</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> *definition = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">bool</span> valid = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">bool</span> available = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::uint64_t value = 0U;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> };</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">static</span> SelectorState ReadSelector(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> &amp;definition, <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">static</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> DecodeOneSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame,</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">const</span> SelectorState &amp;selector);</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractUnsigned(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractIntel(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> std::uint32_t length,</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractMotorola(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> std::uint32_t length,</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">static</span> std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>};</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="foldopen" id="foldopen00074" data-start="{" data-end="};">
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="classDbcDecoder.html"> 74</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::shared_ptr&lt;const DecodeFrame&gt; <a class="code hl_function" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a>(<span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> std::uint32_t canId,</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">bool</span> isExtended) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(<span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> &amp;database,</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">struct </span>SelectorState {</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> *definition = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">bool</span> valid = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">bool</span> available = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> std::uint64_t value = 0U;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> };</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">static</span> SelectorState ReadSelector(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> &amp;definition, <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">static</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> DecodeOneSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &amp;frame,</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">const</span> SelectorState &amp;selector);</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractUnsigned(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal,</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractIntel(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> std::uint32_t length,</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractMotorola(<span class="keyword">const</span> std::vector&lt;std::uint8_t&gt; &amp;data,</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> std::uint32_t startBit,</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> std::uint32_t length,</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> std::uint64_t &amp;value);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">static</span> std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span>};</div>
</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODER_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00072">dbc_decoder.h:72</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODER_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a4005c4311f57b7faf21c0cb31463039c"><div class="ttname"><a href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00015">dbc_decoder.cpp:15</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a822155d9bf4ed5f3300c9e9befe606ff"><div class="ttname"><a href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">DecodeSignal::valueDescriptions</a></div><div class="ttdeci">ValueDescriptions valueDescriptions</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00054">decode_database.h:54</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a32143efe2023a1ecd977a9ae93e50b73"><div class="ttname"><a href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue::key</a></div><div class="ttdeci">FrameKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_affc38af1bf31bcb6f2c33044bce92bd2"><div class="ttname"><a href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">DecodedSignalValue::GetValueDescription</a></div><div class="ttdeci">const std::string * GetValueDescription() const</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a33df0fcd92b23b3e08539906fc6b4c4a"><div class="ttname"><a href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue::key</a></div><div class="ttdeci">SignalKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a828b5ef7faefc14fbf5dbd46249bcad2"><div class="ttname"><a href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeSignal &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00048">dbc_decoder.h:48</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_affc38af1bf31bcb6f2c33044bce92bd2"><div class="ttname"><a href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">DecodedSignalValue::GetValueDescription</a></div><div class="ttdeci">const std::string * GetValueDescription() const</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector&lt; std::uint8_t &gt; data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
+110 -115
View File
@@ -168,124 +168,119 @@ $(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html','
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0x123U;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = <span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(test.data.size());</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> definition.signals.push_back(signal);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> database.frames.push_back(definition);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <span class="keyword">false</span>), 0U);</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = test.data;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> QVERIFY2(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>, test.name);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> QCOMPARE(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>, &amp;database.frames[0]);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> QCOMPARE(result.signals.size(), std::size_t(1U));</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &amp;decoded = result.signals[0];</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>, &amp;database.frames[0].signals[0]);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>, test.valid);</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (!test.valid)</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span> (test.valueType == ValueType::Signed) {</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">const</span> std::int64_t *raw = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> QVERIFY(raw != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> QCOMPARE(*raw, test.rawValue);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">const</span> std::uint64_t *raw = std::get_if&lt;std::uint64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> QVERIFY(raw != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> QCOMPARE(*raw, <span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>(test.rawValue));</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>, test.physicalValue);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>}</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="keywordtype">void</span> DbcDecoderTest::boundaries() {</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> std::uint64_t(0x8000000000000000ULL),</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> std::uint64_t(0x8000000000000001ULL),</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> definition.signals.push_back(signal);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> database.frames.push_back(definition);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(0U, <span class="keyword">false</span>), 0U);</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> &lt; 8U; ++byte) {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(bits &gt;&gt; shift));</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> std::int64_t signedExpected = bits &lt;= 0x7FFFFFFFFFFFFFFFULL</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> ? <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>(bits)</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> : std::numeric_limits&lt;std::int64_t&gt;::min() +</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> static_cast&lt;std::int64_t&gt;(bits - 0x8000000000000000ULL);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &amp;decoded = result.signals.at(0U);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">const</span> RawSignalValue expected = type == ValueType::Unsigned</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> ? std::variant&lt;std::int64_t, std::uint64_t&gt;(bits)</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> : std::variant&lt;std::int64_t, std::uint64_t&gt;(signedExpected);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> ? <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(bits)</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> : static_cast&lt;double&gt;(signedExpected)) *</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> 0.5 +</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> 10.0;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> std::ostringstream actualText;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> std::ostringstream expectedText;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> std::int64_t *signedValue = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>))</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> actualText &lt;&lt; *signedValue;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database({definition});</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> frame.data = test.data;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> QVERIFY2(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>, test.name);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> QCOMPARE(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>.get(), &amp;database.GetFrames()[0]);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> QCOMPARE(result.signals.size(), std::size_t(1U));</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &amp;decoded = result.signals[0];</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>.get(), &amp;database.GetFrames()[0].signals[0]);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>, test.valid);</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (!test.valid)</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> (test.valueType == ValueType::Signed) {</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">const</span> std::int64_t *raw = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> QVERIFY(raw != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> QCOMPARE(*raw, test.rawValue);</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> std::uint64_t *raw = std::get_if&lt;std::uint64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> QVERIFY(raw != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> QCOMPARE(*raw, <span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>(test.rawValue));</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>, test.physicalValue);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>}</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="keywordtype">void</span> DbcDecoderTest::boundaries() {</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> std::uint64_t(0x8000000000000000ULL),</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> std::uint64_t(0x8000000000000001ULL),</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> definition.signals.push_back(signal);</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database({definition});</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> &lt; 8U; ++byte) {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(bits &gt;&gt; shift));</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">const</span> std::int64_t signedExpected = bits &lt;= 0x7FFFFFFFFFFFFFFFULL</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> ? <span class="keyword">static_cast&lt;</span>std::int64_t<span class="keyword">&gt;</span>(bits)</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> : std::numeric_limits&lt;std::int64_t&gt;::min() +</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> static_cast&lt;std::int64_t&gt;(bits - 0x8000000000000000ULL);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &amp;decoded = result.signals.at(0U);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">const</span> RawSignalValue expected = type == ValueType::Unsigned</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> ? std::variant&lt;std::int64_t, std::uint64_t&gt;(bits)</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> : std::variant&lt;std::int64_t, std::uint64_t&gt;(signedExpected);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> ? <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(bits)</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> : static_cast&lt;double&gt;(signedExpected)) *</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> 0.5 +</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> 10.0;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> std::ostringstream actualText;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> std::ostringstream expectedText;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> std::int64_t *signedValue = std::get_if&lt;std::int64_t&gt;(&amp;decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>))</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> actualText &lt;&lt; *signedValue;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> actualText &lt;&lt; std::get&lt;std::uint64_t&gt;(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> expectedText &lt;&lt; bits;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> actualText &lt;&lt; std::get&lt;std::uint64_t&gt;(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a>);</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> expectedText &lt;&lt; bits;</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> expectedText &lt;&lt; signedExpected;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> QVERIFY(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> QVERIFY(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> == expected);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>, physical);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> QCOMPARE(actualText.str(), expectedText.str());</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span>}</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> DbcDecoderTest tests;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">return</span> QTest::qExec(&amp;tests, argc, argv);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span>}</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor">#include &quot;dbc_decoder_test.moc&quot;</span></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00072">dbc_decoder.h:72</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> expectedText &lt;&lt; signedExpected;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> QVERIFY(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>);</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> QVERIFY(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">rawValue</a> == expected);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> QCOMPARE(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>, physical);</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> QCOMPARE(actualText.str(), expectedText.str());</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> }</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span>}</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> DbcDecoderTest tests;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> QTest::qExec(&amp;tests, argc, argv);</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span>}</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#include &quot;dbc_decoder_test.moc&quot;</span></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00025">decode_database.h:25</a></div></div>
<div class="ttc" id="adecode__database_8h_html_ad9971b6ef33e02ba2c75d19c1d2518a1"><div class="ttname"><a href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a></div><div class="ttdeci">ValueType</div><div class="ttdoc">Signal numeric type.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00033">decode_database.h:33</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00027">decode_database.h:27</a></div></div>
<div class="ttc" id="adecode__database_8h_html_ad9971b6ef33e02ba2c75d19c1d2518a1"><div class="ttname"><a href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a></div><div class="ttdeci">ValueType</div><div class="ttdoc">Signal numeric type.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00035">decode_database.h:35</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a503c90b4b1a610b8252c45e466367c28"><div class="ttname"><a href="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28">DecodedSignalValue::rawValue</a></div><div class="ttdeci">RawSignalValue rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a828b5ef7faefc14fbf5dbd46249bcad2"><div class="ttname"><a href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeSignal &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00048">dbc_decoder.h:48</a></div></div>
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector&lt; std::uint8_t &gt; data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
@@ -0,0 +1,387 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: dbc_lifetime_test.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('dbc__lifetime__test_8cpp_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">dbc_lifetime_test.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Copyright (c) 2026 Dim Himro</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &quot;<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>&quot;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;QTemporaryFile&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;QtTest&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">static_assert</span>(std::is_same_v&lt;decltype(std::declval&lt;const DecodeDatabase &amp;&gt;().GetFrames()),</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">const</span> std::vector&lt;DecodeFrame&gt; &amp;&gt;);</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="keyword">static_assert</span>(std::is_same_v&lt;<span class="keyword">decltype</span>(<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a>), std::shared_ptr&lt;const DecodeFrame&gt;&gt;);</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">static_assert</span>(std::is_same_v&lt;<span class="keyword">decltype</span>(<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a>), std::shared_ptr&lt;const DecodeSignal&gt;&gt;);</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span>{</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> BuildText(<span class="keyword">const</span> std::string &amp;text) {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> QTemporaryFile file;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">if</span> (!file.open() ||</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> file.write(text.data(), <span class="keyword">static_cast&lt;</span>qint64<span class="keyword">&gt;</span>(text.size())) != <span class="keyword">static_cast&lt;</span>qint64<span class="keyword">&gt;</span>(text.size()) ||</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> !file.flush())</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Cannot write reload fixture&quot;</span>);</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(<a class="code hl_class" href="classDbcParser.html">DbcParser</a>().ParseFile(file.fileName().toStdString()));</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> }</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">const</span> std::string firstDbc =</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="stringliteral">&quot;BO_ 17 OldFrame: 2 ECU\n&quot;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (2,1) [1|511] \&quot;old\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="stringliteral">&quot;SG_ Removed : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="stringliteral">&quot;VAL_ 17 State 1 \&quot;Old label\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="stringliteral">&quot;BO_ 18 Deleted: 1 ECU\n&quot;</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> std::string secondDbc =</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="stringliteral">&quot;BO_ 2147483665 Extended: 1 ECU\n&quot;</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="stringliteral">&quot;BO_ 17 NewFrame: 2 ECU\n&quot;</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="stringliteral">&quot;SG_ Renamed : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (4,0) [0|1020] \&quot;new\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="stringliteral">&quot;VAL_ 17 State 1 \&quot;New label\&quot;;\n&quot;</span>;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>}<span class="comment">// namespace</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">class </span>DbcLifetimeTest : <span class="keyword">public</span> QObject {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> Q_OBJECT</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keyword">private</span> Q_SLOTS:</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> reload();</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> independentSignalLifetime();</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> lookupLifetime();</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> keys();</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> duplicateKeys();</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">void</span> failedReload();</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> invalidResults();</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> retainedMultiplexStatuses();</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>};</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keywordtype">void</span> DbcLifetimeTest::reload() {</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database = BuildText(firstDbc);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 17U;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = {1U, 42U};</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> oldResult = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, raw);</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> copied = oldResult;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> moved = std::move(oldResult);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> std::weak_ptr&lt;const DecodeFrame&gt; oldDefinition = moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> database = BuildText(secondDbc);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> current = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, raw);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> QVERIFY(current.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &amp;&amp; moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &amp;&amp; copied.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>);</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> QVERIFY(current.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a> != moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> QVERIFY(current.<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a> == moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a>);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> QVERIFY(current.signals[1].<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a> == moved.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a>);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> QCOMPARE(moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;name, std::string(<span class="stringliteral">&quot;OldFrame&quot;</span>));</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> QCOMPARE(copied.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>, moved.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>);</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> QCOMPARE(moved.signals[0].physicalValue, 3.0);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> QCOMPARE(current.signals[1].physicalValue, 4.0);</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> QCOMPARE(moved.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;unit, std::string(<span class="stringliteral">&quot;old&quot;</span>));</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> QCOMPARE(current.signals[1].<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;unit, std::string(<span class="stringliteral">&quot;new&quot;</span>));</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> QCOMPARE(*moved.signals[0].GetValueDescription(), std::string(<span class="stringliteral">&quot;Old label&quot;</span>));</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> QCOMPARE(*current.signals[1].GetValueDescription(), std::string(<span class="stringliteral">&quot;New label&quot;</span>));</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> QCOMPARE(moved.signals[1].<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;name, std::string(<span class="stringliteral">&quot;Removed&quot;</span>));</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> QVERIFY(!database.FindSignal(moved.signals[1].<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a>));</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> database = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>();</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> QVERIFY(!oldDefinition.expired());</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> QCOMPARE(current.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;name, std::string(<span class="stringliteral">&quot;NewFrame&quot;</span>));</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> QCOMPARE(*current.signals[1].GetValueDescription(), std::string(<span class="stringliteral">&quot;New label&quot;</span>));</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>}</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keywordtype">void</span> DbcLifetimeTest::independentSignalLifetime() {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> saved;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> std::weak_ptr&lt;const DecodeSignal&gt; definition;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">const</span> std::string *label = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database = BuildText(firstDbc);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 17U;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = {1U, 0U};</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, raw);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> saved = result.signals[0];</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> definition = saved.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> label = saved.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>();</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> result = <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a>();</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> database = BuildText(secondDbc);</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> QVERIFY(!definition.expired());</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> QVERIFY(label != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> QCOMPARE(*label, std::string(<span class="stringliteral">&quot;Old label&quot;</span>));</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> QCOMPARE(saved.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>-&gt;factor, 2.0);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> copied = saved;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> moved = std::move(saved);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> QCOMPARE(moved.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>, copied.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> saved = <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>();</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> moved = <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>();</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> QVERIFY(!definition.expired());</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> copied = <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>();</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> QVERIFY(definition.expired());</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span>}</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keywordtype">void</span> DbcLifetimeTest::lookupLifetime() {</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> std::shared_ptr&lt;const DecodeFrame&gt; frame;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> std::shared_ptr&lt;const DecodeSignal&gt; signal;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> std::weak_ptr&lt;const DecodeFrame&gt; released;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database = BuildText(firstDbc);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> copy = database;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> frame = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">FindFrame</a>(database, 17U, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> signal = copy.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>));</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> QVERIFY(frame &amp;&amp; signal);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> QCOMPARE(frame.get(), &amp;copy.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0]);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> QCOMPARE(signal.get(), &amp;frame-&gt;signals[0]);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> released = frame;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> database = BuildText(secondDbc);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> moved = std::move(copy);</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> QVERIFY(copy.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>().empty());</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> QVERIFY(!copy.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>)));</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> QCOMPARE(moved.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>)), frame);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> QCOMPARE(frame-&gt;name, std::string(<span class="stringliteral">&quot;OldFrame&quot;</span>));</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> frame.reset();</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> QVERIFY(!released.expired());</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> QCOMPARE(signal-&gt;name, std::string(<span class="stringliteral">&quot;State&quot;</span>));</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> signal.reset();</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> QVERIFY(released.expired());</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>}</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="keywordtype">void</span> DbcLifetimeTest::keys() {</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> frame(17U, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> state(frame, <span class="stringliteral">&quot;State&quot;</span>);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> first = BuildText(firstDbc);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> second = BuildText(secondDbc);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> QVERIFY(first.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(frame)-&gt;GetKey() == second.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(frame)-&gt;GetKey());</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> QVERIFY(first.FindSignal(state) &amp;&amp; second.FindSignal(state));</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> QVERIFY(!second.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(18U, <span class="keyword">false</span>)));</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> QVERIFY(!second.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(frame, <span class="stringliteral">&quot;Removed&quot;</span>)));</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> QVERIFY(second.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(frame, <span class="stringliteral">&quot;Renamed&quot;</span>)));</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> QVERIFY(second.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">true</span>), <span class="stringliteral">&quot;State&quot;</span>)));</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> QVERIFY(!second.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(999U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>)));</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> QVERIFY(first.FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(18U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>)));</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> std::unordered_map&lt;FrameKey, int, FrameKeyHasher&gt; frames;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> frames.emplace(frame, 1);</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> frames.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">true</span>), 2);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> QCOMPARE(frames.size(), std::size_t(2U));</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> std::unordered_map&lt;SignalKey, int, SignalKeyHasher&gt; signals;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> signals.emplace(state, 1);</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> signals.emplace(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">true</span>), <span class="stringliteral">&quot;State&quot;</span>), 2);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> signals.emplace(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(frame, <span class="stringliteral">&quot;Renamed&quot;</span>), 3);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> signals.emplace(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(18U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>), 4);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> QCOMPARE(signals.at(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>)), 1);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> QCOMPARE(signals.size(), std::size_t(4U));</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span>}</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="keywordtype">void</span> DbcLifetimeTest::duplicateKeys() {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> frame;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> frame.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 17U;</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> QVERIFY_THROWS_EXCEPTION(std::invalid_argument, (<span class="keywordtype">void</span>) <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>({frame, frame}));</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = <span class="stringliteral">&quot;State&quot;</span>;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> frame.signals = {signal, signal};</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> QVERIFY_THROWS_EXCEPTION(std::invalid_argument, (<span class="keywordtype">void</span>) <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>({frame}));</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed;</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> source;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> source.<a class="code hl_variable" href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">canId</a> = 17U;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a> = {source, source};</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> QVERIFY_THROWS_EXCEPTION(std::invalid_argument, (<span class="keywordtype">void</span>) <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().Build(parsed));</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>}</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="keywordtype">void</span> DbcLifetimeTest::failedReload() {</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database = BuildText(firstDbc);</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">const</span> std::shared_ptr&lt;const DecodeFrame&gt; original = database.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>));</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> QVERIFY_THROWS_EXCEPTION(std::runtime_error, database = BuildText(<span class="stringliteral">&quot;BO_ invalid\n&quot;</span>));</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> QCOMPARE(database.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>)), original);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> database = BuildText(<span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> QVERIFY(database.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>().empty());</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> QVERIFY(!database.<a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>)));</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> QCOMPARE(original-&gt;name, std::string(<span class="stringliteral">&quot;OldFrame&quot;</span>));</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>}</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="keywordtype">void</span> DbcLifetimeTest::invalidResults() {</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 17U;</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(BuildText(firstDbc), raw);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> QVERIFY(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>);</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> QVERIFY(!result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>);</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> QCOMPARE(result.signals[0].status, SignalDecodeStatus::InsufficientPayload);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> QVERIFY(!result.signals[0].GetValueDescription());</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> QCOMPARE(result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;name, std::string(<span class="stringliteral">&quot;State&quot;</span>));</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(<a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(), raw);</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> QVERIFY(!result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &amp;&amp; !result.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a> &amp;&amp; result.signals.empty());</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> QVERIFY(result.<a class="code hl_variable" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">key</a> == <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>));</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> QVERIFY(!<a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>().GetValueDescription());</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> QVERIFY(!<a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>().FindSignal(<a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>)));</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span>}</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="keywordtype">void</span> DbcLifetimeTest::retainedMultiplexStatuses() {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">const</span> std::string text =</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="stringliteral">&quot;BO_ 17 Frame: 2 ECU\n&quot;</span></div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="stringliteral">&quot;SG_ Mode M : 0|1@1+ (1,0) [0|1] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="stringliteral">&quot;SG_ State m1 : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;std::uint8_t&gt;&gt; payloads = {{0U}, {}, {1U}};</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> SignalDecodeStatus statuses[] = {SignalDecodeStatus::Inactive,</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> SignalDecodeStatus::SelectorUnavailable,</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> SignalDecodeStatus::InsufficientPayload};</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index &lt; payloads.size(); ++index) {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> database = BuildText(text);</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 17U;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = payloads[index];</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> saved = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, raw).signals[1];</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> database = BuildText(secondDbc);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> QCOMPARE(saved.status, statuses[index]);</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> QVERIFY(!saved.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> &amp;&amp; !saved.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>());</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> QCOMPARE(saved.<a class="code hl_variable" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">definition</a>-&gt;multiplexing.role, MultiplexRole::Branch);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> QVERIFY(saved.<a class="code hl_variable" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">key</a> == <a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(17U, <span class="keyword">false</span>), <span class="stringliteral">&quot;State&quot;</span>));</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> }</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span>}</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="keywordtype">int</span> RunLifetimeTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> DbcLifetimeTest test;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> QTest::qExec(&amp;test, argc, argv);</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span>}</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="preprocessor">#include &quot;dbc_lifetime_test.moc&quot;</span></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a4005c4311f57b7faf21c0cb31463039c"><div class="ttname"><a href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00015">dbc_decoder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_a780d6e747a48b10a5eb0ab85448d2970"><div class="ttname"><a href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const FrameKey &amp;key) const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00033">decode_database.cpp:33</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector&lt; FrameInfo &gt; frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a32143efe2023a1ecd977a9ae93e50b73"><div class="ttname"><a href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue::key</a></div><div class="ttdeci">FrameKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a33df0fcd92b23b3e08539906fc6b4c4a"><div class="ttname"><a href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue::key</a></div><div class="ttdeci">SignalKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a828b5ef7faefc14fbf5dbd46249bcad2"><div class="ttname"><a href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeSignal &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00044">dbc_decoder.h:44</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00048">dbc_decoder.h:48</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_affc38af1bf31bcb6f2c33044bce92bd2"><div class="ttname"><a href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">DecodedSignalValue::GetValueDescription</a></div><div class="ttdeci">const std::string * GetValueDescription() const</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector&lt; std::uint8_t &gt; data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">tests</a></li><li class="navelem"><b>dbc_lifetime_test.cpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+314 -311
View File
@@ -359,7 +359,7 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> QCOMPARE(warning.lineNumber, std::size_t(5U));</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keyword">const</span> std::string keyword = statement.substr(0U, statement.find(<span class="charliteral">&#39; &#39;</span>));</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> CHECK(warning.message.find(<span class="stringliteral">&quot;&#39;&quot;</span> + keyword + <span class="stringliteral">&quot;&#39;&quot;</span>) != std::string::npos, statement);</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(result.database);</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(result.database);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 1U;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = {1U};</div>
@@ -370,7 +370,7 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> CHECK(decoded.signals[0].GetValueDescription() &amp;&amp;</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> *decoded.signals[0].GetValueDescription() == <span class="stringliteral">&quot;On&quot;</span>,</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="stringliteral">&quot;Warnings preserve VAL_ descriptions&quot;</span>);</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> QCOMPARE(runtime.frames[0].signals[0].comment, std::string(<span class="stringliteral">&quot;Signal comment&quot;</span>));</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> QCOMPARE(runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].comment, std::string(<span class="stringliteral">&quot;Signal comment&quot;</span>));</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> }</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span>}</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
@@ -576,17 +576,17 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> QCOMPARE(parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[0].comment, std::string(<span class="stringliteral">&quot;Standard state&quot;</span>));</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> QCOMPARE(parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[1].signals[0].comment, std::string(<span class="stringliteral">&quot;Extended state&quot;</span>));</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> QCOMPARE(parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[2].signals.size(), std::size_t(2U));</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 1U;</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = {7U};</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> standard = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> QVERIFY(standard.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>);</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> QCOMPARE(standard.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>-&gt;<a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a>, std::string(<span class="stringliteral">&quot;Standard&quot;</span>));</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> QCOMPARE(standard.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;comment, std::string(<span class="stringliteral">&quot;Standard&quot;</span>));</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> extended = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> QVERIFY(extended.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>);</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> QCOMPARE(extended.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>-&gt;<a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a>, std::string(<span class="stringliteral">&quot;Extended&quot;</span>));</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> QCOMPARE(extended.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;comment, std::string(<span class="stringliteral">&quot;Extended&quot;</span>));</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span>}</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> </div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span><span class="keywordtype">void</span> DbcParserTest::integration() {</div>
@@ -620,7 +620,7 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 3 ECU\n&quot;</span> + first + second + common + selector +</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="stringliteral">&quot;VAL_ 1 First -1 \&quot;Negative\&quot;;\n&quot;</span>);</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> CHECK(parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[3].multiplexing.role == MultiplexRole::Selector,</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="stringliteral">&quot;Selector declared after branches&quot;</span>);</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">const</span> std::unique_ptr&lt;TreeNode&gt; tree = <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a>().<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(parsed);</div>
@@ -687,8 +687,8 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="stringliteral">&quot;SG_ Branch m18446744073709551615 : 64|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="stringliteral">&quot;SG_ Mode M : 7|64@0+ (0,5) [0|1] \&quot;\&quot; ECU\n&quot;</span>);</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> CHECK(runtime.frames[0].signals[0].multiplexing.value == std::numeric_limits&lt;std::uint64_t&gt;::max(),</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> CHECK(runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].multiplexing.value == std::numeric_limits&lt;std::uint64_t&gt;::max(),</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="stringliteral">&quot;Exact uint64 branch metadata&quot;</span>);</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> raw;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> raw.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 1U;</div>
@@ -701,302 +701,305 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> CHECK(result.signals[0].status == SignalDecodeStatus::Inactive,</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="stringliteral">&quot;Adjacent large integers remain distinct&quot;</span>);</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> runtime.frames[0].signals[1].length = 0U;</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> CHECK(result.signals[0].status == SignalDecodeStatus::InvalidDefinition &amp;&amp;</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> result.signals[1].status == SignalDecodeStatus::InvalidDefinition,</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="stringliteral">&quot;Malformed runtime selector distinguished from payload errors&quot;</span>);</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> runtime.frames[0].signals.pop_back();</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> CHECK(result.signals[0].status == SignalDecodeStatus::InvalidDefinition,</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="stringliteral">&quot;Missing runtime selector&quot;</span>);</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 2 ECU\n\n&quot;</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="stringliteral">&quot;SG_ Branch m2 : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="stringliteral">&quot;SG_ Mode M : 0|1@1+ (1,0) [0|1] \&quot;\&quot; ECU\n&quot;</span>);</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">bool</span> rejected = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> rejected = std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:3: &quot;</span>) == 0U;</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> }</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> CHECK(rejected, <span class="stringliteral">&quot;Deferred validation reports branch source line&quot;</span>);</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 2 ECU\n&quot;</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <span class="stringliteral">&quot;SG_ A : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <span class="stringliteral">&quot;SG_ B : 15|8@0+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>);</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> rejected = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;) {</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> rejected = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> }</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> CHECK(rejected, <span class="stringliteral">&quot;Ordinary overlapping signals rejected&quot;</span>);</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span>}</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> </div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> Fixture fixture;</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>);</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">&quot;-1&quot;</span>, <span class="stringliteral">&quot;+1&quot;</span>, <span class="stringliteral">&quot;0junk&quot;</span>, <span class="stringliteral">&quot;0x10&quot;</span>, <span class="stringliteral">&quot;1.5&quot;</span>,</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="stringliteral">&quot;4294967296&quot;</span>, <span class="stringliteral">&quot;999999999999999999999&quot;</span>}) {</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, value, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> }</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;65&quot;</span>})</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, length, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">&quot;2+&quot;</span>, <span class="stringliteral">&quot;9-&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1x&quot;</span>, <span class="stringliteral">&quot;1++&quot;</span>, <span class="stringliteral">&quot;01+&quot;</span>})</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, order, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">&quot;1junk&quot;</span>, <span class="stringliteral">&quot;nan&quot;</span>, <span class="stringliteral">&quot;NaN&quot;</span>, <span class="stringliteral">&quot;inf&quot;</span>, <span class="stringliteral">&quot;-inf&quot;</span>, <span class="stringliteral">&quot;1e999&quot;</span>, <span class="stringliteral">&quot;1e-999&quot;</span>, <span class="stringliteral">&quot;0x1p2&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;1e&quot;</span>, <span class="stringliteral">&quot;1.2.3&quot;</span>}) {</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, value, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, value, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, value, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, value));</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> }</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;Two Names&quot;</span>, <span class="stringliteral">&quot;Value m1M&quot;</span>}) {</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> std::string line = ordinary;</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> line.replace(4U, 5U, name);</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> RejectSignal(fixture, line);</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> }</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="stringliteral">&quot;SG_&quot;</span>, <span class="stringliteral">&quot;SG_ Value&quot;</span>, <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] ECU&quot;</span>,</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot;&quot;</span>,</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU,&quot;</span>,</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU extra&quot;</span>})</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> RejectSignal(fixture, broken);</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;63&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;3&quot;</span>));</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;56&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;3&quot;</span>));</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;4294967295&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> RejectSignal(fixture, ordinary, 0U);</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">&#39;|&#39;</span>, <span class="charliteral">&#39;@&#39;</span>, <span class="charliteral">&#39;(&#39;</span>, <span class="charliteral">&#39;)&#39;</span>, <span class="charliteral">&#39;[&#39;</span>, <span class="charliteral">&#39;]&#39;</span>, <span class="charliteral">&#39;&quot;&#39;</span>}) {</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> std::string line = ordinary;</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> line.erase(line.find(delimiter), 1U);</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> RejectSignal(fixture, line);</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> }</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span>}</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> </div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> Fixture fixture;</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\n&quot;</span> +</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span> +</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> SignalLine(<span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1-&quot;</span>, <span class="stringliteral">&quot;-1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;-255&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;Negative&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> CHECK(factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals.size() == 2U &amp;&amp;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[0].factor == 0.0 &amp;&amp;</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[1].factor == -1.0,</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="stringliteral">&quot;Zero and negative factors and equal range boundaries&quot;</span>);</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> </div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keyword">struct </span>SignalCase {</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keywordtype">unsigned</span> payload;</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> };</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 1U},</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> {<span class="stringliteral">&quot;7&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0-&quot;</span>, 1U},</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 8U},</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> {<span class="stringliteral">&quot;7&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;0-&quot;</span>, 8U},</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> {<span class="stringliteral">&quot;63&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 8U},</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> {<span class="stringliteral">&quot;56&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, 8U},</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> {<span class="stringliteral">&quot;3&quot;</span>, <span class="stringliteral">&quot;12&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, 2U},</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> {<span class="stringliteral">&quot;2039&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 255U}};</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> SignalCase &amp;test: validSignals) {</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: &quot;</span> + std::to_string(test.payload) + <span class="stringliteral">&quot; ECU\n&quot;</span> +</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">&quot;.5e+1&quot;</span>, <span class="stringliteral">&quot;-2.5E-1&quot;</span>, <span class="stringliteral">&quot;-1.&quot;</span>, <span class="stringliteral">&quot;+2e2&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a>, <span class="keyword">static_cast&lt;</span>std::uint32_t<span class="keyword">&gt;</span>(std::stoul(test.start)));</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a>, <span class="keyword">static_cast&lt;</span>std::uint32_t<span class="keyword">&gt;</span>(std::stoul(test.length)));</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">isLittleEndian</a>, test.order[0] == <span class="charliteral">&#39;1&#39;</span>);</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">isSigned</a>, test.order[1] == <span class="charliteral">&#39;-&#39;</span>);</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">factor</a>, 5.0);</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">offset</a>, -0.25);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">minimum</a>, -1.0);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">maximum</a>, 200.0);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &amp;error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> }</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <span class="stringliteral">&quot;SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \&quot;rpm\&quot; ECU1,\tECU2\n&quot;</span>);</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> CHECK(signal.<a class="code hl_variable" href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">name</a> == <span class="stringliteral">&quot;Value&quot;</span> &amp;&amp; signal.<a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a> == <span class="stringliteral">&quot;rpm&quot;</span> &amp;&amp;</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">receivers</a> == std::vector&lt;std::string&gt;({<span class="stringliteral">&quot;ECU1&quot;</span>, <span class="stringliteral">&quot;ECU2&quot;</span>}),</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="stringliteral">&quot;Signal tabs, spaces, and receiver list&quot;</span>);</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &amp;error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span>}</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> </div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> CountingHandler::instances = 0;</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> CountingHandler::calls = 0;</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> dispatcher.RegisterType&lt;CountingHandler&gt;(<span class="stringliteral">&quot;TEST_&quot;</span>);</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_ first&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_ second&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> CountingHandler::instances == 1 &amp;&amp; CountingHandler::calls == 2 &amp;&amp;</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="stringliteral">&quot;Factory dispatch and handler reuse&quot;</span>);</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_OTHER data&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;BO_TX_BU_ 1 : ECU;&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;VAL_TABLE_ States 0 \&quot;Stopped\&quot;;&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> CountingHandler::calls == 2,</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="stringliteral">&quot;Exact and unknown keyword dispatch&quot;</span>);</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span>}</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> Fixture fixture;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 First: 8 ECU\n&quot;</span>);</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">&quot;First parse&quot;</span>);</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> fixture.Write(<span class="stringliteral">&quot;SG_ Speed : invalid\n&quot;</span>);</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">&quot;Independent parse context&quot;</span>);</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> CHECK(std::string(error.what()).find(<span class="stringliteral">&quot;Signal found before any frame&quot;</span>) !=</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> std::string::npos,</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="stringliteral">&quot;Independent parse context&quot;</span>);</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> }</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> fixture.Write(<span class="stringliteral">&quot;BO_ 2 Second: 8 ECU\n&quot;</span>);</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> CHECK(recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U &amp;&amp; recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].canId == 2U,</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="stringliteral">&quot;Fresh parse after error&quot;</span>);</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span>}</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> </div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> </div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span><span class="keywordtype">void</span> DbcParserTest::valueDescriptions() {</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> Fixture fixture;</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> fixture.Write(</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="stringliteral">&quot;VAL_\t256\tState\t0\t\&quot;Off\&quot;\t1 \&quot;On\&quot; 2 \&quot;Error with spaces; and \\\&quot;quotes\\\&quot;\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="stringliteral">&quot;BO_ 256 Status: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (2,10) [0|520] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="stringliteral">&quot;VAL_ 256 State 3 \&quot;\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="stringliteral">&quot;VAL_ 2147483904 State -9223372036854775808 \&quot;Minimum\&quot; -1 \&quot;Negative\&quot; 9223372036854775807 \&quot;Maximum\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="stringliteral">&quot;BO_ 2147483904 Extended: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="stringliteral">&quot;SG_ State : 0|64@1- (1,0) [-1e20|1e20] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="stringliteral">&quot;BO_ 2048 Unsigned: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="stringliteral">&quot;SG_ State : 0|64@1+ (1,0) [0|2e20] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="stringliteral">&quot;VAL_ 2147485696 State 9223372036854775808 \&quot;High\&quot; 18446744073709551615 \&quot;Full\&quot;;\n&quot;</span>);</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="keyword">const</span> std::unique_ptr&lt;TreeNode&gt; tree = <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a>().<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(parsed);</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> CHECK(tree-&gt;GetChild(0)-&gt;GetSignal() == <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Frame node&quot;</span>);</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">for</span> (std::size_t index = 0; index &lt; parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size(); ++index) {</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> CHECK(tree-&gt;GetChild(index)-&gt;GetChild(0)-&gt;GetSignal()-&gt;valueDescriptions ==</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions &amp;&amp;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> runtime.frames[index].signals[0].valueDescriptions ==</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions,</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="stringliteral">&quot;All mappings survive both builders&quot;</span>);</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> }</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> CHECK(tree-&gt;GetChild(0)-&gt;GetChild(0)-&gt;GetSignal()-&gt;valueDescriptions ==</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> runtime.frames[0].signals[0].valueDescriptions,</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="stringliteral">&quot;Both builders preserve descriptions&quot;</span>);</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 256;</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8);</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keyword">const</span> std::string expected[] = {<span class="stringliteral">&quot;Off&quot;</span>, <span class="stringliteral">&quot;On&quot;</span>, <span class="stringliteral">&quot;Error with spaces; and \&quot;quotes\&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>};</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> value = 0; value &lt; 5; ++value) {</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[0] = value;</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> CHECK(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> &amp;&amp; decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> == value * 2 + 10, <span class="stringliteral">&quot;Numeric scaling unchanged&quot;</span>);</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keyword">const</span> std::string *description = decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>();</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> CHECK(value &lt; 4 ? description &amp;&amp; *description == expected[value] : !description,</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="stringliteral">&quot;Raw lookup and unknown value&quot;</span>);</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> }</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keyword">struct </span>Boundary {</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> std::uint64_t bits;</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *description;</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> };</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &amp;test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">&quot;Minimum&quot;</span>},</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Negative&quot;</span>},</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> Boundary{0x7FFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Maximum&quot;</span>}}) {</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> &lt; 8; ++byte)</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(test.bits &gt;&gt; (<span class="keywordtype">byte</span> * 8));</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() &amp;&amp; *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <span class="stringliteral">&quot;Signed boundaries and distinct extended frame&quot;</span>);</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> }</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 2048;</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &amp;test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">&quot;High&quot;</span>},</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Full&quot;</span>}}) {</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> &lt; 8; ++byte)</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(test.bits &gt;&gt; (<span class="keywordtype">byte</span> * 8));</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() &amp;&amp; *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <span class="stringliteral">&quot;Unsigned boundaries&quot;</span>);</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> }</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> CHECK(FindValueDescription(runtime.frames[0].signals[0].valueDescriptions, std::int64_t(1)) != <span class="keyword">nullptr</span>,</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> <span class="stringliteral">&quot;Nonnegative signed lookup matches unsigned key&quot;</span>);</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.clear();</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> CHECK(!<a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().Decode(runtime, frame).signals[0].GetValueDescription(), <span class="stringliteral">&quot;Invalid decode has no description&quot;</span>);</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span>}</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> </div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span><span class="keywordtype">void</span> DbcParserTest::invalidValueDescriptions() {</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> Fixture fixture;</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="keyword">const</span> std::string definitions = <span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\nSG_ State : 0|64@1+ (1,0) [0|2e20] \&quot;\&quot; ECU\n&quot;</span>;</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string statement: {</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="stringliteral">&quot;VAL_&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State ;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;&quot;</span>,</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;; junk&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 Off;&quot;</span>,</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Unclosed;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;1 \&quot;On\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot; 00 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot; -0 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;;\nVAL_ 1 State 0 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="stringliteral">&quot;VAL_ 2 State 0 \&quot;Missing frame\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 Missing 0 \&quot;Missing signal\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="stringliteral">&quot;VAL_ -1 State 0 \&quot;Bad ID\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ 536870912 State 0 \&quot;Bad ID\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="stringliteral">&quot;VAL_ 4294967296 State 0 \&quot;Bad ID\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ Environment 0 \&quot;Unsupported\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Bad\\q escape\&quot;;&quot;</span>}) {</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> fixture.Write(definitions + statement + <span class="charliteral">&#39;\n&#39;</span>);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <span class="keyword">const</span> <span class="keywordtype">int</span> line = statement.find(<span class="charliteral">&#39;\n&#39;</span>) == std::string::npos ? 3 : 4;</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> CHECK(<span class="keyword">false</span>, statement);</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:&quot;</span> + std::to_string(line) + <span class="stringliteral">&quot;: &quot;</span>) == 0,</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> statement + <span class="stringliteral">&quot; &quot;</span> + error.what());</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> }</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> }</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string suffix: {</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <span class="stringliteral">&quot;BO_ 1 Other: 8 ECU\n&quot;</span>, <span class="comment">// Duplicate frame definition.</span></div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>,<span class="comment">// Duplicate signal definition.</span></div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="stringliteral">&quot;&quot;</span>}) {</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> fixture.Write(<span class="stringliteral">&quot;VAL_ 1 &quot;</span> + std::string(suffix.empty() ? <span class="stringliteral">&quot;Missing&quot;</span> : <span class="stringliteral">&quot;State&quot;</span>) +</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="stringliteral">&quot; 0 \&quot;Description\&quot;;\n&quot;</span> + definitions + suffix);</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">&quot;Missing reference or duplicate definition&quot;</span>);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="keyword">const</span> std::string line = suffix.empty() ? <span class="stringliteral">&quot;1&quot;</span> : <span class="stringliteral">&quot;4&quot;</span>;</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:&quot;</span> + line + <span class="stringliteral">&quot;: &quot;</span>) == 0,</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="stringliteral">&quot;Error retains the reference or duplicate definition source location&quot;</span>);</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> }</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> }</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string number: {<span class="stringliteral">&quot;+1&quot;</span>, <span class="stringliteral">&quot;1x&quot;</span>, <span class="stringliteral">&quot;0x10&quot;</span>, <span class="stringliteral">&quot;1.5&quot;</span>, <span class="stringliteral">&quot;1e2&quot;</span>, <span class="stringliteral">&quot;--1&quot;</span>,</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <span class="stringliteral">&quot;-9223372036854775809&quot;</span>, <span class="stringliteral">&quot;18446744073709551616&quot;</span>}) {</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> fixture.Write(<span class="stringliteral">&quot;VAL_ 1 State &quot;</span> + number + <span class="stringliteral">&quot; \&quot;Bad\&quot;;\n&quot;</span> + definitions);</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> CHECK(<span class="keyword">false</span>, number);</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:1: &quot;</span>) == 0, number);</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> }</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span>}</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> </div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> DbcParserTest tests;</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">return</span> QTest::qExec(&amp;tests, argc, argv);</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span>}</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span><span class="preprocessor">#include &quot;dbc_parser_test.moc&quot;</span></div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> std::vector&lt;DecodeFrame&gt; definitions = runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>();</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> definitions[0].signals[1].length = 0U;</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions);</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> CHECK(result.signals[0].status == SignalDecodeStatus::InvalidDefinition &amp;&amp;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> result.signals[1].status == SignalDecodeStatus::InvalidDefinition,</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="stringliteral">&quot;Malformed runtime selector distinguished from payload errors&quot;</span>);</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> definitions[0].signals.pop_back();</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> runtime = <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(definitions);</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, raw);</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> CHECK(result.signals[0].status == SignalDecodeStatus::InvalidDefinition,</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="stringliteral">&quot;Missing runtime selector&quot;</span>);</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 2 ECU\n\n&quot;</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="stringliteral">&quot;SG_ Branch m2 : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="stringliteral">&quot;SG_ Mode M : 0|1@1+ (1,0) [0|1] \&quot;\&quot; ECU\n&quot;</span>);</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">bool</span> rejected = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> rejected = std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:3: &quot;</span>) == 0U;</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> }</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> CHECK(rejected, <span class="stringliteral">&quot;Deferred validation reports branch source line&quot;</span>);</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 2 ECU\n&quot;</span></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="stringliteral">&quot;SG_ A : 8|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="stringliteral">&quot;SG_ B : 15|8@0+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>);</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> rejected = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;) {</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> rejected = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> CHECK(rejected, <span class="stringliteral">&quot;Ordinary overlapping signals rejected&quot;</span>);</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span>}</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> </div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> Fixture fixture;</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>);</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">&quot;-1&quot;</span>, <span class="stringliteral">&quot;+1&quot;</span>, <span class="stringliteral">&quot;0junk&quot;</span>, <span class="stringliteral">&quot;0x10&quot;</span>, <span class="stringliteral">&quot;1.5&quot;</span>,</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="stringliteral">&quot;4294967296&quot;</span>, <span class="stringliteral">&quot;999999999999999999999&quot;</span>}) {</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, value, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> }</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;65&quot;</span>})</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, length, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">&quot;2+&quot;</span>, <span class="stringliteral">&quot;9-&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1x&quot;</span>, <span class="stringliteral">&quot;1++&quot;</span>, <span class="stringliteral">&quot;01+&quot;</span>})</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, order, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">&quot;1junk&quot;</span>, <span class="stringliteral">&quot;nan&quot;</span>, <span class="stringliteral">&quot;NaN&quot;</span>, <span class="stringliteral">&quot;inf&quot;</span>, <span class="stringliteral">&quot;-inf&quot;</span>, <span class="stringliteral">&quot;1e999&quot;</span>, <span class="stringliteral">&quot;1e-999&quot;</span>, <span class="stringliteral">&quot;0x1p2&quot;</span>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;1e&quot;</span>, <span class="stringliteral">&quot;1.2.3&quot;</span>}) {</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, value, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, value, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, value, <span class="stringliteral">&quot;255&quot;</span>));</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, value));</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> }</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;Two Names&quot;</span>, <span class="stringliteral">&quot;Value m1M&quot;</span>}) {</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> std::string line = ordinary;</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> line.replace(4U, 5U, name);</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> RejectSignal(fixture, line);</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> }</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="stringliteral">&quot;SG_&quot;</span>, <span class="stringliteral">&quot;SG_ Value&quot;</span>, <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] ECU&quot;</span>,</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot;&quot;</span>,</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU,&quot;</span>,</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="stringliteral">&quot;SG_ Value : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU extra&quot;</span>})</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> RejectSignal(fixture, broken);</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;63&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;3&quot;</span>));</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;56&quot;</span>, <span class="stringliteral">&quot;2&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;3&quot;</span>));</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">&quot;4294967295&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>));</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> RejectSignal(fixture, ordinary, 0U);</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">&#39;|&#39;</span>, <span class="charliteral">&#39;@&#39;</span>, <span class="charliteral">&#39;(&#39;</span>, <span class="charliteral">&#39;)&#39;</span>, <span class="charliteral">&#39;[&#39;</span>, <span class="charliteral">&#39;]&#39;</span>, <span class="charliteral">&#39;&quot;&#39;</span>}) {</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> std::string line = ordinary;</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> line.erase(line.find(delimiter), 1U);</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> RejectSignal(fixture, line);</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> }</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span>}</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> Fixture fixture;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\n&quot;</span> +</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> SignalLine(<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span> +</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> SignalLine(<span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;8&quot;</span>, <span class="stringliteral">&quot;1-&quot;</span>, <span class="stringliteral">&quot;-1&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;-255&quot;</span>, <span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;Negative&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> CHECK(factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals.size() == 2U &amp;&amp;</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[0].factor == 0.0 &amp;&amp;</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> factors.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].signals[1].factor == -1.0,</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="stringliteral">&quot;Zero and negative factors and equal range boundaries&quot;</span>);</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> </div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keyword">struct </span>SignalCase {</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="keywordtype">unsigned</span> payload;</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> };</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 1U},</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> {<span class="stringliteral">&quot;7&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0-&quot;</span>, 1U},</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> {<span class="stringliteral">&quot;0&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 8U},</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> {<span class="stringliteral">&quot;7&quot;</span>, <span class="stringliteral">&quot;64&quot;</span>, <span class="stringliteral">&quot;0-&quot;</span>, 8U},</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> {<span class="stringliteral">&quot;63&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 8U},</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> {<span class="stringliteral">&quot;56&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, 8U},</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> {<span class="stringliteral">&quot;3&quot;</span>, <span class="stringliteral">&quot;12&quot;</span>, <span class="stringliteral">&quot;0+&quot;</span>, 2U},</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> {<span class="stringliteral">&quot;2039&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>, <span class="stringliteral">&quot;1+&quot;</span>, 255U}};</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> SignalCase &amp;test: validSignals) {</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: &quot;</span> + std::to_string(test.payload) + <span class="stringliteral">&quot; ECU\n&quot;</span> +</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">&quot;.5e+1&quot;</span>, <span class="stringliteral">&quot;-2.5E-1&quot;</span>, <span class="stringliteral">&quot;-1.&quot;</span>, <span class="stringliteral">&quot;+2e2&quot;</span>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a>, <span class="keyword">static_cast&lt;</span>std::uint32_t<span class="keyword">&gt;</span>(std::stoul(test.start)));</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a>, <span class="keyword">static_cast&lt;</span>std::uint32_t<span class="keyword">&gt;</span>(std::stoul(test.length)));</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">isLittleEndian</a>, test.order[0] == <span class="charliteral">&#39;1&#39;</span>);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">isSigned</a>, test.order[1] == <span class="charliteral">&#39;-&#39;</span>);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">factor</a>, 5.0);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">offset</a>, -0.25);</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">minimum</a>, -1.0);</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> QCOMPARE(signal.<a class="code hl_variable" href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">maximum</a>, 200.0);</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &amp;error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> }</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="stringliteral">&quot;SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \&quot;rpm\&quot; ECU1,\tECU2\n&quot;</span>);</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> &amp;signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> CHECK(signal.<a class="code hl_variable" href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">name</a> == <span class="stringliteral">&quot;Value&quot;</span> &amp;&amp; signal.<a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a> == <span class="stringliteral">&quot;rpm&quot;</span> &amp;&amp;</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">receivers</a> == std::vector&lt;std::string&gt;({<span class="stringliteral">&quot;ECU1&quot;</span>, <span class="stringliteral">&quot;ECU2&quot;</span>}),</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="stringliteral">&quot;Signal tabs, spaces, and receiver list&quot;</span>);</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &amp;error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span>}</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> </div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> CountingHandler::instances = 0;</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> CountingHandler::calls = 0;</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> dispatcher.RegisterType&lt;CountingHandler&gt;(<span class="stringliteral">&quot;TEST_&quot;</span>);</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_ first&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_ second&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> CountingHandler::instances == 1 &amp;&amp; CountingHandler::calls == 2 &amp;&amp;</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="stringliteral">&quot;Factory dispatch and handler reuse&quot;</span>);</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;TEST_OTHER data&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;BO_TX_BU_ 1 : ECU;&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">&quot;VAL_TABLE_ States 0 \&quot;Stopped\&quot;;&quot;</span>, context) &amp;&amp;</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> CountingHandler::calls == 2,</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="stringliteral">&quot;Exact and unknown keyword dispatch&quot;</span>);</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span>}</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> Fixture fixture;</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> fixture.Write(<span class="stringliteral">&quot;BO_ 1 First: 8 ECU\n&quot;</span>);</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">&quot;First parse&quot;</span>);</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> fixture.Write(<span class="stringliteral">&quot;SG_ Speed : invalid\n&quot;</span>);</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">&quot;Independent parse context&quot;</span>);</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> CHECK(std::string(error.what()).find(<span class="stringliteral">&quot;Signal found before any frame&quot;</span>) !=</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> std::string::npos,</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="stringliteral">&quot;Independent parse context&quot;</span>);</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> }</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> fixture.Write(<span class="stringliteral">&quot;BO_ 2 Second: 8 ECU\n&quot;</span>);</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> CHECK(recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U &amp;&amp; recovered.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[0].canId == 2U,</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="stringliteral">&quot;Fresh parse after error&quot;</span>);</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span>}</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> </div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> </div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span><span class="keywordtype">void</span> DbcParserTest::valueDescriptions() {</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> Fixture fixture;</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> fixture.Write(</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="stringliteral">&quot;VAL_\t256\tState\t0\t\&quot;Off\&quot;\t1 \&quot;On\&quot; 2 \&quot;Error with spaces; and \\\&quot;quotes\\\&quot;\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="stringliteral">&quot;BO_ 256 Status: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (2,10) [0|520] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="stringliteral">&quot;VAL_ 256 State 3 \&quot;\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="stringliteral">&quot;VAL_ 2147483904 State -9223372036854775808 \&quot;Minimum\&quot; -1 \&quot;Negative\&quot; 9223372036854775807 \&quot;Maximum\&quot;;\n&quot;</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="stringliteral">&quot;BO_ 2147483904 Extended: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="stringliteral">&quot;SG_ State : 0|64@1- (1,0) [-1e20|1e20] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="stringliteral">&quot;BO_ 2048 Unsigned: 8 ECU\n&quot;</span></div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="stringliteral">&quot;SG_ State : 0|64@1+ (1,0) [0|2e20] \&quot;\&quot; ECU\n&quot;</span></div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="stringliteral">&quot;VAL_ 2147485696 State 9223372036854775808 \&quot;High\&quot; 18446744073709551615 \&quot;Full\&quot;;\n&quot;</span>);</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> parsed = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keyword">const</span> std::unique_ptr&lt;TreeNode&gt; tree = <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a>().<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(parsed);</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> CHECK(tree-&gt;GetChild(0)-&gt;GetSignal() == <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Frame node&quot;</span>);</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">for</span> (std::size_t index = 0; index &lt; parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size(); ++index) {</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> CHECK(tree-&gt;GetChild(index)-&gt;GetChild(0)-&gt;GetSignal()-&gt;valueDescriptions ==</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions &amp;&amp;</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[index].signals[0].valueDescriptions ==</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].signals[0].valueDescriptions,</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="stringliteral">&quot;All mappings survive both builders&quot;</span>);</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> }</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> CHECK(tree-&gt;GetChild(0)-&gt;GetChild(0)-&gt;GetSignal()-&gt;valueDescriptions ==</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions,</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="stringliteral">&quot;Both builders preserve descriptions&quot;</span>);</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 256;</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8);</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">const</span> std::string expected[] = {<span class="stringliteral">&quot;Off&quot;</span>, <span class="stringliteral">&quot;On&quot;</span>, <span class="stringliteral">&quot;Error with spaces; and \&quot;quotes\&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>};</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> value = 0; value &lt; 5; ++value) {</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[0] = value;</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> CHECK(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> &amp;&amp; decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> == value * 2 + 10, <span class="stringliteral">&quot;Numeric scaling unchanged&quot;</span>);</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">const</span> std::string *description = decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>();</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> CHECK(value &lt; 4 ? description &amp;&amp; *description == expected[value] : !description,</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="stringliteral">&quot;Raw lookup and unknown value&quot;</span>);</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keyword">struct </span>Boundary {</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> std::uint64_t bits;</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *description;</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> };</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &amp;test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">&quot;Minimum&quot;</span>},</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Negative&quot;</span>},</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> Boundary{0x7FFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Maximum&quot;</span>}}) {</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> &lt; 8; ++byte)</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(test.bits &gt;&gt; (<span class="keywordtype">byte</span> * 8));</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() &amp;&amp; *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="stringliteral">&quot;Signed boundaries and distinct extended frame&quot;</span>);</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> }</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 2048;</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> Boundary &amp;test: {Boundary{0x8000000000000000ULL, <span class="stringliteral">&quot;High&quot;</span>},</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> Boundary{0xFFFFFFFFFFFFFFFFULL, <span class="stringliteral">&quot;Full&quot;</span>}}) {</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0; <span class="keywordtype">byte</span> &lt; 8; ++byte)</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>[<span class="keywordtype">byte</span>] = <span class="keyword">static_cast&lt;</span>std::uint8_t<span class="keyword">&gt;</span>(test.bits &gt;&gt; (<span class="keywordtype">byte</span> * 8));</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> decoded = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, frame).signals[0];</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> CHECK(decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() &amp;&amp; *decoded.<a class="code hl_function" href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">GetValueDescription</a>() == test.description,</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> <span class="stringliteral">&quot;Unsigned boundaries&quot;</span>);</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> }</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> CHECK(FindValueDescription(runtime.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].signals[0].valueDescriptions, std::int64_t(1)) != <span class="keyword">nullptr</span>,</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="stringliteral">&quot;Nonnegative signed lookup matches unsigned key&quot;</span>);</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.clear();</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> CHECK(!<a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().Decode(runtime, frame).signals[0].GetValueDescription(), <span class="stringliteral">&quot;Invalid decode has no description&quot;</span>);</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span>}</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span><span class="keywordtype">void</span> DbcParserTest::invalidValueDescriptions() {</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> Fixture fixture;</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keyword">const</span> std::string definitions = <span class="stringliteral">&quot;BO_ 1 Frame: 8 ECU\nSG_ State : 0|64@1+ (1,0) [0|2e20] \&quot;\&quot; ECU\n&quot;</span>;</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string statement: {</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="stringliteral">&quot;VAL_&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State ;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;&quot;</span>,</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;; junk&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 Off;&quot;</span>,</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Unclosed;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;1 \&quot;On\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot; 00 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot; -0 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Off\&quot;;\nVAL_ 1 State 0 \&quot;Duplicate\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="stringliteral">&quot;VAL_ 2 State 0 \&quot;Missing frame\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ 1 Missing 0 \&quot;Missing signal\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <span class="stringliteral">&quot;VAL_ -1 State 0 \&quot;Bad ID\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ 536870912 State 0 \&quot;Bad ID\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <span class="stringliteral">&quot;VAL_ 4294967296 State 0 \&quot;Bad ID\&quot;;&quot;</span>, <span class="stringliteral">&quot;VAL_ Environment 0 \&quot;Unsupported\&quot;;&quot;</span>,</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="stringliteral">&quot;VAL_ 1 State 0 \&quot;Bad\\q escape\&quot;;&quot;</span>}) {</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> fixture.Write(definitions + statement + <span class="charliteral">&#39;\n&#39;</span>);</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="keyword">const</span> <span class="keywordtype">int</span> line = statement.find(<span class="charliteral">&#39;\n&#39;</span>) == std::string::npos ? 3 : 4;</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> CHECK(<span class="keyword">false</span>, statement);</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:&quot;</span> + std::to_string(line) + <span class="stringliteral">&quot;: &quot;</span>) == 0,</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> statement + <span class="stringliteral">&quot; &quot;</span> + error.what());</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> }</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> }</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string suffix: {</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> <span class="stringliteral">&quot;BO_ 1 Other: 8 ECU\n&quot;</span>, <span class="comment">// Duplicate frame definition.</span></div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="stringliteral">&quot;SG_ State : 0|8@1+ (1,0) [0|255] \&quot;\&quot; ECU\n&quot;</span>,<span class="comment">// Duplicate signal definition.</span></div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="stringliteral">&quot;&quot;</span>}) {</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> fixture.Write(<span class="stringliteral">&quot;VAL_ 1 &quot;</span> + std::string(suffix.empty() ? <span class="stringliteral">&quot;Missing&quot;</span> : <span class="stringliteral">&quot;State&quot;</span>) +</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="stringliteral">&quot; 0 \&quot;Description\&quot;;\n&quot;</span> + definitions + suffix);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">&quot;Missing reference or duplicate definition&quot;</span>);</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">const</span> std::string line = suffix.empty() ? <span class="stringliteral">&quot;1&quot;</span> : <span class="stringliteral">&quot;4&quot;</span>;</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:&quot;</span> + line + <span class="stringliteral">&quot;: &quot;</span>) == 0,</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="stringliteral">&quot;Error retains the reference or duplicate definition source location&quot;</span>);</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> }</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> }</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string number: {<span class="stringliteral">&quot;+1&quot;</span>, <span class="stringliteral">&quot;1x&quot;</span>, <span class="stringliteral">&quot;0x10&quot;</span>, <span class="stringliteral">&quot;1.5&quot;</span>, <span class="stringliteral">&quot;1e2&quot;</span>, <span class="stringliteral">&quot;--1&quot;</span>,</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <span class="stringliteral">&quot;-9223372036854775809&quot;</span>, <span class="stringliteral">&quot;18446744073709551616&quot;</span>}) {</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> fixture.Write(<span class="stringliteral">&quot;VAL_ 1 State &quot;</span> + number + <span class="stringliteral">&quot; \&quot;Bad\&quot;;\n&quot;</span> + definitions);</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">try</span> {</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> CHECK(<span class="keyword">false</span>, number);</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &amp;error) {</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">&quot;:1: &quot;</span>) == 0, number);</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> }</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> }</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span>}</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> </div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> DbcParserTest tests;</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">return</span> QTest::qExec(&amp;tests, argc, argv);</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span>}</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> </div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span><span class="preprocessor">#include &quot;dbc_parser_test.moc&quot;</span></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00072">dbc_decoder.h:72</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
<div class="ttc" id="aclassDbcParser_html_a0e915ce79c2e3d4c95a5aaf2bf0409bc"><div class="ttname"><a href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">DbcParser::ParseFileWithDiagnostics</a></div><div class="ttdeci">DbcParseResult ParseFileWithDiagnostics(const std::string &amp;filePath) const</div><div class="ttdoc">Parse with warnings and a structured first error instead of throwing.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00044">dbc_parser.cpp:44</a></div></div>
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &amp;filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00031">dbc_parser.cpp:31</a></div></div>
@@ -1005,6 +1008,8 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="ttc" id="aclassDbcStatementHandler_html"><div class="ttname"><a href="classDbcStatementHandler.html">DbcStatementHandler</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00044">dbc_statement_handler.h:44</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr&lt; TreeNode &gt; Build(const DbcDatabase &amp;database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
@@ -1014,15 +1019,13 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
<div class="ttc" id="astructDbcDiagnostic_html"><div class="ttname"><a href="structDbcDiagnostic.html">DbcDiagnostic</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__diagnostic_8h_source.html#l00025">dbc_diagnostic.h:25</a></div></div>
<div class="ttc" id="astructDbcParseContext_html"><div class="ttname"><a href="structDbcParseContext.html">DbcParseContext</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00032">dbc_statement_handler.h:32</a></div></div>
<div class="ttc" id="astructDbcParseResult_html"><div class="ttname"><a href="structDbcParseResult.html">DbcParseResult</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__diagnostic_8h_source.html#l00033">dbc_diagnostic.h:33</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00071">decode_database.h:71</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00046">dbc_decoder.h:46</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_affc38af1bf31bcb6f2c33044bce92bd2"><div class="ttname"><a href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">DecodedSignalValue::GetValueDescription</a></div><div class="ttdeci">const std::string * GetValueDescription() const</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00047">dbc_decoder.h:47</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00048">dbc_decoder.h:48</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_affc38af1bf31bcb6f2c33044bce92bd2"><div class="ttname"><a href="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2">DecodedSignalValue::GetValueDescription</a></div><div class="ttdeci">const std::string * GetValueDescription() const</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
<div class="ttc" id="astructFrameInfo_html_a92749ec3798d4211a505860fb389a9e8"><div class="ttname"><a href="structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8">FrameInfo::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00031">frame_info.h:31</a></div></div>
@@ -632,7 +632,7 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8cpp_source.ht
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span>}</div>
<div class="ttc" id="aclassDbcDiagnosticError_html"><div class="ttname"><a href="classDbcDiagnosticError.html">DbcDiagnosticError</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00021">dbc_statement_handler.h:21</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00391">dbc_statement_handler.cpp:391</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00025">decode_database.h:25</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00027">decode_database.h:27</a></div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector&lt; FrameInfo &gt; frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
<div class="ttc" id="astructDbcParseContext_html"><div class="ttname"><a href="structDbcParseContext.html">DbcParseContext</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00032">dbc_statement_handler.h:32</a></div></div>
+1 -1
View File
@@ -254,7 +254,7 @@ $(document).ready(function(){initNavTree('dbc__tree__model_8cpp_source.html','')
<div class="ttc" id="aclassTreeNode_html_ad501f97eeec7f7d3353bfae838fbb6a8"><div class="ttname"><a href="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8">TreeNode::GetRow</a></div><div class="ttdeci">std::size_t GetRow() const</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00072">tree_node.cpp:72</a></div></div>
<div class="ttc" id="aclassTreeNode_html_afa2f4b0aafa12d3d41ed00df8e0250c9"><div class="ttname"><a href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">TreeNode::GetType</a></div><div class="ttdeci">NodeType GetType() const</div><div class="ttdoc">Get node type.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00052">tree_node.cpp:52</a></div></div>
<div class="ttc" id="aclassTreeNode_html_afc503b40004764163605d6dbdb4ef811"><div class="ttname"><a href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">TreeNode::GetFrame</a></div><div class="ttdeci">const FrameInfo * GetFrame() const</div><div class="ttdoc">Get frame payload if node is frame.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00060">tree_node.cpp:60</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00025">decode_database.h:25</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00027">decode_database.h:27</a></div></div>
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
+1 -1
View File
@@ -149,7 +149,7 @@ $(document).ready(function(){initNavTree('dbc__tree__model_8h_source.html','');
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassDbcTreeModel_html"><div class="ttname"><a href="classDbcTreeModel.html">DbcTreeModel</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__model_8h_source.html#l00011">dbc_tree_model.h:11</a></div></div>
<div class="ttc" id="aclassTreeNode_html"><div class="ttname"><a href="classTreeNode.html">TreeNode</a></div><div class="ttdoc">Tree node for later use in model/view or other hierarchy consumers.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8h_source.html#l00035">tree_node.h:35</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00025">decode_database.h:25</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00027">decode_database.h:27</a></div></div>
<div class="ttc" id="atree__node_8h_html"><div class="ttname"><a href="tree__node_8h.html">tree_node.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
+176
View File
@@ -0,0 +1,176 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: decode_database.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('decode__database_8cpp_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">decode_database.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Copyright (c) 2026 Dim Himro</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;<a class="code" href="decode__database_8h.html">decode_database.h</a>&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;unordered_set&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span>DecodeDatabase::Storage::Storage(std::vector&lt;DecodeFrame&gt; definitions)</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> : frames(std::move(definitions)) {</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> frameIndexByKey.reserve(frames.size());</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index &lt; frames.size(); ++index) {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> &amp;frame = frames[index];</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordflow">if</span> (!frameIndexByKey.emplace(frame.GetKey(), index).second)</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Duplicate runtime frame key&quot;</span>);</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::unordered_set&lt;std::string&gt; names;</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal: frame.signals) {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordflow">if</span> (!names.insert(signal.name).second)</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Duplicate runtime signal key&quot;</span>);</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> }</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> }</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span>}</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="}">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a"> 24</a></span>DecodeDatabase::DecodeDatabase(std::vector&lt;DecodeFrame&gt; frames)</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> : storage(std::make_shared&lt;const Storage&gt;(std::move(frames))) {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span>}</div>
</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="foldopen" id="foldopen00028" data-start="{" data-end="}">
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8"> 28</a></span><span class="keyword">const</span> std::vector&lt;DecodeFrame&gt; &amp;<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">static</span> <span class="keyword">const</span> std::vector&lt;DecodeFrame&gt; empty;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">return</span> storage ? storage-&gt;frames : empty;</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>}</div>
</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="}">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970"> 33</a></span>std::shared_ptr&lt;const DecodeFrame&gt; <a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;key)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span> (!storage)</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt;::const_iterator it =</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> storage-&gt;frameIndexByKey.find(key);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span> (it == storage-&gt;frameIndexByKey.end())</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> std::shared_ptr&lt;const DecodeFrame&gt;(storage, &amp;storage-&gt;frames[it-&gt;second]);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>}</div>
</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>std::shared_ptr&lt;const DecodeSignal&gt; DecodeDatabase::FindSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> &amp;key)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">const</span> std::shared_ptr&lt;const DecodeFrame&gt; frame = <a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(key.frame);</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span> (!frame)</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &amp;signal: frame-&gt;signals) {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">if</span> (signal.name == key.name)</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> std::shared_ptr&lt;const DecodeSignal&gt;(frame, &amp;signal);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>}</div>
<div class="ttc" id="aclassDecodeDatabase_html_a780d6e747a48b10a5eb0ab85448d2970"><div class="ttname"><a href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const FrameKey &amp;key) const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00033">decode_database.cpp:33</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>decode_database.cpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
+7 -11
View File
@@ -99,9 +99,11 @@ $(document).ready(function(){initNavTree('decode__database_8h.html',''); initRes
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;value_descriptions.h&quot;</code><br />
<div class="textblock"><code>#include &quot;definition_key.h&quot;</code><br />
<code>#include &quot;multiplexing.h&quot;</code><br />
<code>#include &quot;value_descriptions.h&quot;</code><br />
<code>#include &lt;cstdint&gt;</code><br />
<code>#include &lt;memory&gt;</code><br />
<code>#include &lt;string&gt;</code><br />
<code>#include &lt;unordered_map&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
@@ -116,14 +118,8 @@ Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDecodeFrame.html">DecodeFrame</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runtime-ready frame definition. <a href="structDecodeFrame.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFrameKey.html">FrameKey</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key for fast frame lookup. <a href="structFrameKey.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFrameKeyHasher.html">FrameKeyHasher</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hasher for frame key. <a href="structFrameKeyHasher.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runtime decode database with fast lookup by CAN ID. <a href="structDecodeDatabase.html#details">More...</a><br /></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDecodeDatabase.html">DecodeDatabase</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive. <a href="classDecodeDatabase.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
@@ -167,7 +163,7 @@ Enumerations</h2></td></tr>
<p>Signal byte order used for runtime decoding. </p>
<p class="definition">Definition at line <a class="el" href="decode__database_8h_source.html#l00025">25</a> of file <a class="el" href="decode__database_8h_source.html">decode_database.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="decode__database_8h_source.html#l00027">27</a> of file <a class="el" href="decode__database_8h_source.html">decode_database.h</a>.</p>
</div>
</div>
@@ -193,7 +189,7 @@ Enumerations</h2></td></tr>
<p>Signal numeric type. </p>
<p class="definition">Definition at line <a class="el" href="decode__database_8h_source.html#l00033">33</a> of file <a class="el" href="decode__database_8h_source.html">decode_database.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="decode__database_8h_source.html#l00035">35</a> of file <a class="el" href="decode__database_8h_source.html">decode_database.h</a>.</p>
</div>
</div>
+1 -3
View File
@@ -2,9 +2,7 @@ var decode__database_8h =
[
[ "DecodeSignal", "structDecodeSignal.html", "structDecodeSignal" ],
[ "DecodeFrame", "structDecodeFrame.html", "structDecodeFrame" ],
[ "FrameKey", "structFrameKey.html", null ],
[ "FrameKeyHasher", "structFrameKeyHasher.html", null ],
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
[ "DecodeDatabase", "classDecodeDatabase.html", "classDecodeDatabase" ],
[ "ByteOrder", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b", [
[ "Intel", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5", null ],
[ "Motorola", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31", null ]
+106 -110
View File
@@ -102,126 +102,122 @@ $(document).ready(function(){initNavTree('decode__database_8h_source.html','');
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#ifndef DECODE_DATABASE_H</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define DECODE_DATABASE_H</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;value_descriptions.h&quot;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;definition_key.h&quot;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;multiplexing.h&quot;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="foldopen" id="foldopen00025" data-start="{" data-end="};">
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b"> 25</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> Intel,</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> Motorola</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>};</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;value_descriptions.h&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="foldopen" id="foldopen00027" data-start="{" data-end="};">
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b"> 27</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> Intel,</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> Motorola</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>};</div>
</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="};">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1"> 33</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> Unsigned,</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> Signed</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>};</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="foldopen" id="foldopen00035" data-start="{" data-end="};">
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1"> 35</a></span><span class="keyword">enum class</span> <a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> Unsigned,</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> Signed</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>};</div>
</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="foldopen" id="foldopen00041" data-start="{" data-end="};">
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structDecodeSignal.html"> 41</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_struct" href="structMultiplexing.html">Multiplexing</a> multiplexing;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780"> 43</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a>; </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d"> 44</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = 0U; </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb"> 45</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 0U; </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d"> 46</a></span> <a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> <a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = ByteOrder::Intel; </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8"> 47</a></span> <a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> <a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = ValueType::Unsigned; </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391"> 48</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 1.0; </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74"> 49</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 0.0; </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25"> 50</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">minimum</a> = 0.0; </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7"> 51</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">maximum</a> = 0.0; </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092"> 52</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a>; </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa"> 53</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">receivers</a>; </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff"> 54</a></span> ValueDescriptions <a class="code hl_variable" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">valueDescriptions</a>; </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473"> 55</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">comment</a>; </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>};</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="foldopen" id="foldopen00043" data-start="{" data-end="};">
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structDecodeSignal.html"> 43</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> {</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_struct" href="structMultiplexing.html">Multiplexing</a> multiplexing;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780"> 45</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a>; </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d"> 46</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = 0U; </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb"> 47</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 0U; </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d"> 48</a></span> <a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> <a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = ByteOrder::Intel; </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8"> 49</a></span> <a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> <a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = ValueType::Unsigned; </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391"> 50</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 1.0; </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74"> 51</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 0.0; </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25"> 52</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">minimum</a> = 0.0; </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7"> 53</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">maximum</a> = 0.0; </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092"> 54</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a>; </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa"> 55</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">receivers</a>; </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff"> 56</a></span> ValueDescriptions <a class="code hl_variable" href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">valueDescriptions</a>; </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473"> 57</a></span> std::string <a class="code hl_variable" href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">comment</a>; </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>};</div>
</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="foldopen" id="foldopen00063" data-start="{" data-end="};">
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structDecodeFrame.html"> 63</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> {</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579"> 64</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a>; </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf"> 65</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0U; </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41"> 66</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060"> 67</a></span> std::uint8_t <a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = 0U; </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23"> 68</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">pgn</a> = 0U; </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d"> 69</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">hasPgn</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9"> 70</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">transmitter</a>; </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22"> 71</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a>; </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14"> 72</a></span> std::vector&lt;DecodeSignal&gt; signals; </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>};</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="foldopen" id="foldopen00065" data-start="{" data-end="};">
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structDecodeFrame.html"> 65</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> {</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579"> 66</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a>; </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf"> 67</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0U; </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41"> 68</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060"> 69</a></span> std::uint8_t <a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = 0U; </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23"> 70</a></span> std::uint32_t <a class="code hl_variable" href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">pgn</a> = 0U; </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d"> 71</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">hasPgn</a> = <span class="keyword">false</span>; </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9"> 72</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">transmitter</a>; </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22"> 73</a></span> std::string <a class="code hl_variable" href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">comment</a>; </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14"> 74</a></span> std::vector&lt;DecodeSignal&gt; signals; </div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> GetKey()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <a class="code hl_variable" href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">isExtended</a>);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>};</div>
</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="foldopen" id="foldopen00080" data-start="{" data-end="};">
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="structFrameKey.html"> 80</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structFrameKey.html">FrameKey</a> {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::uint32_t canId = 0U;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">bool</span> isExtended = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(std::uint32_t <span class="keywordtype">id</span>, <span class="keywordtype">bool</span> extended)</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> : canId(<span class="keywordtype">id</span>), isExtended(extended) {</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;other)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> (canId == other.canId) &amp;&amp; (isExtended == other.isExtended);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> }</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>};</div>
</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="foldopen" id="foldopen00098" data-start="{" data-end="};">
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="structFrameKeyHasher.html"> 98</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structFrameKeyHasher.html">FrameKeyHasher</a> {</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::size_t operator()(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;key)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">const</span> std::size_t a = <span class="keyword">static_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(key.canId);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">const</span> std::size_t b = key.isExtended ? 1U : 0U;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> (a * 1315423911U) ^ b;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>};</div>
</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="foldopen" id="foldopen00109" data-start="{" data-end="};">
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="structDecodeDatabase.html"> 109</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> std::vector&lt;DecodeFrame&gt; frames;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt; frameIndexByKey;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="foldopen" id="foldopen00087" data-start="{" data-end="};">
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classDecodeDatabase.html"> 87</a></span><span class="keyword">class </span><a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> {</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a>(std::vector&lt;DecodeFrame&gt; frames);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">const</span> std::vector&lt;DecodeFrame&gt; &amp;<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::shared_ptr&lt;const DecodeFrame&gt; <a class="code hl_function" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;key) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> std::shared_ptr&lt;const DecodeSignal&gt; FindSignal(<span class="keyword">const</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> &amp;key) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">struct </span>Storage {</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> std::vector&lt;DecodeFrame&gt; frames;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> std::unordered_map&lt;FrameKey, std::size_t, FrameKeyHasher&gt; frameIndexByKey;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">explicit</span> Storage(std::vector&lt;DecodeFrame&gt; definitions);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> };</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> std::shared_ptr&lt;const Storage&gt; storage;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>};</div>
</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="preprocessor">#endif </span><span class="comment">/* DECODE_DATABASE_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00025">decode_database.h:25</a></div></div>
<div class="ttc" id="adecode__database_8h_html_ad9971b6ef33e02ba2c75d19c1d2518a1"><div class="ttname"><a href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a></div><div class="ttdeci">ValueType</div><div class="ttdoc">Signal numeric type.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00033">decode_database.h:33</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00068">decode_database.h:68</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00071">decode_database.h:71</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00066">decode_database.h:66</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00064">decode_database.h:64</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00070">decode_database.h:70</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00052">decode_database.h:52</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a822155d9bf4ed5f3300c9e9befe606ff"><div class="ttname"><a href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">DecodeSignal::valueDescriptions</a></div><div class="ttdeci">ValueDescriptions valueDescriptions</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00054">decode_database.h:54</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector&lt; std::string &gt; receivers</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00053">decode_database.h:53</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00055">decode_database.h:55</a></div></div>
<div class="ttc" id="astructFrameKeyHasher_html"><div class="ttname"><a href="structFrameKeyHasher.html">FrameKeyHasher</a></div><div class="ttdoc">Hasher for frame key.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00098">decode_database.h:98</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_a780d6e747a48b10a5eb0ab85448d2970"><div class="ttname"><a href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const FrameKey &amp;key) const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00033">decode_database.cpp:33</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00027">decode_database.h:27</a></div></div>
<div class="ttc" id="adecode__database_8h_html_ad9971b6ef33e02ba2c75d19c1d2518a1"><div class="ttname"><a href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a></div><div class="ttdeci">ValueType</div><div class="ttdoc">Signal numeric type.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00035">decode_database.h:35</a></div></div>
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00070">decode_database.h:70</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00071">decode_database.h:71</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00073">decode_database.h:73</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00068">decode_database.h:68</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00066">decode_database.h:66</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00072">decode_database.h:72</a></div></div>
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00052">decode_database.h:52</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00054">decode_database.h:54</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00053">decode_database.h:53</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a822155d9bf4ed5f3300c9e9befe606ff"><div class="ttname"><a href="structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff">DecodeSignal::valueDescriptions</a></div><div class="ttdeci">ValueDescriptions valueDescriptions</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00056">decode_database.h:56</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector&lt; std::string &gt; receivers</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00055">decode_database.h:55</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00057">decode_database.h:57</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructMultiplexing_html"><div class="ttname"><a href="structMultiplexing.html">Multiplexing</a></div><div class="ttdef"><b>Definition</b> <a href="multiplexing_8h_source.html#l00014">multiplexing.h:14</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
+178
View File
@@ -0,0 +1,178 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DBC Framework: definition_key.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">DBC Framework
</div>
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('definition__key_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">definition_key.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Copyright (c) 2026 Dim Himro</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifndef DEFINITION_KEY_H</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#define DEFINITION_KEY_H</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="foldopen" id="foldopen00015" data-start="{" data-end="};">
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="structFrameKey.html"> 15</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structFrameKey.html">FrameKey</a> {</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::uint32_t canId = 0U;</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">bool</span> isExtended = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(std::uint32_t <span class="keywordtype">id</span>, <span class="keywordtype">bool</span> extended)</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> : canId(<span class="keywordtype">id</span>), isExtended(extended) {</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> }</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;other)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">return</span> (canId == other.canId) &amp;&amp; (isExtended == other.isExtended);</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> }</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>};</div>
</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="};">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structFrameKeyHasher.html"> 33</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structFrameKeyHasher.html">FrameKeyHasher</a> {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> std::size_t operator()(<span class="keyword">const</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> &amp;key)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> std::size_t a = <span class="keyword">static_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(key.canId);</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> std::size_t b = key.isExtended ? 1U : 0U;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> (a * 1315423911U) ^ b;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> }</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>};</div>
</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="foldopen" id="foldopen00042" data-start="{" data-end="};">
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structSignalKey.html"> 42</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structSignalKey.html">SignalKey</a> {</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_struct" href="structFrameKey.html">FrameKey</a> frame;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> std::string name;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a>(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a> frameKey, std::string signalName)</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> : frame(frameKey), name(std::move(signalName)) {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> &amp;other)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span> frame == other.frame &amp;&amp; name == other.name;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>};</div>
</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="foldopen" id="foldopen00056" data-start="{" data-end="};">
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structSignalKeyHasher.html"> 56</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structSignalKeyHasher.html">SignalKeyHasher</a> {</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> std::size_t operator()(<span class="keyword">const</span> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> &amp;key)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="structFrameKeyHasher.html">FrameKeyHasher</a>()(key.frame) ^ (std::hash&lt;std::string&gt;()(key.name) &lt;&lt; 1U);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> }</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>};</div>
</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">/* DEFINITION_KEY_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="astructFrameKeyHasher_html"><div class="ttname"><a href="structFrameKeyHasher.html">FrameKeyHasher</a></div><div class="ttdoc">Hasher for frame key.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00033">definition_key.h:33</a></div></div>
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Stable frame identifier: normalized CAN ID and frame type.</div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00015">definition_key.h:15</a></div></div>
<div class="ttc" id="astructSignalKeyHasher_html"><div class="ttname"><a href="structSignalKeyHasher.html">SignalKeyHasher</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00056">definition_key.h:56</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>definition_key.h</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
</ul>
</div>
</body>
</html>
@@ -129,9 +129,13 @@ Files</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></td></tr>
<tr class="memdesc:dbc__tree__builder_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="decode__database_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>decode_database.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="decode__database_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decode__database_8h.html">decode_database.h</a></td></tr>
<tr class="memdesc:decode__database_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="definition__key_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>definition_key.h</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="frame__info_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="frame__info_8h.html">frame_info.h</a></td></tr>
<tr class="memdesc:frame__info_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -12,7 +12,9 @@ var dir_4270bfced15e0e73154b13468c7c9ad9 =
[ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ],
[ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ],
[ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ],
[ "decode_database.cpp", "decode__database_8cpp_source.html", null ],
[ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ],
[ "definition_key.h", "definition__key_8h_source.html", null ],
[ "frame_info.h", "frame__info_8h.html", "frame__info_8h" ],
[ "multiplexing.h", "multiplexing_8h_source.html", null ],
[ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ],
@@ -100,6 +100,8 @@ Files</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>dbc_decoder_test.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__lifetime__test_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>dbc_lifetime_test.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>dbc_parser_test.cpp</b></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__model__test_8cpp_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><b>dbc_tree_model_test.cpp</b></td></tr>
@@ -2,6 +2,7 @@ var dir_59425e443f801f1f2fd8bbe4959a3ccf =
[
[ "dbc_coverage_test.cpp", "dbc__coverage__test_8cpp_source.html", null ],
[ "dbc_decoder_test.cpp", "dbc__decoder__test_8cpp_source.html", null ],
[ "dbc_lifetime_test.cpp", "dbc__lifetime__test_8cpp_source.html", null ],
[ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ],
[ "dbc_tree_model_test.cpp", "dbc__tree__model__test_8cpp_source.html", null ],
[ "tests/main.cpp", "tests_2main_8cpp_source.html", null ],
+13 -13
View File
@@ -163,12 +163,12 @@ $(document).ready(function(){initNavTree('examples_2main_8cpp_source.html','');
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">static</span> <span class="keywordtype">void</span> PrintDecodedFrame(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> &amp;decoded) {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> || (decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == <span class="keyword">nullptr</span>)) {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> || (decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a> == <span class="keyword">nullptr</span>)) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cout &lt;&lt; <span class="stringliteral">&quot;No frame definition found.\n&quot;</span>;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Decoded frame: &quot;</span> &lt;&lt; decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>-&gt;<a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Decoded frame: &quot;</span> &lt;&lt; decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">definition</a>-&gt;name &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &amp;signal : decoded.signals) {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
@@ -204,15 +204,15 @@ $(document).ready(function(){initNavTree('examples_2main_8cpp_source.html','');
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> PrintTree(root.get(), 0);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> decodeBuilder;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">/*</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment"> * Example raw frame.</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * Replace with live CAN frame or trace record later.</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> */</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> rawFrame;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = decodeDatabase.frames.empty() ? 0U : decodeDatabase.frames[0].canId;</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = decodeDatabase.frames.empty() ? false : decodeDatabase.frames[0].isExtended;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = decodeDatabase.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>().empty() ? 0U : decodeDatabase.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].canId;</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = decodeDatabase.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>().empty() ? false : decodeDatabase.<a class="code hl_function" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">GetFrames</a>()[0].isExtended;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8U, 0U);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> decoder;</div>
@@ -228,13 +228,15 @@ $(document).ready(function(){initNavTree('examples_2main_8cpp_source.html','');
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span>}</div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00072">dbc_decoder.h:72</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &amp;filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00031">dbc_parser.cpp:31</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr&lt; TreeNode &gt; Build(const DbcDatabase &amp;database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00028">decode_database.cpp:28</a></div></div>
<div class="ttc" id="aclassTreeNode_html"><div class="ttname"><a href="classTreeNode.html">TreeNode</a></div><div class="ttdoc">Tree node for later use in model/view or other hierarchy consumers.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8h_source.html#l00035">tree_node.h:35</a></div></div>
<div class="ttc" id="aclassTreeNode_html_a226518612d0d00b5988a2c44fc21d3f1"><div class="ttname"><a href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">TreeNode::GetSignal</a></div><div class="ttdeci">const SignalInfo * GetSignal() const</div><div class="ttdoc">Get signal payload if node is signal.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00064">tree_node.cpp:64</a></div></div>
<div class="ttc" id="aclassTreeNode_html_a4727ff801a2d1b9323c5ae50a35457a6"><div class="ttname"><a href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">TreeNode::GetChild</a></div><div class="ttdeci">const TreeNode * GetChild(std::size_t index) const</div><div class="ttdoc">Get child by index.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00038">tree_node.cpp:38</a></div></div>
@@ -247,11 +249,9 @@ $(document).ready(function(){initNavTree('examples_2main_8cpp_source.html','');
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__tree__builder_8h_html"><div class="ttname"><a href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00064">decode_database.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a33e971ba10030506007aa201c89f351d"><div class="ttname"><a href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00063">dbc_decoder.h:63</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
+16 -13
View File
@@ -108,15 +108,17 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.h</b></td><td class="desc"></td></tr>
<tr id="row_0_10_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8cpp.html" target="_self">dbc_tree_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8h.html" target="_self">dbc_tree_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="multiplexing_8h_source.html"><span class="icondoc"></span></a><b>multiplexing.h</b></td><td class="desc"></td></tr>
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="text__utils_8h_source.html"><span class="icondoc"></span></a><b>text_utils.h</b></td><td class="desc"></td></tr>
<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_18_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
<tr id="row_0_20_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="value__descriptions_8h_source.html"><span class="icondoc"></span></a><b>value_descriptions.h</b></td><td class="desc"></td></tr>
<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="decode__database_8cpp_source.html"><span class="icondoc"></span></a><b>decode_database.cpp</b></td><td class="desc"></td></tr>
<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="definition__key_8h_source.html"><span class="icondoc"></span></a><b>definition_key.h</b></td><td class="desc"></td></tr>
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="multiplexing_8h_source.html"><span class="icondoc"></span></a><b>multiplexing.h</b></td><td class="desc"></td></tr>
<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_18_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="text__utils_8h_source.html"><span class="icondoc"></span></a><b>text_utils.h</b></td><td class="desc"></td></tr>
<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_20_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_0_21_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
<tr id="row_0_22_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="value__descriptions_8h_source.html"><span class="icondoc"></span></a><b>value_descriptions.h</b></td><td class="desc"></td></tr>
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html" target="_self">examples</a></td><td class="desc"></td></tr>
<tr id="row_1_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="examples_2main_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="examples_2main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')">&#160;</span><a class="el" href="dir_0f63d6441a2c250919e1e8723011eb2f.html" target="_self">qt</a></td><td class="desc"></td></tr>
@@ -125,10 +127,11 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
<tr id="row_3_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><span id="img_3_" class="iconfopen" onclick="toggleFolder('3_')">&#160;</span><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html" target="_self">tests</a></td><td class="desc"></td></tr>
<tr id="row_3_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__coverage__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_coverage_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_1_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_decoder_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_3_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__tree__model__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_tree_model_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a><b>main.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_5_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node__test_8cpp_source.html"><span class="icondoc"></span></a><b>tree_node_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__lifetime__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_lifetime_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_3_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="dbc__tree__model__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_tree_model_test.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_5_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a><b>main.cpp</b></td><td class="desc"></td></tr>
<tr id="row_3_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="tree__node__test_8cpp_source.html"><span class="icondoc"></span></a><b>tree_node_test.cpp</b></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
+9 -2
View File
@@ -115,7 +115,8 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>data&#160;:&#160;<a class="el" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame</a></li>
<li>Decode()&#160;:&#160;<a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder</a></li>
<li>definition&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue</a></li>
<li>DecodeDatabase()&#160;:&#160;<a class="el" href="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a">DecodeDatabase</a></li>
<li>definition&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue</a></li>
<li>Dispatch()&#160;:&#160;<a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher</a></li>
<li>dlc&#160;:&#160;<a class="el" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame</a>, <a class="el" href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo</a></li>
</ul>
@@ -123,7 +124,7 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
<li>factor&#160;:&#160;<a class="el" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal</a>, <a class="el" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">SignalInfo</a></li>
<li>FindFrame()&#160;:&#160;<a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder</a></li>
<li>FindFrame()&#160;:&#160;<a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder</a>, <a class="el" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase</a></li>
<li>frames&#160;:&#160;<a class="el" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase</a></li>
</ul>
@@ -132,6 +133,7 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
<li>GetChild()&#160;:&#160;<a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">TreeNode</a></li>
<li>GetChildCount()&#160;:&#160;<a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">TreeNode</a></li>
<li>GetFrame()&#160;:&#160;<a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">TreeNode</a></li>
<li>GetFrames()&#160;:&#160;<a class="el" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase</a></li>
<li>GetName()&#160;:&#160;<a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">TreeNode</a></li>
<li>GetParent()&#160;:&#160;<a class="el" href="classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f">TreeNode</a></li>
<li>GetRow()&#160;:&#160;<a class="el" href="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8">TreeNode</a></li>
@@ -153,6 +155,11 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
</ul>
<h3><a id="index_k" name="index_k"></a>- k -</h3><ul>
<li>key&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue</a></li>
</ul>
<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>length&#160;:&#160;<a class="el" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal</a>, <a class="el" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo</a></li>
</ul>
+3 -1
View File
@@ -97,11 +97,13 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
<li>create()&#160;:&#160;<a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></li>
<li>creator()&#160;:&#160;<a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></li>
<li>Decode()&#160;:&#160;<a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder</a></li>
<li>DecodeDatabase()&#160;:&#160;<a class="el" href="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a">DecodeDatabase</a></li>
<li>Dispatch()&#160;:&#160;<a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher</a></li>
<li>FindFrame()&#160;:&#160;<a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder</a></li>
<li>FindFrame()&#160;:&#160;<a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c">DbcDecoder</a>, <a class="el" href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase</a></li>
<li>GetChild()&#160;:&#160;<a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">TreeNode</a></li>
<li>GetChildCount()&#160;:&#160;<a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">TreeNode</a></li>
<li>GetFrame()&#160;:&#160;<a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">TreeNode</a></li>
<li>GetFrames()&#160;:&#160;<a class="el" href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase</a></li>
<li>GetName()&#160;:&#160;<a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">TreeNode</a></li>
<li>GetParent()&#160;:&#160;<a class="el" href="classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f">TreeNode</a></li>
<li>GetRow()&#160;:&#160;<a class="el" href="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8">TreeNode</a></li>
+6 -1
View File
@@ -105,7 +105,7 @@ $(document).ready(function(){initNavTree('functions_vars.html',''); initResizabl
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>data&#160;:&#160;<a class="el" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame</a></li>
<li>definition&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue</a></li>
<li>definition&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue</a></li>
<li>dlc&#160;:&#160;<a class="el" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame</a>, <a class="el" href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo</a></li>
</ul>
@@ -128,6 +128,11 @@ $(document).ready(function(){initNavTree('functions_vars.html',''); initResizabl
</ul>
<h3><a id="index_k" name="index_k"></a>- k -</h3><ul>
<li>key&#160;:&#160;<a class="el" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue</a>, <a class="el" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue</a></li>
</ul>
<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
<li>length&#160;:&#160;<a class="el" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal</a>, <a class="el" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo</a></li>
</ul>
+7 -5
View File
@@ -113,7 +113,7 @@ This inheritance list is sorted roughly, but not completely, alphabetically:</di
<tr id="row_8_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcUnsupportedMultiplexingHandler.html" target="_self">DbcUnsupportedMultiplexingHandler</a></td><td class="desc"></td></tr>
<tr id="row_8_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcValueDescriptionHandler.html" target="_self">DbcValueDescriptionHandler</a></td><td class="desc"></td></tr>
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles and decoded results keep old definitions alive </td></tr>
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
@@ -122,7 +122,7 @@ This inheritance list is sorted roughly, but not completely, alphabetically:</di
<tr id="row_15_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_15_0_" class="arrow" onclick="toggleFolder('15_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>std::runtime_error</b></td><td class="desc">STL class </td></tr>
<tr id="row_15_0_0_" class="odd"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDiagnosticError.html" target="_self">DbcDiagnosticError</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </td></tr>
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Stable frame identifier: normalized CAN ID and frame type </td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structMultiplexing.html" target="_self">Multiplexing</a></td><td class="desc"></td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structPendingValueDescriptions.html" target="_self">PendingValueDescriptions</a></td><td class="desc"></td></tr>
@@ -130,9 +130,11 @@ This inheritance list is sorted roughly, but not completely, alphabetically:</di
<tr id="row_21_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeModel.html" target="_self">DbcTreeModel</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
<tr id="row_23_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
<tr id="row_24_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
<tr id="row_26_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory&lt; std::string, DbcStatementHandler &gt;</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKey.html" target="_self">SignalKey</a></td><td class="desc"></td></tr>
<tr id="row_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalKeyHasher.html" target="_self">SignalKeyHasher</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
<tr id="row_27_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory&lt; ClassId, BaseClass, Args &gt;</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
<tr id="row_28_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory&lt; std::string, DbcStatementHandler &gt;</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
+3 -1
View File
@@ -17,7 +17,7 @@ var hierarchy =
[ "DbcValueDescriptionHandler", "classDbcValueDescriptionHandler.html", null ]
] ],
[ "DbcTreeBuilder", "classDbcTreeBuilder.html", null ],
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
[ "DecodeDatabase", "classDecodeDatabase.html", null ],
[ "DecodedFrameValue", "structDecodedFrameValue.html", null ],
[ "DecodedSignalValue", "structDecodedSignalValue.html", null ],
[ "DecodeFrame", "structDecodeFrame.html", null ],
@@ -37,6 +37,8 @@ var hierarchy =
] ],
[ "RawCanFrame", "structRawCanFrame.html", null ],
[ "SignalInfo", "structSignalInfo.html", null ],
[ "SignalKey", "structSignalKey.html", null ],
[ "SignalKeyHasher", "structSignalKeyHasher.html", null ],
[ "TreeNode", "classTreeNode.html", null ],
[ "TypeFactory< ClassId, BaseClass, Args >", "classTypeFactory.html", null ],
[ "TypeFactory< std::string, DbcStatementHandler >", "classTypeFactory.html", null ]
+104 -67
View File
@@ -71,64 +71,68 @@
<section title="&lt;tt&gt;DecodedSignalValue&lt;/tt&gt;" ref="md_README.html#autotoc_md62">
<section title="Raw value representation and precision" ref="md_README.html#autotoc_md64"/>
</section>
<section title="&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;" ref="md_README.html#autotoc_md66"/>
<section title="&lt;tt&gt;DbcDecoder&lt;/tt&gt;" ref="md_README.html#autotoc_md68"/>
<section title="Parser Support" ref="md_README.html#autotoc_md70">
<section title="Structured diagnostics" ref="md_README.html#autotoc_md71"/>
<section title="&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;" ref="md_README.html#autotoc_md66">
<section title="Definition ownership and reload" ref="md_README.html#autotoc_md67"/>
<section title="Stable frame and signal identifiers" ref="md_README.html#autotoc_md68"/>
</section>
<section title="Supported DBC Syntax" ref="md_README.html#autotoc_md73"/>
<section title="Frame definition" ref="md_README.html#autotoc_md74">
<section title="Frame validation and parse errors" ref="md_README.html#autotoc_md76"/>
<section title="&lt;tt&gt;DbcDecoder&lt;/tt&gt;" ref="md_README.html#autotoc_md70"/>
<section title="Parser Support" ref="md_README.html#autotoc_md72">
<section title="Structured diagnostics" ref="md_README.html#autotoc_md73"/>
</section>
<section title="Signal definition" ref="md_README.html#autotoc_md78">
<section title="Signal validation and parse errors" ref="md_README.html#autotoc_md80"/>
<section title="Supported DBC Syntax" ref="md_README.html#autotoc_md75"/>
<section title="Frame definition" ref="md_README.html#autotoc_md76">
<section title="Frame validation and parse errors" ref="md_README.html#autotoc_md78"/>
</section>
<section title="Basic multiplexing" ref="md_README.html#autotoc_md82"/>
<section title="Comments" ref="md_README.html#autotoc_md84"/>
<section title="CAN ID Normalization" ref="md_README.html#autotoc_md86"/>
<section title="PGN Extraction" ref="md_README.html#autotoc_md88"/>
<section title="Decode Flow" ref="md_README.html#autotoc_md90"/>
<section title="Intel and Motorola Extraction" ref="md_README.html#autotoc_md92"/>
<section title="Example Usage" ref="md_README.html#autotoc_md94">
<section title="Parse DBC" ref="md_README.html#autotoc_md95"/>
<section title="Build UI tree" ref="md_README.html#autotoc_md96"/>
<section title="Build runtime decode database" ref="md_README.html#autotoc_md97"/>
<section title="Decode a raw frame" ref="md_README.html#autotoc_md98"/>
<section title="Signal definition" ref="md_README.html#autotoc_md80">
<section title="Signal validation and parse errors" ref="md_README.html#autotoc_md82"/>
</section>
<section title="Unified Decode Strategy" ref="md_README.html#autotoc_md100">
<section title="live path" ref="md_README.html#autotoc_md101"/>
<section title="trace path" ref="md_README.html#autotoc_md102"/>
<section title="Basic multiplexing" ref="md_README.html#autotoc_md84"/>
<section title="Comments" ref="md_README.html#autotoc_md86"/>
<section title="CAN ID Normalization" ref="md_README.html#autotoc_md88"/>
<section title="PGN Extraction" ref="md_README.html#autotoc_md90"/>
<section title="Decode Flow" ref="md_README.html#autotoc_md92"/>
<section title="Intel and Motorola Extraction" ref="md_README.html#autotoc_md94"/>
<section title="Example Usage" ref="md_README.html#autotoc_md96">
<section title="Parse DBC" ref="md_README.html#autotoc_md97"/>
<section title="Build UI tree" ref="md_README.html#autotoc_md98"/>
<section title="Build runtime decode database" ref="md_README.html#autotoc_md99"/>
<section title="Decode a raw frame" ref="md_README.html#autotoc_md100"/>
</section>
<section title="Intended Use in FrameTap" ref="md_README.html#autotoc_md104"/>
<section title="Why the Tree Is Not Enough" ref="md_README.html#autotoc_md106"/>
<section title="Statement Handler Factory" ref="md_README.html#autotoc_md108"/>
<section title="Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)" ref="md_README.html#autotoc_md110"/>
<section title="Current Limitations" ref="md_README.html#autotoc_md112"/>
<section title="Recommended Next Steps" ref="md_README.html#autotoc_md114">
<section title="Stage 1 - already implemented" ref="md_README.html#autotoc_md115"/>
<section title="Stage 2" ref="md_README.html#autotoc_md116"/>
<section title="Stage 3" ref="md_README.html#autotoc_md117"/>
<section title="Stage 4" ref="md_README.html#autotoc_md118"/>
<section title="Unified Decode Strategy" ref="md_README.html#autotoc_md102">
<section title="live path" ref="md_README.html#autotoc_md103"/>
<section title="trace path" ref="md_README.html#autotoc_md104"/>
</section>
<section title="Build Integration" ref="md_README.html#autotoc_md120">
<section title="Build core without Qt libraries" ref="md_README.html#autotoc_md121"/>
<section title="Optional Qt model adapter" ref="md_README.html#autotoc_md122"/>
<section title="Standalone tree tests without Qt" ref="md_README.html#autotoc_md123"/>
<section title="Build and run the demo" ref="md_README.html#autotoc_md124"/>
<section title="Generate API documentation" ref="md_README.html#autotoc_md125"/>
<section title="Intended Use in FrameTap" ref="md_README.html#autotoc_md106"/>
<section title="Why the Tree Is Not Enough" ref="md_README.html#autotoc_md108"/>
<section title="Statement Handler Factory" ref="md_README.html#autotoc_md110"/>
<section title="Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)" ref="md_README.html#autotoc_md112"/>
<section title="Current Limitations" ref="md_README.html#autotoc_md114"/>
<section title="Recommended Next Steps" ref="md_README.html#autotoc_md116">
<section title="Stage 1 - already implemented" ref="md_README.html#autotoc_md117"/>
<section title="Stage 2" ref="md_README.html#autotoc_md118"/>
<section title="Stage 3" ref="md_README.html#autotoc_md119"/>
<section title="Stage 4" ref="md_README.html#autotoc_md120"/>
</section>
<section title="Regression tests" ref="md_README.html#autotoc_md127"/>
<section title="Measuring code coverage" ref="md_README.html#autotoc_md128">
<section title="GCC, gcov, and LCOV on Debian/Ubuntu" ref="md_README.html#autotoc_md129"/>
<section title="Configure the GCC coverage build in Qt Creator" ref="md_README.html#autotoc_md130"/>
<section title="Configure all build variants in Qt Creator" ref="md_README.html#autotoc_md131"/>
<section title="Build Integration" ref="md_README.html#autotoc_md122">
<section title="Build core without Qt libraries" ref="md_README.html#autotoc_md123"/>
<section title="Optional Qt model adapter" ref="md_README.html#autotoc_md124"/>
<section title="Standalone tree tests without Qt" ref="md_README.html#autotoc_md125"/>
<section title="Build and run the demo" ref="md_README.html#autotoc_md126"/>
<section title="Generate API documentation" ref="md_README.html#autotoc_md127"/>
</section>
<section title="Regression tests" ref="md_README.html#autotoc_md129"/>
<section title="Measuring code coverage" ref="md_README.html#autotoc_md130">
<section title="GCC, gcov, and LCOV on Debian/Ubuntu" ref="md_README.html#autotoc_md131"/>
<section title="Configure the GCC coverage build in Qt Creator" ref="md_README.html#autotoc_md132"/>
<section title="Configure all build variants in Qt Creator" ref="md_README.html#autotoc_md133"/>
</section>
</section>
<section title="QtTest regression tests" ref="md_tests_2README.html">
<section title="Decoder coverage" ref="md_tests_2README.html#autotoc_md133"/>
<section title="Parser coverage" ref="md_tests_2README.html#autotoc_md134"/>
<section title="Tree and optional model tests" ref="md_tests_2README.html#autotoc_md135"/>
<section title="Additional regression coverage" ref="md_tests_2README.html#autotoc_md136"/>
<section title="Decoder coverage" ref="md_tests_2README.html#autotoc_md135"/>
<section title="Parser coverage" ref="md_tests_2README.html#autotoc_md136"/>
<section title="Tree and optional model tests" ref="md_tests_2README.html#autotoc_md137"/>
<section title="Additional regression coverage" ref="md_tests_2README.html#autotoc_md138"/>
<section title="Definition lifetime and reload coverage" ref="md_tests_2README.html#autotoc_md139"/>
</section>
<section title="Classes" ref="annotated.html">
<section title="Class List" ref="annotated.html">
@@ -141,7 +145,7 @@
<section title="Build" ref="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"/>
</section>
<section title="DbcDecoder" ref="classDbcDecoder.html">
<section title="FindFrame" ref="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"/>
<section title="FindFrame" ref="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c"/>
<section title="Decode" ref="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"/>
</section>
<section title="DbcDiagnostic" ref="structDbcDiagnostic.html">
@@ -176,16 +180,21 @@
</section>
<section title="DbcValueDescriptionHandler" ref="classDbcValueDescriptionHandler.html">
</section>
<section title="DecodeDatabase" ref="structDecodeDatabase.html">
<section title="DecodeDatabase" ref="classDecodeDatabase.html">
<section title="DecodeDatabase" ref="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a"/>
<section title="GetFrames" ref="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8"/>
<section title="FindFrame" ref="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970"/>
</section>
<section title="DecodedFrameValue" ref="structDecodedFrameValue.html">
<section title="definition" ref="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"/>
<section title="definition" ref="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d"/>
<section title="key" ref="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73"/>
<section title="public" ref="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"/>
<section title="valid" ref="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"/>
</section>
<section title="DecodedSignalValue" ref="structDecodedSignalValue.html">
<section title="GetValueDescription" ref="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2"/>
<section title="definition" ref="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"/>
<section title="definition" ref="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2"/>
<section title="key" ref="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a"/>
<section title="rawValue" ref="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28"/>
<section title="physicalValue" ref="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"/>
<section title="valid" ref="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"/>
@@ -255,6 +264,10 @@
<section title="valueDescriptions" ref="structSignalInfo.html#a43f47d0433d0cc39076bd7278b46af9c"/>
<section title="comment" ref="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5"/>
</section>
<section title="SignalKey" ref="structSignalKey.html">
</section>
<section title="SignalKeyHasher" ref="structSignalKeyHasher.html">
</section>
<section title="TreeNode" ref="classTreeNode.html">
<section title="TreeNode" ref="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d"/>
<section title="TreeNode" ref="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc"/>
@@ -296,7 +309,7 @@
<section title="DbcValueDescriptionHandler" ref="classDbcValueDescriptionHandler.html"/>
</section>
<section title="DbcTreeBuilder" ref="classDbcTreeBuilder.html"/>
<section title="DecodeDatabase" ref="structDecodeDatabase.html"/>
<section title="DecodeDatabase" ref="classDecodeDatabase.html"/>
<section title="DecodedFrameValue" ref="structDecodedFrameValue.html"/>
<section title="DecodedSignalValue" ref="structDecodedSignalValue.html"/>
<section title="DecodeFrame" ref="structDecodeFrame.html"/>
@@ -316,6 +329,8 @@
</section>
<section title="RawCanFrame" ref="structRawCanFrame.html"/>
<section title="SignalInfo" ref="structSignalInfo.html"/>
<section title="SignalKey" ref="structSignalKey.html"/>
<section title="SignalKeyHasher" ref="structSignalKeyHasher.html"/>
<section title="TreeNode" ref="classTreeNode.html"/>
<section title="TypeFactory&lt; ClassId, BaseClass, Args &gt;" ref="classTypeFactory.html"/>
<section title="TypeFactory&lt; std::string, DbcStatementHandler &gt;" ref="classTypeFactory.html"/>
@@ -349,18 +364,20 @@
</section>
<section title="DecodedSignalValue" ref="structDecodedSignalValue.html">
<section title="GetValueDescription" ref="structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2"/>
<section title="definition" ref="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"/>
<section title="definition" ref="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2"/>
<section title="key" ref="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a"/>
<section title="rawValue" ref="structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28"/>
<section title="physicalValue" ref="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"/>
<section title="valid" ref="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"/>
</section>
<section title="DecodedFrameValue" ref="structDecodedFrameValue.html">
<section title="definition" ref="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"/>
<section title="definition" ref="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d"/>
<section title="key" ref="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73"/>
<section title="public" ref="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"/>
<section title="valid" ref="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"/>
</section>
<section title="DbcDecoder" ref="classDbcDecoder.html">
<section title="FindFrame" ref="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"/>
<section title="FindFrame" ref="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c"/>
<section title="Decode" ref="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"/>
</section>
</section>
@@ -380,6 +397,7 @@
<section title="Build" ref="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b"/>
</section>
</section>
<section title="decode_database.cpp" ref="decode__database_8cpp_source.html"/>
<section title="decode_database.h" ref="decode__database_8h.html">
<section title="DecodeSignal" ref="structDecodeSignal.html">
<section title="name" ref="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780"/>
@@ -407,11 +425,10 @@
<section title="comment" ref="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22"/>
<section title="public" ref="structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14"/>
</section>
<section title="FrameKey" ref="structFrameKey.html">
</section>
<section title="FrameKeyHasher" ref="structFrameKeyHasher.html">
</section>
<section title="DecodeDatabase" ref="structDecodeDatabase.html">
<section title="DecodeDatabase" ref="classDecodeDatabase.html">
<section title="DecodeDatabase" ref="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a"/>
<section title="GetFrames" ref="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8"/>
<section title="FindFrame" ref="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970"/>
</section>
<section title="ByteOrder" ref="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">
<section title="Intel" ref="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5"/>
@@ -422,6 +439,7 @@
<section title="Signed" ref="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379"/>
</section>
</section>
<section title="definition_key.h" ref="definition__key_8h_source.html"/>
<section title="frame_info.h" ref="frame__info_8h.html">
<section title="FrameInfo" ref="structFrameInfo.html">
<section title="name" ref="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb"/>
@@ -491,6 +509,7 @@
<section title="tests" ref="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">
<section title="dbc_coverage_test.cpp" ref="dbc__coverage__test_8cpp_source.html"/>
<section title="dbc_decoder_test.cpp" ref="dbc__decoder__test_8cpp_source.html"/>
<section title="dbc_lifetime_test.cpp" ref="dbc__lifetime__test_8cpp_source.html"/>
<section title="dbc_parser_test.cpp" ref="dbc__parser__test_8cpp_source.html"/>
<section title="dbc_tree_model_test.cpp" ref="dbc__tree__model__test_8cpp_source.html"/>
<section title="tests/main.cpp" ref="tests_2main_8cpp_source.html"/>
@@ -523,7 +542,7 @@
<keyword name="DbcTreeModel" id="DbcTreeModel_" ref="classDbcTreeModel.html"/>
<keyword name="DbcUnsupportedMultiplexingHandler" id="DbcUnsupportedMultiplexingHandler_" ref="classDbcUnsupportedMultiplexingHandler.html"/>
<keyword name="DbcValueDescriptionHandler" id="DbcValueDescriptionHandler_" ref="classDbcValueDescriptionHandler.html"/>
<keyword name="DecodeDatabase" id="DecodeDatabase_" ref="structDecodeDatabase.html"/>
<keyword name="DecodeDatabase" id="DecodeDatabase_" ref="classDecodeDatabase.html"/>
<keyword name="DecodedFrameValue" id="DecodedFrameValue_" ref="structDecodedFrameValue.html"/>
<keyword name="DecodedSignalValue" id="DecodedSignalValue_" ref="structDecodedSignalValue.html"/>
<keyword name="DecodeFrame" id="DecodeFrame_" ref="structDecodeFrame.html"/>
@@ -535,6 +554,8 @@
<keyword name="PendingValueDescriptions" id="PendingValueDescriptions_" ref="structPendingValueDescriptions.html"/>
<keyword name="RawCanFrame" id="RawCanFrame_" ref="structRawCanFrame.html"/>
<keyword name="SignalInfo" id="SignalInfo_" ref="structSignalInfo.html"/>
<keyword name="SignalKey" id="SignalKey_" ref="structSignalKey.html"/>
<keyword name="SignalKeyHasher" id="SignalKeyHasher_" ref="structSignalKeyHasher.html"/>
<keyword name="TreeNode" id="TreeNode_" ref="classTreeNode.html"/>
<keyword name="TypeFactory" id="TypeFactory_" ref="classTypeFactory.html"/>
<keyword name="TypeFactory&lt; std::string, DbcStatementHandler &gt;" id="TypeFactory&lt; std::string, DbcStatementHandler &gt;_" ref="classTypeFactory.html"/>
@@ -560,19 +581,22 @@
<keyword name="creator(const std::string &amp;id) const" id="TypeFactory&lt; std::string, DbcStatementHandler &gt;::creator_ad82f537569ece3d3a4a376523fa94473" ref="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473"/>
<keyword name="data" id="RawCanFrame::data_a0acb487612104c99c9907344c035df83" ref="structRawCanFrame.html#a0acb487612104c99c9907344c035df83"/>
<keyword name="Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const" id="DbcDecoder::Decode_a345951ffe5d943a70d3a1ea1f39e74f7" ref="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"/>
<keyword name="definition" id="DecodedSignalValue::definition_acadc3b3bb21dd6b0412d342c7e6b20d7" ref="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"/>
<keyword name="definition" id="DecodedFrameValue::definition_a60dda1cc352d2c8087f0bdbc81dd266c" ref="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"/>
<keyword name="DecodeDatabase(std::vector&lt; DecodeFrame &gt; frames)" id="DecodeDatabase::DecodeDatabase_aa935a3a0d334f932d6a8c89a3818286a" ref="classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a"/>
<keyword name="definition" id="DecodedSignalValue::definition_a828b5ef7faefc14fbf5dbd46249bcad2" ref="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2"/>
<keyword name="definition" id="DecodedFrameValue::definition_a33e971ba10030506007aa201c89f351d" ref="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d"/>
<keyword name="Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const" id="DbcStatementDispatcher::Dispatch_a495c2d5c7ebb8103b1987cdd87c142ed" ref="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed"/>
<keyword name="dlc" id="DecodeFrame::dlc_a51111ac13988be372d5673d12cf3e060" ref="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060"/>
<keyword name="dlc" id="FrameInfo::dlc_aa2b198ea0f55e560c123d35e7b3ecab9" ref="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9"/>
<keyword name="factor" id="DecodeSignal::factor_a428c39913a366a8476dd291061354391" ref="structDecodeSignal.html#a428c39913a366a8476dd291061354391"/>
<keyword name="factor" id="SignalInfo::factor_ae4f78d99a2750aa564d7eba860171499" ref="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499"/>
<keyword name="FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const" id="DbcDecoder::FindFrame_ab2cfb2fb711c95d3a29365546b89f3da" ref="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"/>
<keyword name="FindFrame(const DecodeDatabase &amp;database, std::uint32_t canId, bool isExtended) const" id="DbcDecoder::FindFrame_a4005c4311f57b7faf21c0cb31463039c" ref="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c"/>
<keyword name="FindFrame(const FrameKey &amp;key) const" id="DecodeDatabase::FindFrame_a780d6e747a48b10a5eb0ab85448d2970" ref="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970"/>
<keyword name="frames" id="DbcDatabase::frames_a2cade5d0234ee816132127542f8c612b" ref="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"/>
<keyword name="GetChild(std::size_t index) const" id="TreeNode::GetChild_a4727ff801a2d1b9323c5ae50a35457a6" ref="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6"/>
<keyword name="GetChild(std::size_t index)" id="TreeNode::GetChild_a81047bd7d2a4cc96b9ef5e20d0d63b5f" ref="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f"/>
<keyword name="GetChildCount() const" id="TreeNode::GetChildCount_abdd82460187dca8d3e5d66f5d5c529ea" ref="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea"/>
<keyword name="GetFrame() const" id="TreeNode::GetFrame_afc503b40004764163605d6dbdb4ef811" ref="classTreeNode.html#afc503b40004764163605d6dbdb4ef811"/>
<keyword name="GetFrames() const" id="DecodeDatabase::GetFrames_aa034c1510984a85f60ad6c0bd744d6e8" ref="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8"/>
<keyword name="GetName() const" id="TreeNode::GetName_aaac5b8d9dc9e5ae1f367d1adbcf20e18" ref="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18"/>
<keyword name="GetParent() const" id="TreeNode::GetParent_aa48fbc17903eb8cfa40353e29f853c6f" ref="classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f"/>
<keyword name="GetRow() const" id="TreeNode::GetRow_ad501f97eeec7f7d3353bfae838fbb6a8" ref="classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8"/>
@@ -586,6 +610,8 @@
<keyword name="isExtended" id="FrameInfo::isExtended_a34b726afaad2ac5c697fdb2ac070cdaf" ref="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf"/>
<keyword name="isLittleEndian" id="SignalInfo::isLittleEndian_af363b1563fb4c7cc8973f9a80c06846c" ref="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c"/>
<keyword name="isSigned" id="SignalInfo::isSigned_a52a52b320eef92fbcb4626307f9a498f" ref="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f"/>
<keyword name="key" id="DecodedSignalValue::key_a33df0fcd92b23b3e08539906fc6b4c4a" ref="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a"/>
<keyword name="key" id="DecodedFrameValue::key_a32143efe2023a1ecd977a9ae93e50b73" ref="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73"/>
<keyword name="length" id="DecodeSignal::length_acd4ef5ee30421d117b5756854302debb" ref="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb"/>
<keyword name="length" id="SignalInfo::length_a1008b5201f71848177217bd52fb84baa" ref="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa"/>
<keyword name="maximum" id="DecodeSignal::maximum_a4a6ba87142a9badbf0ca830e9e709cb7" ref="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7"/>
@@ -677,6 +703,8 @@
<file>classDbcValueDescriptionHandler-members.html</file>
<file>classDbcValueDescriptionHandler.html</file>
<file>classDbcValueDescriptionHandler__inherit__graph.svg</file>
<file>classDecodeDatabase-members.html</file>
<file>classDecodeDatabase.html</file>
<file>classTreeNode-members.html</file>
<file>classTreeNode.html</file>
<file>classTypeFactory-members.html</file>
@@ -697,6 +725,7 @@
<file>dbc__decoder_8h_source.html</file>
<file>dbc__decoder__test_8cpp_source.html</file>
<file>dbc__diagnostic_8h_source.html</file>
<file>dbc__lifetime__test_8cpp_source.html</file>
<file>dbc__parser_8cpp.html</file>
<file>dbc__parser_8cpp_source.html</file>
<file>dbc__parser_8h.html</file>
@@ -711,8 +740,10 @@
<file>dbc__tree__model_8cpp_source.html</file>
<file>dbc__tree__model_8h_source.html</file>
<file>dbc__tree__model__test_8cpp_source.html</file>
<file>decode__database_8cpp_source.html</file>
<file>decode__database_8h.html</file>
<file>decode__database_8h_source.html</file>
<file>definition__key_8h_source.html</file>
<file>dir_0f63d6441a2c250919e1e8723011eb2f.html</file>
<file>dir_4270bfced15e0e73154b13468c7c9ad9.html</file>
<file>dir_59425e443f801f1f2fd8bbe4959a3ccf.html</file>
@@ -754,6 +785,8 @@
<file>inherit_graph_24.svg</file>
<file>inherit_graph_25.svg</file>
<file>inherit_graph_26.svg</file>
<file>inherit_graph_27.svg</file>
<file>inherit_graph_28.svg</file>
<file>inherit_graph_3.svg</file>
<file>inherit_graph_4.svg</file>
<file>inherit_graph_5.svg</file>
@@ -789,6 +822,7 @@
<file>search/all_18.js</file>
<file>search/all_19.js</file>
<file>search/all_1a.js</file>
<file>search/all_1b.js</file>
<file>search/all_2.js</file>
<file>search/all_3.js</file>
<file>search/all_4.js</file>
@@ -845,6 +879,7 @@
<file>search/searchdata.js</file>
<file>search/variables_0.js</file>
<file>search/variables_1.js</file>
<file>search/variables_10.js</file>
<file>search/variables_2.js</file>
<file>search/variables_3.js</file>
<file>search/variables_4.js</file>
@@ -871,8 +906,6 @@
<file>structDbcParseContext.html</file>
<file>structDbcParseResult-members.html</file>
<file>structDbcParseResult.html</file>
<file>structDecodeDatabase-members.html</file>
<file>structDecodeDatabase.html</file>
<file>structDecodeFrame-members.html</file>
<file>structDecodeFrame.html</file>
<file>structDecodeSignal-members.html</file>
@@ -895,6 +928,10 @@
<file>structRawCanFrame.html</file>
<file>structSignalInfo-members.html</file>
<file>structSignalInfo.html</file>
<file>structSignalKey-members.html</file>
<file>structSignalKey.html</file>
<file>structSignalKeyHasher-members.html</file>
<file>structSignalKeyHasher.html</file>
<file>svg.min.js</file>
<file>sync_off.png</file>
<file>sync_on.png</file>
+1 -1
View File
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$structDecodeDatabase.html" title="Runtime decode database with fast lookup by CAN ID." alt="" coords="5,5,139,31"/>
<area shape="rect" id="Node000000" href="$classDecodeDatabase.html" title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a..." alt="" coords="5,5,139,31"/>
</map>
+1 -1
View File
@@ -1 +1 @@
7b890cf55980a81b2aa2570b6e5b0f21
69d61ee297cd29b98a4f18e2423d5426
+1 -1
View File
@@ -11,7 +11,7 @@
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="structDecodeDatabase.html" target="_top" xlink:title="Runtime decode database with fast lookup by CAN ID.">
<g id="a_Node000000"><a xlink:href="classDecodeDatabase.html" target="_top" xlink:title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...">
<polygon fill="white" stroke="#666666" points="100,-19 0,-19 0,0 100,0 100,-19"/>
<text text-anchor="middle" x="50" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">DecodeDatabase</text>
</a>

Before

Width:  |  Height:  |  Size: 961 B

After

Width:  |  Height:  |  Size: 1013 B

+1 -1
View File
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$structFrameKey.html" title="Key for fast frame lookup." alt="" coords="5,5,92,31"/>
<area shape="rect" id="Node000000" href="$structFrameKey.html" title="Stable frame identifier: normalized CAN ID and frame type." alt="" coords="5,5,92,31"/>
</map>
+1 -1
View File
@@ -1 +1 @@
ab35c84b554d480a0ee1155c1179d2db
d9608cce91db8bae16d0a4008a468656
+1 -1
View File
@@ -11,7 +11,7 @@
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="structFrameKey.html" target="_top" xlink:title="Key for fast frame lookup.">
<g id="a_Node000000"><a xlink:href="structFrameKey.html" target="_top" xlink:title="Stable frame identifier: normalized CAN ID and frame type.">
<polygon fill="white" stroke="#666666" points="65,-19 0,-19 0,0 65,0 65,-19"/>
<text text-anchor="middle" x="32.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">FrameKey</text>
</a>

Before

Width:  |  Height:  |  Size: 921 B

After

Width:  |  Height:  |  Size: 953 B

+1 -5
View File
@@ -1,7 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" title=" " alt="" coords="5,5,120,31"/>
<area shape="rect" id="Node000001" title=" " alt="" coords="168,5,307,31"/>
<area shape="poly" id="edge8_Node000000_Node000001" title=" " alt="" coords="134,15,168,15,168,21,134,21"/>
<area shape="rect" id="Node000002" href="$classDbcDiagnosticError.html" title=" " alt="" coords="355,5,501,31"/>
<area shape="poly" id="edge9_Node000001_Node000002" title=" " alt="" coords="321,15,354,15,354,21,321,21"/>
<area shape="rect" id="Node000000" href="$structSignalKey.html" title=" " alt="" coords="5,5,92,31"/>
</map>
+1 -1
View File
@@ -1 +1 @@
fcc3a46e0f291589c12d6b87f268a06f
7431f1cf350c15283d4994c7ea7fd895
+5 -41
View File
@@ -4,52 +4,16 @@
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="380pt" height="27pt"
viewBox="0.00 0.00 380.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="73pt" height="27pt"
viewBox="0.00 0.00 73.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 23)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="86,-19 0,-19 0,0 86,0 86,-19"/>
<text text-anchor="middle" x="43" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">std::exception</text>
</a>
</g>
</g>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="226,-19 122,-19 122,0 226,0 226,-19"/>
<text text-anchor="middle" x="174" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">std::runtime_error</text>
</a>
</g>
</g>
<!-- Node0&#45;&gt;Node1 -->
<g id="edge8_Node000000_Node000001" class="edge">
<title>Node0&#45;&gt;Node1</title>
<g id="a_edge8_Node000000_Node000001"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M96.27,-9.5C104.65,-9.5 113.31,-9.5 121.66,-9.5"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="96.24,-6 86.24,-9.5 96.24,-13 96.24,-6"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcDiagnosticError.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="372,-19 262,-19 262,0 372,0 372,-19"/>
<text text-anchor="middle" x="317" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge9_Node000001_Node000002" class="edge">
<title>Node1&#45;&gt;Node2</title>
<g id="a_edge9_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M236.42,-9.5C244.82,-9.5 253.39,-9.5 261.65,-9.5"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="236.3,-6 226.3,-9.5 236.3,-13 236.3,-6"/>
<g id="a_Node000000"><a xlink:href="structSignalKey.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="65,-19 0,-19 0,0 65,0 65,-19"/>
<text text-anchor="middle" x="32.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">SignalKey</text>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 898 B

+1 -1
View File
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classTreeNode.html" title="Tree node for later use in model/view or other hierarchy consumers." alt="" coords="5,5,88,31"/>
<area shape="rect" id="Node000000" href="$structSignalKeyHasher.html" title=" " alt="" coords="5,5,137,31"/>
</map>
+1 -1
View File
@@ -1 +1 @@
0e692ac66fcc5782f37efa2f3d64c466
9cbeda36cad4be0f515a467c983bc7c5
+5 -5
View File
@@ -4,16 +4,16 @@
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="70pt" height="27pt"
viewBox="0.00 0.00 70.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="107pt" height="27pt"
viewBox="0.00 0.00 107.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 23)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="classTreeNode.html" target="_top" xlink:title="Tree node for later use in model/view or other hierarchy consumers.">
<polygon fill="white" stroke="#666666" points="62,-19 0,-19 0,0 62,0 62,-19"/>
<text text-anchor="middle" x="31" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">TreeNode</text>
<g id="a_Node000000"><a xlink:href="structSignalKeyHasher.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="99,-19 0,-19 0,0 99,0 99,-19"/>
<text text-anchor="middle" x="49.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">SignalKeyHasher</text>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 959 B

After

Width:  |  Height:  |  Size: 912 B

+5 -1
View File
@@ -1,3 +1,7 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classTypeFactory.html" title="Registry&#45;based factory for creating objects by runtime identifier." alt="" coords="5,5,171,45"/>
<area shape="rect" id="Node000000" title=" " alt="" coords="5,5,120,31"/>
<area shape="rect" id="Node000001" title=" " alt="" coords="168,5,307,31"/>
<area shape="poly" id="edge8_Node000000_Node000001" title=" " alt="" coords="134,15,168,15,168,21,134,21"/>
<area shape="rect" id="Node000002" href="$classDbcDiagnosticError.html" title=" " alt="" coords="355,5,501,31"/>
<area shape="poly" id="edge9_Node000001_Node000002" title=" " alt="" coords="321,15,354,15,354,21,321,21"/>
</map>
+1 -1
View File
@@ -1 +1 @@
fd991ac56e8b35f6def7a3942058b044
fcc3a46e0f291589c12d6b87f268a06f
+42 -7
View File
@@ -4,17 +4,52 @@
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="132pt" height="38pt"
viewBox="0.00 0.00 132.00 38.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 34)">
<svg width="380pt" height="27pt"
viewBox="0.00 0.00 380.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 23)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="classTypeFactory.html" target="_top" xlink:title="Registry&#45;based factory for creating objects by runtime identifier.">
<polygon fill="white" stroke="#666666" points="124,-30 0,-30 0,0 124,0 124,-30"/>
<text text-anchor="start" x="8" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory&lt; ClassId,</text>
<text text-anchor="middle" x="62" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00"> BaseClass, Args &gt;</text>
<g id="a_Node000000"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="86,-19 0,-19 0,0 86,0 86,-19"/>
<text text-anchor="middle" x="43" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">std::exception</text>
</a>
</g>
</g>
<!-- Node1 -->
<g id="Node000001" class="node">
<title>Node1</title>
<g id="a_Node000001"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="226,-19 122,-19 122,0 226,0 226,-19"/>
<text text-anchor="middle" x="174" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">std::runtime_error</text>
</a>
</g>
</g>
<!-- Node0&#45;&gt;Node1 -->
<g id="edge8_Node000000_Node000001" class="edge">
<title>Node0&#45;&gt;Node1</title>
<g id="a_edge8_Node000000_Node000001"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M96.27,-9.5C104.65,-9.5 113.31,-9.5 121.66,-9.5"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="96.24,-6 86.24,-9.5 96.24,-13 96.24,-6"/>
</a>
</g>
</g>
<!-- Node2 -->
<g id="Node000002" class="node">
<title>Node2</title>
<g id="a_Node000002"><a xlink:href="classDbcDiagnosticError.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="372,-19 262,-19 262,0 372,0 372,-19"/>
<text text-anchor="middle" x="317" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">DbcDiagnosticError</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge9_Node000001_Node000002" class="edge">
<title>Node1&#45;&gt;Node2</title>
<g id="a_edge9_Node000001_Node000002"><a xlink:title=" ">
<path fill="none" stroke="#63b8ff" d="M236.42,-9.5C244.82,-9.5 253.39,-9.5 261.65,-9.5"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="236.3,-6 226.3,-9.5 236.3,-13 236.3,-6"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

+1 -1
View File
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classTypeFactory.html" title=" " alt="" coords="5,5,191,45"/>
<area shape="rect" id="Node000000" href="$classTreeNode.html" title="Tree node for later use in model/view or other hierarchy consumers." alt="" coords="5,5,88,31"/>
</map>
+1 -1
View File
@@ -1 +1 @@
2e92ed9cb6b5a27ab688cfd97eafecca
0e692ac66fcc5782f37efa2f3d64c466
+6 -7
View File
@@ -4,17 +4,16 @@
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="147pt" height="38pt"
viewBox="0.00 0.00 147.00 38.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 34)">
<svg width="70pt" height="27pt"
viewBox="0.00 0.00 70.00 27.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 23)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="classTypeFactory.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="139,-30 0,-30 0,0 139,0 139,-30"/>
<text text-anchor="start" x="8" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory&lt; std::string,</text>
<text text-anchor="middle" x="69.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00"> DbcStatementHandler &gt;</text>
<g id="a_Node000000"><a xlink:href="classTreeNode.html" target="_top" xlink:title="Tree node for later use in model/view or other hierarchy consumers.">
<polygon fill="white" stroke="#666666" points="62,-19 0,-19 0,0 62,0 62,-19"/>
<text text-anchor="middle" x="31" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">TreeNode</text>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 959 B

+3
View File
@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classTypeFactory.html" title="Registry&#45;based factory for creating objects by runtime identifier." alt="" coords="5,5,171,45"/>
</map>
+1
View File
@@ -0,0 +1 @@
fd991ac56e8b35f6def7a3942058b044
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="132pt" height="38pt"
viewBox="0.00 0.00 132.00 38.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 34)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="classTypeFactory.html" target="_top" xlink:title="Registry&#45;based factory for creating objects by runtime identifier.">
<polygon fill="white" stroke="#666666" points="124,-30 0,-30 0,0 124,0 124,-30"/>
<text text-anchor="start" x="8" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory&lt; ClassId,</text>
<text text-anchor="middle" x="62" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00"> BaseClass, Args &gt;</text>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+3
View File
@@ -0,0 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
<area shape="rect" id="Node000000" href="$classTypeFactory.html" title=" " alt="" coords="5,5,191,45"/>
</map>
+1
View File
@@ -0,0 +1 @@
2e92ed9cb6b5a27ab688cfd97eafecca
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: Graphical Class Hierarchy Pages: 1 -->
<svg width="147pt" height="38pt"
viewBox="0.00 0.00 147.00 38.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 34)">
<title>Graphical Class Hierarchy</title>
<!-- Node0 -->
<g id="Node000000" class="node">
<title>Node0</title>
<g id="a_Node000000"><a xlink:href="classTypeFactory.html" target="_top" xlink:title=" ">
<polygon fill="white" stroke="#666666" points="139,-30 0,-30 0,0 139,0 139,-30"/>
<text text-anchor="start" x="8" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory&lt; std::string,</text>
<text text-anchor="middle" x="69.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00"> DbcStatementHandler &gt;</text>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+6 -4
View File
@@ -119,10 +119,12 @@ $(document).ready(function(){initNavTree('hierarchy.html',''); initResizable();
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_20.svg" width="330" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_21.svg" width="127" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_22.svg" width="98" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_23.svg" width="507" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_24.svg" width="94" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_25.svg" width="176" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_26.svg" width="196" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_23.svg" width="98" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_24.svg" width="143" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_25.svg" width="507" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_26.svg" width="94" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_27.svg" width="176" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
<tr><td><iframe scrolling="no" frameborder="0" src="inherit_graph_28.svg" width="196" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
+89 -65
View File
@@ -175,7 +175,7 @@ Why the Runtime Decode Layer Exists</h1>
</ul>
<p>Because of that, the design uses a dedicated runtime-ready structure:</p>
<ul>
<li><code><a class="el" href="structDecodeDatabase.html" title="Runtime decode database with fast lookup by CAN ID.">DecodeDatabase</a></code></li>
<li><code><a class="el" href="classDecodeDatabase.html" title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...">DecodeDatabase</a></code></li>
<li><code><a class="el" href="structDecodeFrame.html" title="Runtime-ready frame definition.">DecodeFrame</a></code></li>
<li><code><a class="el" href="structDecodeSignal.html" title="Runtime-ready signal definition.">DecodeSignal</a></code></li>
</ul>
@@ -359,7 +359,7 @@ Purpose</h1>
<hr />
<h1><a class="anchor" id="autotoc_md55"></a>
&lt;tt&gt;FrameKey&lt;/tt&gt;</h1>
<p>Fast lookup key for runtime frame matching.</p>
<p>Stable identifier for runtime frame matching and application state.</p>
<p>Fields:</p>
<ul>
<li><code>canId</code></li>
@@ -369,17 +369,15 @@ Purpose</h1>
<hr />
<h1><a class="anchor" id="autotoc_md57"></a>
&lt;tt&gt;DecodeDatabase&lt;/tt&gt;</h1>
<p>Top-level runtime decode container.</p>
<p>Fields:</p>
<p>Immutable runtime snapshot with a private frame index. Build it with <code>DbcDecodeBuilder::Build(parsed)</code> or construct it from <code>std::vector&lt;<a class="el" href="structDecodeFrame.html" title="Runtime-ready frame definition.">DecodeFrame</a>&gt;</code>. Construction rejects duplicate frame keys and duplicate signal names within a frame with <code>std::invalid_argument</code>, including manually supplied metadata.</p>
<ul>
<li><code>frames</code></li>
<li><code>frameIndexByKey</code></li>
<li><code>GetFrames()</code> returns a borrowed <code>const std::vector&lt;<a class="el" href="structDecodeFrame.html" title="Runtime-ready frame definition.">DecodeFrame</a>&gt;&amp;</code>.</li>
<li><code>FindFrame(FrameKey)</code> returns <code>std::shared_ptr&lt;const <a class="el" href="structDecodeFrame.html" title="Runtime-ready frame definition.">DecodeFrame</a>&gt;</code>.</li>
<li><code>FindSignal(SignalKey)</code> returns <code>std::shared_ptr&lt;const <a class="el" href="structDecodeSignal.html" title="Runtime-ready signal definition.">DecodeSignal</a>&gt;</code>.</li>
<li>Missing definitions return an empty handle.</li>
<li>Copying a database shares its snapshot; replacing it installs another snapshot.</li>
</ul>
<p>Conceptually:</p>
<div class="fragment"><div class="line">DecodeDatabase</div>
<div class="line"> ├── vector&lt;DecodeFrame&gt;</div>
<div class="line"> └── unordered_map&lt;FrameKey, index&gt;</div>
</div><!-- fragment --><p>This gives the decoder fast access to a frame definition using CAN ID and frame type.</p>
<p>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.</p>
<hr />
<h1><a class="anchor" id="autotoc_md59"></a>
Decoder Layer</h1>
@@ -405,6 +403,7 @@ Decoder Layer</h1>
<p>Fields:</p>
<ul>
<li><code>definition</code></li>
<li><code>key</code></li>
<li><code>rawValue</code></li>
<li><code>physicalValue</code></li>
<li><code>valid</code></li>
@@ -429,13 +428,44 @@ Raw value representation and precision</h2>
<p>Fields:</p>
<ul>
<li><code>definition</code></li>
<li><code>key</code></li>
<li><code>signals</code></li>
<li><code>valid</code></li>
</ul>
<p><code>valid</code> means a matching frame definition was found. Check each signal's <code>valid</code> separately: insufficient payload data can leave individual signals invalid even when the frame is valid. An unknown frame returns <code>valid == false</code>.</p>
<p>The frame and signal <code>definition</code> pointers refer into <code><a class="el" href="structDecodeDatabase.html" title="Runtime decode database with fast lookup by CAN ID.">DecodeDatabase</a></code>. 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.</p>
<p>The decoder applies factor and offset; it does not clamp physical values to the declared minimum and maximum.</p>
<h2><a class="anchor" id="autotoc_md67"></a>
Definition ownership and reload</h2>
<p><code><a class="el" href="structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d">DecodedFrameValue::definition</a></code> and <code><a class="el" href="structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2">DecodedSignalValue::definition</a></code> are owning <code>std::shared_ptr&lt;const ...&gt;</code> 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.</p>
<p>Reload by assigning a newly built database. Stored results continue to describe the old DBC, including its units, scaling, comments, and <code>VAL_</code> 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.</p>
<p><code>GetFrames()</code> is a borrowed view. References, iterators, and raw pointers obtained from it or from a handle's <code>.get()</code> do not retain ownership. Keep an owning handle or an unchanged database copy while using them. Do not retain mutable aliases into a vector moved into the database constructor. The raw string pointer from <code>GetValueDescription()</code> follows the same rule: keep the signal definition handle alive while using the string.</p>
<p>Parsed <code><a class="el" href="structDbcDatabase.html" title="Parsed DBC content stored in a simple internal form.">DbcDatabase</a></code>/<code><a class="el" href="structFrameInfo.html" title="Describes one CAN frame from a DBC file.">FrameInfo</a></code>/<code><a class="el" href="structSignalInfo.html" title="Describes one signal inside a DBC frame.">SignalInfo</a></code> 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.</p>
<h2><a class="anchor" id="autotoc_md68"></a>
Stable frame and signal identifiers</h2>
<p><code><a class="el" href="structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73">DecodedFrameValue::key</a></code> is a <code><a class="el" href="structFrameKey.html" title="Stable frame identifier: normalized CAN ID and frame type.">FrameKey</a></code> (normalized <code>canId</code>, <code>isExtended</code>), also available through <code>DecodeFrame::GetKey()</code>. <code><a class="el" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue::key</a></code> is a <code><a class="el" href="structSignalKey.html">SignalKey</a></code> (frame key, exact case-sensitive signal name). Both are value types with equality and hashers (<code><a class="el" href="structFrameKeyHasher.html" title="Hasher for frame key.">FrameKeyHasher</a></code>, <code><a class="el" href="structSignalKeyHasher.html">SignalKeyHasher</a></code>) for application maps and saved selections. Construct the same keys from parsed metadata when needed; do not use addresses or vector positions as identifiers.</p>
<p>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 <code>valid</code>/the definition handle to distinguish a matched result; default keys alone do not indicate successful decoding.</p>
<div class="fragment"><div class="line"><a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parsed);</div>
<div class="line"><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> stored = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(runtime, rawFrame);</div>
<div class="line"><span class="keywordflow">if</span> (stored.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &amp;&amp; !stored.signals.empty()) {</div>
<div class="line"> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> saved = stored.signals.front();</div>
<div class="line"> <a class="code hl_struct" href="structSignalKey.html">SignalKey</a> selection = saved.<a class="code hl_variable" href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">key</a>;</div>
<div class="line"> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(parser.ParseFile(<span class="stringliteral">&quot;updated.dbc&quot;</span>));</div>
<div class="line"> std::shared_ptr&lt;const DecodeSignal&gt; current = runtime.FindSignal(selection);</div>
<div class="line"> <span class="comment">// saved.definition retains old metadata; current holds new metadata or is empty.</span></div>
<div class="line">}</div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00074">dbc_decoder.h:74</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00021">dbc_decoder.cpp:21</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00087">decode_database.h:87</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00062">dbc_decoder.h:62</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00066">dbc_decoder.h:66</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00043">dbc_decoder.h:43</a></div></div>
<div class="ttc" id="astructDecodedSignalValue_html_a33df0fcd92b23b3e08539906fc6b4c4a"><div class="ttname"><a href="structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a">DecodedSignalValue::key</a></div><div class="ttdeci">SignalKey key</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00045">dbc_decoder.h:45</a></div></div>
<div class="ttc" id="astructSignalKey_html"><div class="ttname"><a href="structSignalKey.html">SignalKey</a></div><div class="ttdef"><b>Definition</b> <a href="definition__key_8h_source.html#l00042">definition_key.h:42</a></div></div>
</div><!-- fragment --><p><b>API migration:</b> replace reads of <code>runtime.frames</code> with <code>runtime.GetFrames()</code>. To edit runtime definitions, prepare a vector and construct a new database; <code>frameIndexByKey</code> is now private and built automatically. <code><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c" title="Find frame definition by CAN ID.">DbcDecoder::FindFrame</a></code> and result <code>definition</code> fields now use owning handles instead of raw pointers; <code>definition-&gt;name</code>, boolean/null checks, and existing decode calls remain usable. Use <code>.get()</code> only for temporary raw-pointer interoperation with an owner alive.</p>
<hr />
<h1><a class="anchor" id="autotoc_md68"></a>
<h1><a class="anchor" id="autotoc_md70"></a>
&lt;tt&gt;DbcDecoder&lt;/tt&gt;</h1>
<p>Main runtime decoder class.</p>
<p>Responsibilities:</p>
@@ -452,7 +482,7 @@ Raw value representation and precision</h2>
<li><code>Decode(...)</code></li>
</ul>
<hr />
<h1><a class="anchor" id="autotoc_md70"></a>
<h1><a class="anchor" id="autotoc_md72"></a>
Parser Support</h1>
<p>The current parser supports the following DBC elements:</p>
<ul>
@@ -463,7 +493,7 @@ Parser Support</h1>
<li><code>VAL_</code> signal value descriptions</li>
<li>basic <code>M</code> / <code>mN</code> multiplexing</li>
</ul>
<h2><a class="anchor" id="autotoc_md71"></a>
<h2><a class="anchor" id="autotoc_md73"></a>
Structured diagnostics</h2>
<p><code>ParseFileWithDiagnostics(path)</code> returns <code><a class="el" href="structDbcParseResult.html">DbcParseResult</a></code> containing <code>database</code> and <code>diagnostics</code>. Each <code><a class="el" href="structDbcDiagnostic.html">DbcDiagnostic</a></code> has <code>severity</code>, <code>code</code>, <code>filePath</code>, <code>lineNumber</code>, and <code>message</code>. Paths preserve the caller's supplied spelling. Lines are one-based physical lines, including blank lines; file-level errors use zero.</p>
<div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
@@ -473,16 +503,13 @@ Structured diagnostics</h2>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; diagnostic.message &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">if</span> (!result.HasErrors()) {</div>
<div class="line"> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(result.database);</div>
<div class="line"> <span class="keyword">const</span> <a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> runtime = <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a>().<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(result.database);</div>
<div class="line"> <span class="comment">// Inspect warnings before relying on decoding results.</span></div>
<div class="line">}</div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
<div class="ttc" id="aclassDbcParser_html_a0e915ce79c2e3d4c95a5aaf2bf0409bc"><div class="ttname"><a href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">DbcParser::ParseFileWithDiagnostics</a></div><div class="ttdeci">DbcParseResult ParseFileWithDiagnostics(const std::string &amp;filePath) const</div><div class="ttdoc">Parse with warnings and a structured first error instead of throwing.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00044">dbc_parser.cpp:44</a></div></div>
<div class="ttc" id="astructDbcDiagnostic_html"><div class="ttname"><a href="structDbcDiagnostic.html">DbcDiagnostic</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__diagnostic_8h_source.html#l00025">dbc_diagnostic.h:25</a></div></div>
<div class="ttc" id="astructDbcParseResult_html"><div class="ttname"><a href="structDbcParseResult.html">DbcParseResult</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__diagnostic_8h_source.html#l00033">dbc_diagnostic.h:33</a></div></div>
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00109">decode_database.h:109</a></div></div>
</div><!-- fragment --><table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Severity / code </th><th class="markdownTableHeadNone">Meaning </th></tr>
@@ -506,9 +533,9 @@ Structured diagnostics</h2>
<p>Common <code>VERSION</code>, <code>NS_</code>, <code>BS_</code>, and <code>BU_</code> headers produce no diagnostics. Single-token symbols inside the <code>NS_</code> 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 (<code>CM_</code>, <code>CM_ BU_</code>, <code>CM_ EV_</code>) are ignored by the comment handler; comments only attach to already parsed frames/signals. Supported statements currently require one physical line.</p>
<p><code>ParseFile(path)</code> remains compatible: it returns the database, discards warnings, and throws <code>std::runtime_error</code> on the first error with the existing <code>path:line:</code> format. Use <code>ParseFileWithDiagnostics</code> to see skipped syntax. Resource failures such as allocation errors may still throw.</p>
<hr />
<h1><a class="anchor" id="autotoc_md73"></a>
<h1><a class="anchor" id="autotoc_md75"></a>
Supported DBC Syntax</h1>
<h1><a class="anchor" id="autotoc_md74"></a>
<h1><a class="anchor" id="autotoc_md76"></a>
Frame definition</h1>
<p>Example:</p>
<div class="fragment"><div class="line">BO_ 256 EngineData: 8 EEC1</div>
@@ -520,7 +547,7 @@ Frame definition</h1>
<li>transmitter ECU</li>
</ul>
<hr />
<h2><a class="anchor" id="autotoc_md76"></a>
<h2><a class="anchor" id="autotoc_md78"></a>
Frame validation and parse errors</h2>
<p><code>BO_</code> definitions require a decimal CAN ID, a nonempty single-token frame name, a colon, a decimal payload length, and a transmitter token. Spaces or tabs may separate fields, and whitespace before the colon is accepted. Additional trailing fields are rejected.</p>
<p>Numeric fields must contain decimal digits only; signs, hexadecimal notation, fractional values, suffixes, and overflow are rejected. CAN IDs may contain the 29-bit identifier plus the optional DBC extended flag (bit 31). Bits 29 and 30 are rejected rather than silently discarded. For compatibility, unflagged IDs above <code>0x7FF</code> are still treated as extended.</p>
@@ -529,7 +556,7 @@ Frame validation and parse errors</h2>
<div class="fragment"><div class="line">example.dbc:3: Invalid CAN ID: invalid</div>
</div><!-- fragment --><p>Frame and signal definitions are validated as described here; comprehensive 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.</p>
<hr />
<h1><a class="anchor" id="autotoc_md78"></a>
<h1><a class="anchor" id="autotoc_md80"></a>
Signal definition</h1>
<p>Example:</p>
<div class="fragment"><div class="line">SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] &quot;rpm&quot; ECU1,ECU2</div>
@@ -548,7 +575,7 @@ Signal definition</h1>
<li>receivers</li>
</ul>
<hr />
<h2><a class="anchor" id="autotoc_md80"></a>
<h2><a class="anchor" id="autotoc_md82"></a>
Signal validation and parse errors</h2>
<p><code>SG_</code> statements are matched completely. Signal names must be nonempty and contain no whitespace. Spaces and tabs are accepted between syntax elements; byte order and signedness remain adjacent (<code>@0+</code>, <code>@0-</code>, <code>@1+</code>, or <code>@1-</code>). A quoted unit (which may be empty) and a nonempty comma-separated receiver list are required. Unexpected trailing fields are rejected.</p>
<p>Start bits must be unsigned decimal integers fitting <code>uint32_t</code>; lengths must be within <code>1..64</code> bits. Signs, fractional values, numeric suffixes, and overflow are rejected for these fields. Every signal bit must fit within the frame's declared payload length, using Intel increasing bit positions or Motorola sawtooth traversal. This uses the stored payload length without introducing an additional CAN or CAN FD payload limit.</p>
@@ -556,7 +583,7 @@ Signal validation and parse errors</h2>
<p>Basic multiplexing markers <code>M</code> and <code>mN</code> are supported as described below. Overlapping signals are rejected unless their branch values differ. Duplicate frame keys and signal names within a frame are rejected.</p>
<p>Invalid signal definitions stop parsing with <code>path:line: description</code>, including when the signal exceeds the declared payload length.</p>
<hr />
<h1><a class="anchor" id="autotoc_md82"></a>
<h1><a class="anchor" id="autotoc_md84"></a>
Basic multiplexing</h1>
<div class="fragment"><div class="line">BO_ 256 Status: 3 ECU</div>
<div class="line"> SG_ Mode M : 0|8@1+ (1,0) [0|255] &quot;&quot; ECU</div>
@@ -583,7 +610,7 @@ Basic multiplexing</h1>
</table>
<p>All statuses except <code>Valid</code> have <code>valid == false</code>; their numeric fields contain no decoded data and <code>GetValueDescription()</code> returns nullptr. Check <code>status</code> to distinguish inactive branches from errors. Consumers constructing runtime metadata manually must obey the same non-overlap rules as the parser. Extended and nested multiplexing are outside this stage and are explicitly rejected, rather than silently decoded as unconditional signals.</p>
<hr />
<h1><a class="anchor" id="autotoc_md84"></a>
<h1><a class="anchor" id="autotoc_md86"></a>
Comments</h1>
<p>Frame comment example:</p>
<div class="fragment"><div class="line">CM_ BO_ 256 &quot;Engine data frame&quot;;</div>
@@ -595,7 +622,7 @@ Comments</h1>
<li><code><a class="el" href="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5">SignalInfo::comment</a></code></li>
</ul>
<hr />
<h1><a class="anchor" id="autotoc_md86"></a>
<h1><a class="anchor" id="autotoc_md88"></a>
CAN ID Normalization</h1>
<p>The parser normalizes frame identifiers.</p>
<p>Common DBC behavior:</p>
@@ -610,7 +637,7 @@ CAN ID Normalization</h1>
</ul>
<p>This is important both for correct lookup and for future interoperability with live CAN APIs.</p>
<hr />
<h1><a class="anchor" id="autotoc_md88"></a>
<h1><a class="anchor" id="autotoc_md90"></a>
PGN Extraction</h1>
<p>PGN is derived only when the frame is treated as extended.</p>
<p>The current logic is simplified J1939 extraction:</p>
@@ -621,7 +648,7 @@ PGN Extraction</h1>
</ul>
<p>This is enough for a practical start but should not be treated as full J1939 validation.</p>
<hr />
<h1><a class="anchor" id="autotoc_md90"></a>
<h1><a class="anchor" id="autotoc_md92"></a>
Decode Flow</h1>
<p>Typical runtime decode flow:</p>
<div class="fragment"><div class="line">RawCanFrame</div>
@@ -636,7 +663,7 @@ Decode Flow</h1>
<div class="line"> ↓</div>
<div class="line">DecodedFrameValue</div>
</div><!-- fragment --><hr />
<h1><a class="anchor" id="autotoc_md92"></a>
<h1><a class="anchor" id="autotoc_md94"></a>
Intel and Motorola Extraction</h1>
<p>The decoder currently has separate extraction paths:</p>
<ul>
@@ -647,7 +674,7 @@ Intel and Motorola Extraction</h1>
<p>Intel and Motorola require different bit extraction logic.</p>
<p>This is one of the main reasons why the runtime decode layer should be explicit and prepared in advance.</p>
<hr />
<h1><a class="anchor" id="autotoc_md94"></a>
<h1><a class="anchor" id="autotoc_md96"></a>
Example Usage</h1>
<p>Include the public headers from the <code>core/</code> include directory supplied by <code>core/core.pri</code>:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>&quot;</span></div>
@@ -658,23 +685,23 @@ Example Usage</h1>
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
<div class="ttc" id="adbc__tree__builder_8h_html"><div class="ttname"><a href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md95"></a>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md97"></a>
Parse DBC</h2>
<div class="fragment"><div class="line"><a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
<div class="line"><a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> database = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(<span class="stringliteral">&quot;example.dbc&quot;</span>);</div>
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &amp;filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00031">dbc_parser.cpp:31</a></div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md96"></a>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md98"></a>
Build UI tree</h2>
<div class="fragment"><div class="line"><a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a> treeBuilder;</div>
<div class="line">std::unique_ptr&lt;TreeNode&gt; root = treeBuilder.<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(database);</div>
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr&lt; TreeNode &gt; Build(const DbcDatabase &amp;database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md97"></a>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md99"></a>
Build runtime decode database</h2>
<div class="fragment"><div class="line"><a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> decodeBuilder;</div>
<div class="line"><a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md98"></a>
<div class="line"><a class="code hl_class" href="classDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md100"></a>
Decode a raw frame</h2>
<div class="fragment"><div class="line"><a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> rawFrame;</div>
<div class="line">rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = 256; <span class="comment">// EngineData from the DBC example above</span></div>
@@ -683,15 +710,12 @@ Decode a raw frame</h2>
<div class="line"> </div>
<div class="line"><a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> decoder;</div>
<div class="line"><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> decoded = decoder.<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(decodeDatabase, rawFrame);</div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00072">dbc_decoder.h:72</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &amp;database, const RawCanFrame &amp;frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00061">dbc_decoder.h:61</a></div></div>
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector&lt; std::uint8_t &gt; data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
</div><!-- fragment --><hr />
<h1><a class="anchor" id="autotoc_md100"></a>
<h1><a class="anchor" id="autotoc_md102"></a>
Unified Decode Strategy</h1>
<p>A key design goal is that the same decoder should work for both:</p>
<ul>
@@ -699,7 +723,7 @@ Unified Decode Strategy</h1>
<li>trace replay frames</li>
</ul>
<p>That means this architecture supports:</p>
<h2><a class="anchor" id="autotoc_md101"></a>
<h2><a class="anchor" id="autotoc_md103"></a>
live path</h2>
<div class="fragment"><div class="line">live CAN input</div>
<div class="line"> ↓</div>
@@ -708,7 +732,7 @@ live path</h2>
<div class="line">DbcDecoder</div>
<div class="line"> ↓</div>
<div class="line">decoded signal values</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md102"></a>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md104"></a>
trace path</h2>
<div class="fragment"><div class="line">trace reader</div>
<div class="line"> ↓</div>
@@ -719,7 +743,7 @@ trace path</h2>
<div class="line">decoded signal values</div>
</div><!-- fragment --><p>This avoids duplicating decode logic in two separate parts of the application.</p>
<hr />
<h1><a class="anchor" id="autotoc_md104"></a>
<h1><a class="anchor" id="autotoc_md106"></a>
Intended Use in FrameTap</h1>
<p>This module is meant to support at least the following FrameTap workflows:</p>
<ul>
@@ -745,7 +769,7 @@ Intended Use in FrameTap</h1>
<div class="line"> - live frames</div>
<div class="line"> - trace replay</div>
</div><!-- fragment --><hr />
<h1><a class="anchor" id="autotoc_md106"></a>
<h1><a class="anchor" id="autotoc_md108"></a>
Why the Tree Is Not Enough</h1>
<p>The tree exists for browsing.</p>
<p>However, runtime decode should not rely on tree traversal because that would introduce unnecessary coupling and inefficiency.</p>
@@ -755,9 +779,9 @@ Why the Tree Is Not Enough</h1>
<li>minimal interpretation at decode time</li>
<li>direct signal definitions already prepared</li>
</ul>
<p>That is why <code><a class="el" href="structDecodeDatabase.html" title="Runtime decode database with fast lookup by CAN ID.">DecodeDatabase</a></code> is a separate layer.</p>
<p>That is why <code><a class="el" href="classDecodeDatabase.html" title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...">DecodeDatabase</a></code> is a separate layer.</p>
<hr />
<h1><a class="anchor" id="autotoc_md108"></a>
<h1><a class="anchor" id="autotoc_md110"></a>
Statement Handler Factory</h1>
<p><code><a class="el" href="classDbcParser.html" title="Minimal DBC parser.">DbcParser</a></code> owns file reading, trimming, line numbers, and error reporting. Each <code>ParseFile()</code> call creates a fresh <code><a class="el" href="structDbcParseContext.html">DbcParseContext</a></code> and a <code><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></code>. The context contains the parsed database and current frame; handlers receive it by reference and retain no parsing state.</p>
<p>The dispatcher uses <code><a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a>&lt;std::string, <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>&gt;</code> to create registered handlers once per parsing session, then reuses them for all matching lines:</p>
@@ -778,7 +802,7 @@ Statement Handler Factory</h1>
</div><!-- fragment --><p>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 <code>BO_TX_BU_</code> cannot match <code>BO_</code>. Unregistered keywords produce <code>UnsupportedStatement</code> warnings through <code>ParseFileWithDiagnostics</code>. <code>SG_</code> and <code>CM_</code> accept spaces and tabs after their keywords.</p>
<p>This factory handles statements inside DBC files. A separate format-level factory can be introduced when another file format is implemented. The decoder and database builders remain independent of statement dispatch.</p>
<hr />
<h1><a class="anchor" id="autotoc_md110"></a>
<h1><a class="anchor" id="autotoc_md112"></a>
Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)</h1>
<p>Signal descriptions attach text to exact raw integer values:</p>
<div class="fragment"><div class="line">BO_ 256 Status: 8 ECU</div>
@@ -813,7 +837,7 @@ if (const std::string *description = value.GetValueDescription()) {
It returns &lt;tt&gt;nullptr&lt;/tt&gt; for an invalid decode or an unknown value; numeric decoding
and &lt;tt&gt;physicalValue&lt;/tt&gt; 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
&lt;tt&gt;FindValueDescription(signal.valueDescriptions, rawValue)&lt;/tt&gt;, where &lt;tt&gt;rawValue&lt;/tt&gt; is
@@ -828,7 +852,7 @@ are outside this implementation; the optional Qt adapter exposes signal mappings
&lt;hr&gt;
@section autotoc_md112 Current Limitations
@section autotoc_md114 Current Limitations
This is still a minimal implementation.
@@ -862,11 +886,11 @@ byte boundaries, and 64-bit values.
&lt;hr&gt;
@section autotoc_md114 Recommended Next Steps
@section autotoc_md116 Recommended Next Steps
A practical development order would be:
@subsection autotoc_md115 Stage 1 - already implemented
@subsection autotoc_md117 Stage 1 - already implemented
- &lt;tt&gt;BO_&lt;/tt&gt;
- &lt;tt&gt;SG_&lt;/tt&gt;
@@ -881,13 +905,13 @@ A practical development order would be:
- runtime decode database
- runtime decoder
@subsection autotoc_md116 Stage 2
@subsection autotoc_md118 Stage 2
Recommended additions:
- selective decoding of only chosen signals
@subsection autotoc_md117 Stage 3
@subsection autotoc_md119 Stage 3
Recommended additions:
@@ -897,7 +921,7 @@ Recommended additions:
- CSV export of decoded traces
- optimized filtering and signal selection
@subsection autotoc_md118 Stage 4
@subsection autotoc_md120 Stage 4
Advanced functionality:
@@ -908,7 +932,7 @@ Advanced functionality:
&lt;hr&gt;
@section autotoc_md120 Build Integration
@section autotoc_md122 Build Integration
The repository supplies qmake projects. A C++17 compiler is required; the root
build also requires Qt Core and Qt Test development packages. Other build
@@ -939,7 +963,7 @@ source lists live in &lt;tt&gt;tests/parser_tests.pri&lt;/tt&gt; and &lt;tt&gt;t
When building a consumer separately, pass
&lt;tt&gt;DBC_CORE_BUILD_DIR=/absolute/path/to/build/core&lt;/tt&gt; to qmake.
@subsection autotoc_md121 Build core without Qt libraries
@subsection autotoc_md123 Build core without Qt libraries
From the repository root:
@@ -952,7 +976,7 @@ make -j
qmake is still the build tool; this target does not link Qt libraries.
@subsection autotoc_md122 Optional Qt model adapter
@subsection autotoc_md124 Optional Qt model adapter
The adapter and its &lt;tt&gt;QAbstractItemModelTester&lt;/tt&gt; suite use Qt 6.8.2.
The adapter itself links only Qt Core.
@@ -1073,7 +1097,7 @@ Valid items are enabled and selectable, with no editing support.
<p></code></p>
<p><code>Each value-description entry contains <code>value</code> (qlonglong for negative keys, qulonglong for nonnegative keys) and <code>description</code> (QString). This preserves the full signed/unsigned 64-bit range without converting through double. An unmapped signal returns an empty list. Data comes from <code><a class="el" href="structSignalInfo.html#a43f47d0433d0cc39076bd7278b46af9c">SignalInfo::valueDescriptions</a></code>. Unsupported roles return invalid QVariant.</code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md123"></a>
<h2><a class="anchor" id="autotoc_md125"></a>
Standalone tree tests without Qt</h2>
<p><code></code></p>
<p><code>From the repository root, use only a C++17 compiler:</code></p>
@@ -1082,7 +1106,7 @@ Standalone tree tests without Qt</h2>
<div class="line">/tmp/dbc_tree_node_test</div>
</div><!-- fragment --><p></code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md124"></a>
<h2><a class="anchor" id="autotoc_md126"></a>
Build and run the demo</h2>
<p><code></code></p>
<p><code>After building core, run these commands from the repository root:</code></p>
@@ -1094,7 +1118,7 @@ Build and run the demo</h2>
</div><!-- fragment --><p></code></p>
<p><code>The demo prints the parsed tree and decodes eight zero bytes using the first frame definition. Replace that sample payload in <code><a class="el" href="examples_2main_8cpp.html" title="Created: 2026-03-13 Author: Deeaitch (Dim. Himro)">examples/main.cpp</a></code> to feed live CAN data or trace records.</code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md125"></a>
<h2><a class="anchor" id="autotoc_md127"></a>
Generate API documentation</h2>
<p><code></code></p>
<p><code>With Doxygen installed, run from the repository root:</code></p>
@@ -1104,17 +1128,17 @@ Generate API documentation</h2>
<p><code></p><hr />
<p></code></p>
<p><code></code></p>
<h1><a class="anchor" id="autotoc_md127"></a>
<h1><a class="anchor" id="autotoc_md129"></a>
Regression tests</h1>
<p><code></code></p>
<p><code>See <a class="el" href="md_tests_2README.html">tests/README.md</a> for QtTest build and execution commands. Tests cover frame validation and error locations, Intel and Motorola extraction, signal syntax and payload bounds, <code>VAL_</code> 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.</code></p>
<p><code></code></p>
<h1><a class="anchor" id="autotoc_md128"></a>
<h1><a class="anchor" id="autotoc_md130"></a>
Measuring code coverage</h1>
<p><code></code></p>
<p><code>Coverage instrumentation is separate from the QtTest suite named <code>CoverageTest</code>: that suite runs extra regression checks, but coverage counters require a specially instrumented build. Use a separate build directory for each coverage tool.</code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md129"></a>
<h2><a class="anchor" id="autotoc_md131"></a>
GCC, gcov, and LCOV on Debian/Ubuntu</h2>
<p><code></code></p>
<p><code>Install the build and report tools:</code></p>
@@ -1168,7 +1192,7 @@ GCC, gcov, and LCOV on Debian/Ubuntu</h2>
<p><code>After adding direct comment-handler and ambiguous <code>VAL_</code> reference tests, the same configuration measured 98.4% line coverage (728/740) and 71.4% branch coverage (841/1178).</code></p>
<p><code>See <a href="https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html">GCC instrumentation options</a> and the <a href="https://github.com/linux-test-project/lcov">LCOV project documentation</a>.</code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md130"></a>
<h2><a class="anchor" id="autotoc_md132"></a>
Configure the GCC coverage build in Qt Creator</h2>
<p><code></code></p>
<p><code></p><ol type="1">
@@ -1184,7 +1208,7 @@ Configure the GCC coverage build in Qt Creator</h2>
</ol>
<p></code></p>
<p><code></code></p>
<h2><a class="anchor" id="autotoc_md131"></a>
<h2><a class="anchor" id="autotoc_md133"></a>
Configure all build variants in Qt Creator</h2>
<p><code></code></p>
<p><code>The local <code>dbc.pro.user</code> stores machine-specific kit IDs and build/run settings. It is ignored by Git (<code>*.user</code>) and should not be committed or copied between machines. Recreate the configurations below through the UI when setting up a new checkout. The <code>Qt4ProjectManager</code> identifiers inside <code>.user</code> are historical Qt Creator setting names; the project still requires Qt 6.8.2.</code></p>
+7 -1
View File
@@ -101,6 +101,9 @@ Unreleased</h1>
<h3><a class="anchor" id="autotoc_md3"></a>
Added</h3>
<ul>
<li>Stable application identifiers: <code><a class="el" href="structFrameKey.html" title="Stable frame identifier: normalized CAN ID and frame type.">FrameKey</a></code> (normalized CAN ID and frame type) and <code><a class="el" href="structSignalKey.html">SignalKey</a></code> (frame key and signal name), with equality and hashers.</li>
<li>Runtime <code>FindSignal</code>, frame <code>GetKey</code>, and keys on decoded frame/signal results.</li>
<li>Reload/lifetime tests for retained frames and independent signals, lookup handles, copies/moves, snapshot release, stable keys, removed/renamed definitions, failed/empty reloads, duplicate keys, and insufficient payloads.</li>
<li><code>ParseFileWithDiagnostics</code> and <code><a class="el" href="structDbcParseResult.html">DbcParseResult</a></code> with severity, stable error code, supplied file path, physical line number, and message for each diagnostic.</li>
<li>Warnings for unregistered statements, including floating-point signal types, attributes, signal type references, environment variables, and vendor extensions.</li>
<li>Quiet common DBC header handlers registered through <a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a>; <code>NS_</code> symbol declarations do not produce unsupported-statement warnings.</li>
@@ -109,6 +112,9 @@ Added</h3>
<h3><a class="anchor" id="autotoc_md4"></a>
Changed</h3>
<ul>
<li><b>API change:</b> <code><a class="el" href="classDecodeDatabase.html" title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...">DecodeDatabase</a></code> is an immutable shared snapshot. Use <code>GetFrames()</code> for reads or construct a new snapshot from a vector; its frame index is private and built automatically, with duplicate-key validation.</li>
<li><b>API change:</b> decoded <code>definition</code> fields and <code><a class="el" href="classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c" title="Find frame definition by CAN ID.">DbcDecoder::FindFrame</a></code> return <code>shared_ptr&lt;const ...&gt;</code> ownership. Stored results retain old definitions across reload/clear/destruction, including separately copied signals and <code>VAL_</code> strings. Decoding shares metadata without per-result definition copies.</li>
<li>Documented borrowed views, owning handles, snapshot retention, identifier scope, reload behavior, application migration, and synchronization requirements.</li>
<li>Kept <code>ParseFile</code> compatible while sharing parsing with the diagnostic API. Parsing stops at the first error and never returns a partial database.</li>
<li>Deferred value-description and multiplexing errors carry structured source locations without extracting them from exception messages.</li>
<li>Documented supported syntax, warning behavior, diagnostic codes, and limitations.</li>
@@ -208,7 +214,7 @@ Added</h3>
<ul>
<li>Initialized the repository with a README and MIT license. (<code>4270459</code>)</li>
<li>Added the DBC parser, frame and signal metadata, a tree representation and builder, a demonstration program, and a qmake project. (<code>2a90b2d</code>)</li>
<li>Added runtime decoding through <code><a class="el" href="classDbcDecodeBuilder.html" title="Converts parsed DBC data into runtime decode database.">DbcDecodeBuilder</a></code>, <code><a class="el" href="structDecodeDatabase.html" title="Runtime decode database with fast lookup by CAN ID.">DecodeDatabase</a></code>, and <code><a class="el" href="classDbcDecoder.html" title="Runtime CAN decoder using prebuilt decode database.">DbcDecoder</a></code>, including CAN-frame lookup, Intel and Motorola extraction, signed and unsigned signals, and factor/offset conversion. Updated parser metadata and the demo to support decoding. (<code>a53a5df</code>)</li>
<li>Added runtime decoding through <code><a class="el" href="classDbcDecodeBuilder.html" title="Converts parsed DBC data into runtime decode database.">DbcDecodeBuilder</a></code>, <code><a class="el" href="classDecodeDatabase.html" title="Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...">DecodeDatabase</a></code>, and <code><a class="el" href="classDbcDecoder.html" title="Runtime CAN decoder using prebuilt decode database.">DbcDecoder</a></code>, including CAN-frame lookup, Intel and Motorola extraction, signed and unsigned signals, and factor/offset conversion. Updated parser metadata and the demo to support decoding. (<code>a53a5df</code>)</li>
</ul>
<h3><a class="anchor" id="autotoc_md22"></a>
Documentation and maintenance</h3>
+12 -8
View File
@@ -93,7 +93,7 @@ $(document).ready(function(){initNavTree('md_tests_2README.html',''); initResiza
<div class="headertitle"><div class="title">QtTest regression tests</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="autotoc_md132"></a> For instrumented builds, LCOV HTML reports, and Qt Creator coverage configuration, see <a href="../README.md#measuring-code-coverage">Measuring code coverage</a>. For the complete IDE build/run configuration set, see <a href="../README.md#configure-all-build-variants-in-qt-creator">Configure all build variants in Qt Creator</a>. The Coverage configuration uses <code>coverage_report.sh</code> after its instrumented build; the script takes the source and build directories as its two arguments.</p>
<div class="textblock"><p><a class="anchor" id="autotoc_md134"></a> For instrumented builds, LCOV HTML reports, and Qt Creator coverage configuration, see <a href="../README.md#measuring-code-coverage">Measuring code coverage</a>. For the complete IDE build/run configuration set, see <a href="../README.md#configure-all-build-variants-in-qt-creator">Configure all build variants in Qt Creator</a>. The Coverage configuration uses <code>coverage_report.sh</code> after its instrumented build; the script takes the source and build directories as its two arguments.</p>
<p>Open the repository's root <code>dbc.pro</code> in Qt Creator. It contains <code>core</code> (a static C++17 library) and <code>tests</code> (the <code>dbc_tests</code> QtTest executable). Core is built first; tests link its archive rather than compiling its implementation again. Qt Core and Qt Test development packages are required for tests only. The optional model tests also link QtGui, which is provided by Qt base development packages. The adapter library itself still links only QtCore.</p>
<p>Build from the repository root with the installed Qt 6.8.2:</p>
<div class="fragment"><div class="line">mkdir build</div>
@@ -101,7 +101,7 @@ $(document).ready(function(){initNavTree('md_tests_2README.html',''); initResiza
<div class="line">qmake6 ../dbc.pro</div>
<div class="line">make -j</div>
<div class="line">make check</div>
</div><!-- fragment --><p>Or run <code>./tests/dbc_tests</code> directly. Parser, decoder, and additional coverage suites run, and the executable returns nonzero when any suite fails. Decoder cases appear as individual QtTest data rows; parser checks are grouped into named test slots. Checks also run in release builds.</p>
</div><!-- fragment --><p>Or run <code>./tests/dbc_tests</code> directly. Parser, decoder, lifetime, and additional coverage suites run, and the executable returns nonzero when any suite fails. Decoder cases appear as individual QtTest data rows; parser checks are grouped into named test slots. Checks also run in release builds.</p>
<p>To build tests separately against an existing core build:</p>
<div class="fragment"><div class="line">mkdir /tmp/dbc-tests-build</div>
<div class="line">cd /tmp/dbc-tests-build</div>
@@ -109,24 +109,28 @@ $(document).ready(function(){initNavTree('md_tests_2README.html',''); initResiza
<div class="line"> DBC_CORE_BUILD_DIR=/absolute/path/to/build/core</div>
<div class="line">make</div>
<div class="line">make check</div>
</div><!-- fragment --><p><code>parser_tests.pri</code> and <code>decoder_tests.pri</code> include the original test sources; <code>tests.pro</code> also includes <code><a class="el" href="dbc__coverage__test_8cpp_source.html">dbc_coverage_test.cpp</a></code>. <code>../core/core.pri</code> supplies the library include path and linkage.</p>
<h1><a class="anchor" id="autotoc_md133"></a>
</div><!-- fragment --><p><code>parser_tests.pri</code> and <code>decoder_tests.pri</code> include the original test sources; <code>tests.pro</code> also includes <code><a class="el" href="dbc__coverage__test_8cpp_source.html">dbc_coverage_test.cpp</a></code> and <code><a class="el" href="dbc__lifetime__test_8cpp_source.html">dbc_lifetime_test.cpp</a></code>. <code>../core/core.pri</code> supplies the library include path and linkage.</p>
<h1><a class="anchor" id="autotoc_md135"></a>
Decoder coverage</h1>
<p>Coverage includes Motorola bit numbering within and across bytes, unaligned signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values (including <code>INT64_MIN</code>, <code>INT64_MAX</code>, and <code>UINT64_MAX</code>), numeric output, invalid lengths, insufficient payloads, and Intel regression cases. Frame validity means the definition was found; insufficient payloads are checked through signal validity.</p>
<h1><a class="anchor" id="autotoc_md134"></a>
<h1><a class="anchor" id="autotoc_md136"></a>
Parser coverage</h1>
<p>Structured diagnostic tests cover severity, code, supplied path, and physical line numbers for skipped syntax and immediate/deferred errors; warnings preceding an error are retained, and failed parses return an empty database. Common headers and namespace symbol lists stay quiet. Tests also check file-open errors, fresh parse sessions, and compatibility with the legacy throwing API. The diagnostic audit also covers 15 unsupported-statement variants, all namespace termination forms, CRLF and missing final newlines, relative paths with spaces, first-error stopping, deferred diagnostic ordering, duplicate definitions/values, selector ranges, overlaps, and preservation of supported decoding and metadata. On Linux, reading a directory exercises the distinct <code>FileReadError</code> path.</p>
<p>Parser tests cover standard and extended CAN IDs, whitespace, payload storage boundaries, missing fields, malformed and overflowing numbers, reserved ID bits, error paths and line numbers, and integration with signals and comments. Duplicate definitions are rejected at their source lines, including equivalent extended ID encodings and repeated signal names within a frame. Standard and extended frames may share a numeric ID, and separate frames may reuse signal names. Signal tests cover complete syntax and numeric validation, scientific notation, finite physical parameters and ordered ranges, spaces and tabs, receiver lists, unsupported multiplexing, and Intel/Motorola declared-payload boundaries. Value-description tests cover full <code>VAL_</code> syntax, whitespace, escaped quotes, empty text, exact integer boundaries, duplicate keys within and across statements, deferred and normalized frame references, missing targets, error locations, raw lookup with scaling, unknown/invalid values, and both database builders. Temporary DBC fixtures are created in the system temporary directory and removed automatically.</p>
<p>Dispatch tests also verify exact keyword matching, handler construction and reuse, unknown statements, and independent parsing sessions, including recovery after errors.</p>
<h1><a class="anchor" id="autotoc_md135"></a>
<h1><a class="anchor" id="autotoc_md137"></a>
Tree and optional model tests</h1>
<p><code><a class="el" href="tree__node__test_8cpp_source.html">tree_node_test.cpp</a></code> is a standalone C++17 executable without Qt; see the root README for its compiler command. It checks parents, sibling positions, null children, bounds, and unique_ptr transfer.</p>
<p>Enable <code>CONFIG+=dbc_qt</code> in the root qmake invocation to build <code>dbc_qt</code> and <code>dbc_model_tests</code> alongside existing tests. Qt 6.8.2 is required. <code>make check</code> runs all suites. Model tests parse a temporary DBC fixture and use QAbstractItemModelTester, verify navigation across columns, invalid/foreign indexes, metadata and exact VAL_ integers, and persistent-index invalidation when reloading or clearing the tree. Their QGuiApplication registers graphical metatypes used by QAbstractItemModelTester, avoiding the invalid QPixmap type warning in Qt 6.8.2. The test executable defaults to <code>QT_QPA_PLATFORM=offscreen</code> when the variable is unset or empty, so no display server is needed. An explicit platform setting is preserved.</p>
<p>Basic multiplexing coverage includes selector declarations after branches, Intel/Motorola branch overlap, signed active values and VAL_ lookup, unconditional signals, inactive branches, missing selector/branch payloads, exact UINT64_MAX selector matching, malformed runtime selectors, source locations, and rejection of invalid markers, selector references/ranges, overlaps, and SG_MUL_VAL_.</p>
<h1><a class="anchor" id="autotoc_md136"></a>
<h1><a class="anchor" id="autotoc_md138"></a>
Additional regression coverage</h1>
<p><code><a class="el" href="dbc__coverage__test_8cpp_source.html">dbc_coverage_test.cpp</a></code> runs as part of <code>dbc_tests</code>. It covers signed boundaries below 64 bits, deterministic extraction comparisons for both byte orders across lengths 1–64, frame lookup failures, exact decode statuses, malformed runtime multiplexing, PGN boundaries, comment handling, file formatting, metadata copying and source lifetime, physical conversion, and <a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a> registration/creation. Direct resolver tests construct ambiguous databases through the public metadata API, verify source locations, and check that ambiguous targets receive no values.</p>
<p>All QtTest targets use Qt 6.8.2 and <code>QVERIFY_THROWS_EXCEPTION</code>. Exception tests explicitly discard <code>nodiscard</code> results when only the exception is being checked. The standalone tree test requires only a C++17 compiler. </p>
<p>All QtTest targets use Qt 6.8.2 and <code>QVERIFY_THROWS_EXCEPTION</code>. Exception tests explicitly discard <code>nodiscard</code> results when only the exception is being checked. The standalone tree test requires only a C++17 compiler.</p>
<h1><a class="anchor" id="autotoc_md139"></a>
Definition lifetime and reload coverage</h1>
<p><code><a class="el" href="dbc__lifetime__test_8cpp_source.html">dbc_lifetime_test.cpp</a></code> checks retained definitions and value-description strings across reload, clear, and destruction; independently saved signal results; copied/moved results and database copies; owning lookup handles; and release of the old snapshot after its final owner is removed. Compile-time checks enforce const access to runtime metadata. Reload fixtures change ordering, frame names, scaling, units, and descriptions, remove definitions, and rename signals.</p>
<p>Key tests check equality and hashing, standard/extended separation, the same signal name in different frames, and missing lookups. Constructor tests reject duplicate runtime keys, including manually supplied parsed metadata. Failed reload leaves the active database intact; empty reload clears it. Invalid/unknown results and insufficient payloads retain their documented ownership and status behavior. Inactive branches and unavailable selectors also retain definitions across reload. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
+2
View File
@@ -39,6 +39,7 @@ var menudata={children:[
{text:"g",url:"functions.html#index_g"},
{text:"h",url:"functions.html#index_h"},
{text:"i",url:"functions.html#index_i"},
{text:"k",url:"functions.html#index_k"},
{text:"l",url:"functions.html#index_l"},
{text:"m",url:"functions.html#index_m"},
{text:"n",url:"functions.html#index_n"},
@@ -57,6 +58,7 @@ var menudata={children:[
{text:"f",url:"functions_vars.html#index_f"},
{text:"h",url:"functions_vars.html#index_h"},
{text:"i",url:"functions_vars.html#index_i"},
{text:"k",url:"functions_vars.html#index_k"},
{text:"l",url:"functions_vars.html#index_l"},
{text:"m",url:"functions_vars.html#index_m"},
{text:"n",url:"functions_vars.html#index_n"},
+53 -49
View File
@@ -84,64 +84,68 @@ var NAVTREE =
[ "<tt>DecodedSignalValue</tt>", "md_README.html#autotoc_md62", [
[ "Raw value representation and precision", "md_README.html#autotoc_md64", null ]
] ],
[ "<tt>DecodedFrameValue</tt>", "md_README.html#autotoc_md66", null ],
[ "<tt>DbcDecoder</tt>", "md_README.html#autotoc_md68", null ],
[ "Parser Support", "md_README.html#autotoc_md70", [
[ "Structured diagnostics", "md_README.html#autotoc_md71", null ]
[ "<tt>DecodedFrameValue</tt>", "md_README.html#autotoc_md66", [
[ "Definition ownership and reload", "md_README.html#autotoc_md67", null ],
[ "Stable frame and signal identifiers", "md_README.html#autotoc_md68", null ]
] ],
[ "Supported DBC Syntax", "md_README.html#autotoc_md73", null ],
[ "Frame definition", "md_README.html#autotoc_md74", [
[ "Frame validation and parse errors", "md_README.html#autotoc_md76", null ]
[ "<tt>DbcDecoder</tt>", "md_README.html#autotoc_md70", null ],
[ "Parser Support", "md_README.html#autotoc_md72", [
[ "Structured diagnostics", "md_README.html#autotoc_md73", null ]
] ],
[ "Signal definition", "md_README.html#autotoc_md78", [
[ "Signal validation and parse errors", "md_README.html#autotoc_md80", null ]
[ "Supported DBC Syntax", "md_README.html#autotoc_md75", null ],
[ "Frame definition", "md_README.html#autotoc_md76", [
[ "Frame validation and parse errors", "md_README.html#autotoc_md78", null ]
] ],
[ "Basic multiplexing", "md_README.html#autotoc_md82", null ],
[ "Comments", "md_README.html#autotoc_md84", null ],
[ "CAN ID Normalization", "md_README.html#autotoc_md86", null ],
[ "PGN Extraction", "md_README.html#autotoc_md88", null ],
[ "Decode Flow", "md_README.html#autotoc_md90", null ],
[ "Intel and Motorola Extraction", "md_README.html#autotoc_md92", null ],
[ "Example Usage", "md_README.html#autotoc_md94", [
[ "Parse DBC", "md_README.html#autotoc_md95", null ],
[ "Build UI tree", "md_README.html#autotoc_md96", null ],
[ "Build runtime decode database", "md_README.html#autotoc_md97", null ],
[ "Decode a raw frame", "md_README.html#autotoc_md98", null ]
[ "Signal definition", "md_README.html#autotoc_md80", [
[ "Signal validation and parse errors", "md_README.html#autotoc_md82", null ]
] ],
[ "Unified Decode Strategy", "md_README.html#autotoc_md100", [
[ "live path", "md_README.html#autotoc_md101", null ],
[ "trace path", "md_README.html#autotoc_md102", null ]
[ "Basic multiplexing", "md_README.html#autotoc_md84", null ],
[ "Comments", "md_README.html#autotoc_md86", null ],
[ "CAN ID Normalization", "md_README.html#autotoc_md88", null ],
[ "PGN Extraction", "md_README.html#autotoc_md90", null ],
[ "Decode Flow", "md_README.html#autotoc_md92", null ],
[ "Intel and Motorola Extraction", "md_README.html#autotoc_md94", null ],
[ "Example Usage", "md_README.html#autotoc_md96", [
[ "Parse DBC", "md_README.html#autotoc_md97", null ],
[ "Build UI tree", "md_README.html#autotoc_md98", null ],
[ "Build runtime decode database", "md_README.html#autotoc_md99", null ],
[ "Decode a raw frame", "md_README.html#autotoc_md100", null ]
] ],
[ "Intended Use in FrameTap", "md_README.html#autotoc_md104", null ],
[ "Why the Tree Is Not Enough", "md_README.html#autotoc_md106", null ],
[ "Statement Handler Factory", "md_README.html#autotoc_md108", null ],
[ "Signal value descriptions (<tt>VAL_</tt>)", "md_README.html#autotoc_md110", null ],
[ "Current Limitations", "md_README.html#autotoc_md112", null ],
[ "Recommended Next Steps", "md_README.html#autotoc_md114", [
[ "Stage 1 - already implemented", "md_README.html#autotoc_md115", null ],
[ "Stage 2", "md_README.html#autotoc_md116", null ],
[ "Stage 3", "md_README.html#autotoc_md117", null ],
[ "Stage 4", "md_README.html#autotoc_md118", null ]
[ "Unified Decode Strategy", "md_README.html#autotoc_md102", [
[ "live path", "md_README.html#autotoc_md103", null ],
[ "trace path", "md_README.html#autotoc_md104", null ]
] ],
[ "Build Integration", "md_README.html#autotoc_md120", [
[ "Build core without Qt libraries", "md_README.html#autotoc_md121", null ],
[ "Optional Qt model adapter", "md_README.html#autotoc_md122", null ],
[ "Standalone tree tests without Qt", "md_README.html#autotoc_md123", null ],
[ "Build and run the demo", "md_README.html#autotoc_md124", null ],
[ "Generate API documentation", "md_README.html#autotoc_md125", null ]
[ "Intended Use in FrameTap", "md_README.html#autotoc_md106", null ],
[ "Why the Tree Is Not Enough", "md_README.html#autotoc_md108", null ],
[ "Statement Handler Factory", "md_README.html#autotoc_md110", null ],
[ "Signal value descriptions (<tt>VAL_</tt>)", "md_README.html#autotoc_md112", null ],
[ "Current Limitations", "md_README.html#autotoc_md114", null ],
[ "Recommended Next Steps", "md_README.html#autotoc_md116", [
[ "Stage 1 - already implemented", "md_README.html#autotoc_md117", null ],
[ "Stage 2", "md_README.html#autotoc_md118", null ],
[ "Stage 3", "md_README.html#autotoc_md119", null ],
[ "Stage 4", "md_README.html#autotoc_md120", null ]
] ],
[ "Regression tests", "md_README.html#autotoc_md127", null ],
[ "Measuring code coverage", "md_README.html#autotoc_md128", [
[ "GCC, gcov, and LCOV on Debian/Ubuntu", "md_README.html#autotoc_md129", null ],
[ "Configure the GCC coverage build in Qt Creator", "md_README.html#autotoc_md130", null ],
[ "Configure all build variants in Qt Creator", "md_README.html#autotoc_md131", null ]
[ "Build Integration", "md_README.html#autotoc_md122", [
[ "Build core without Qt libraries", "md_README.html#autotoc_md123", null ],
[ "Optional Qt model adapter", "md_README.html#autotoc_md124", null ],
[ "Standalone tree tests without Qt", "md_README.html#autotoc_md125", null ],
[ "Build and run the demo", "md_README.html#autotoc_md126", null ],
[ "Generate API documentation", "md_README.html#autotoc_md127", null ]
] ],
[ "Regression tests", "md_README.html#autotoc_md129", null ],
[ "Measuring code coverage", "md_README.html#autotoc_md130", [
[ "GCC, gcov, and LCOV on Debian/Ubuntu", "md_README.html#autotoc_md131", null ],
[ "Configure the GCC coverage build in Qt Creator", "md_README.html#autotoc_md132", null ],
[ "Configure all build variants in Qt Creator", "md_README.html#autotoc_md133", null ]
] ]
] ],
[ "QtTest regression tests", "md_tests_2README.html", [
[ "Decoder coverage", "md_tests_2README.html#autotoc_md133", null ],
[ "Parser coverage", "md_tests_2README.html#autotoc_md134", null ],
[ "Tree and optional model tests", "md_tests_2README.html#autotoc_md135", null ],
[ "Additional regression coverage", "md_tests_2README.html#autotoc_md136", null ]
[ "Decoder coverage", "md_tests_2README.html#autotoc_md135", null ],
[ "Parser coverage", "md_tests_2README.html#autotoc_md136", null ],
[ "Tree and optional model tests", "md_tests_2README.html#autotoc_md137", null ],
[ "Additional regression coverage", "md_tests_2README.html#autotoc_md138", null ],
[ "Definition lifetime and reload coverage", "md_tests_2README.html#autotoc_md139", null ]
] ],
[ "Classes", "annotated.html", [
[ "Class List", "annotated.html", "annotated_dup" ],
@@ -166,7 +170,7 @@ var NAVTREE =
var NAVTREEINDEX =
[
"annotated.html",
"structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4"
"structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9"
];
var SYNCONMSG = 'click to disable panel synchronisation';
+102 -102
View File
@@ -6,7 +6,7 @@ var NAVTREEINDEX0 =
"classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b":[3,0,2,0],
"classDbcDecoder.html":[3,0,3],
"classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7":[3,0,3,1],
"classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da":[3,0,3,0],
"classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c":[3,0,3,0],
"classDbcDiagnosticError.html":[3,0,5],
"classDbcFrameHandler.html":[3,0,6],
"classDbcHeaderHandler.html":[3,0,7],
@@ -22,25 +22,29 @@ var NAVTREEINDEX0 =
"classDbcTreeModel.html":[3,0,15],
"classDbcUnsupportedMultiplexingHandler.html":[3,0,16],
"classDbcValueDescriptionHandler.html":[3,0,17],
"classTreeNode.html":[3,0,30],
"classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1":[3,0,30,12],
"classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6":[3,0,30,7],
"classTreeNode.html#a6161f2ebb92184eab4215d121870e788":[3,0,30,3],
"classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f":[3,0,30,8],
"classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc":[3,0,30,1],
"classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d":[3,0,30,0],
"classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f":[3,0,30,4],
"classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18":[3,0,30,10],
"classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae":[3,0,30,2],
"classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea":[3,0,30,6],
"classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8":[3,0,30,5],
"classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9":[3,0,30,9],
"classTreeNode.html#afc503b40004764163605d6dbdb4ef811":[3,0,30,11],
"classTypeFactory.html":[3,0,31],
"classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4":[3,0,31,3],
"classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f":[3,0,31,2],
"classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3":[3,0,31,0],
"classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473":[3,0,31,1],
"classDecodeDatabase.html":[3,0,18],
"classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970":[3,0,18,2],
"classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8":[3,0,18,1],
"classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a":[3,0,18,0],
"classTreeNode.html":[3,0,32],
"classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1":[3,0,32,12],
"classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6":[3,0,32,7],
"classTreeNode.html#a6161f2ebb92184eab4215d121870e788":[3,0,32,3],
"classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f":[3,0,32,8],
"classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc":[3,0,32,1],
"classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d":[3,0,32,0],
"classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f":[3,0,32,4],
"classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18":[3,0,32,10],
"classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae":[3,0,32,2],
"classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea":[3,0,32,6],
"classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8":[3,0,32,5],
"classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9":[3,0,32,9],
"classTreeNode.html#afc503b40004764163605d6dbdb4ef811":[3,0,32,11],
"classTypeFactory.html":[3,0,33],
"classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4":[3,0,33,3],
"classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f":[3,0,33,2],
"classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3":[3,0,33,0],
"classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473":[3,0,33,1],
"classes.html":[3,1],
"dbc__coverage__test_8cpp_source.html":[4,0,3,0],
"dbc__database_8h.html":[4,0,0,0],
@@ -55,11 +59,12 @@ var NAVTREEINDEX0 =
"dbc__decoder_8h_source.html":[4,0,0,4],
"dbc__decoder__test_8cpp_source.html":[4,0,3,1],
"dbc__diagnostic_8h_source.html":[4,0,0,5],
"dbc__lifetime__test_8cpp_source.html":[4,0,3,2],
"dbc__parser_8cpp.html":[4,0,0,6],
"dbc__parser_8cpp_source.html":[4,0,0,6],
"dbc__parser_8h.html":[4,0,0,7],
"dbc__parser_8h_source.html":[4,0,0,7],
"dbc__parser__test_8cpp_source.html":[4,0,3,2],
"dbc__parser__test_8cpp_source.html":[4,0,3,3],
"dbc__statement__handler_8cpp_source.html":[4,0,0,8],
"dbc__statement__handler_8h_source.html":[4,0,0,9],
"dbc__tree__builder_8cpp.html":[4,0,0,10],
@@ -68,15 +73,17 @@ var NAVTREEINDEX0 =
"dbc__tree__builder_8h_source.html":[4,0,0,11],
"dbc__tree__model_8cpp_source.html":[4,0,2,0],
"dbc__tree__model_8h_source.html":[4,0,2,1],
"dbc__tree__model__test_8cpp_source.html":[4,0,3,3],
"decode__database_8h.html":[4,0,0,12],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[4,0,0,12,5],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[4,0,0,12,5,1],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[4,0,0,12,5,0],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[4,0,0,12,6],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[4,0,0,12,6,1],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[4,0,0,12,6,0],
"decode__database_8h_source.html":[4,0,0,12],
"dbc__tree__model__test_8cpp_source.html":[4,0,3,4],
"decode__database_8cpp_source.html":[4,0,0,12],
"decode__database_8h.html":[4,0,0,13],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[4,0,0,13,3],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[4,0,0,13,3,1],
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[4,0,0,13,3,0],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[4,0,0,13,4],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[4,0,0,13,4,1],
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[4,0,0,13,4,0],
"decode__database_8h_source.html":[4,0,0,13],
"definition__key_8h_source.html":[4,0,0,14],
"dir_0f63d6441a2c250919e1e8723011eb2f.html":[4,0,2],
"dir_4270bfced15e0e73154b13468c7c9ad9.html":[4,0,0],
"dir_59425e443f801f1f2fd8bbe4959a3ccf.html":[4,0,3],
@@ -84,8 +91,8 @@ var NAVTREEINDEX0 =
"examples_2main_8cpp.html":[4,0,1,0],
"examples_2main_8cpp_source.html":[4,0,1,0],
"files.html":[4,0],
"frame__info_8h.html":[4,0,0,13],
"frame__info_8h_source.html":[4,0,0,13],
"frame__info_8h.html":[4,0,0,15],
"frame__info_8h_source.html":[4,0,0,15],
"functions.html":[3,3,0],
"functions_func.html":[3,3,1],
"functions_vars.html":[3,3,2],
@@ -94,30 +101,31 @@ var NAVTREEINDEX0 =
"hierarchy.html":[3,2],
"index.html":[],
"md_README.html":[1],
"md_README.html#autotoc_md100":[1,34],
"md_README.html#autotoc_md101":[1,34,0],
"md_README.html#autotoc_md102":[1,34,1],
"md_README.html#autotoc_md104":[1,35],
"md_README.html#autotoc_md106":[1,36],
"md_README.html#autotoc_md108":[1,37],
"md_README.html#autotoc_md110":[1,38],
"md_README.html#autotoc_md112":[1,39],
"md_README.html#autotoc_md114":[1,40],
"md_README.html#autotoc_md115":[1,40,0],
"md_README.html#autotoc_md116":[1,40,1],
"md_README.html#autotoc_md117":[1,40,2],
"md_README.html#autotoc_md118":[1,40,3],
"md_README.html#autotoc_md120":[1,41],
"md_README.html#autotoc_md121":[1,41,0],
"md_README.html#autotoc_md122":[1,41,1],
"md_README.html#autotoc_md123":[1,41,2],
"md_README.html#autotoc_md124":[1,41,3],
"md_README.html#autotoc_md125":[1,41,4],
"md_README.html#autotoc_md127":[1,42],
"md_README.html#autotoc_md128":[1,43],
"md_README.html#autotoc_md129":[1,43,0],
"md_README.html#autotoc_md130":[1,43,1],
"md_README.html#autotoc_md131":[1,43,2],
"md_README.html#autotoc_md100":[1,33,3],
"md_README.html#autotoc_md102":[1,34],
"md_README.html#autotoc_md103":[1,34,0],
"md_README.html#autotoc_md104":[1,34,1],
"md_README.html#autotoc_md106":[1,35],
"md_README.html#autotoc_md108":[1,36],
"md_README.html#autotoc_md110":[1,37],
"md_README.html#autotoc_md112":[1,38],
"md_README.html#autotoc_md114":[1,39],
"md_README.html#autotoc_md116":[1,40],
"md_README.html#autotoc_md117":[1,40,0],
"md_README.html#autotoc_md118":[1,40,1],
"md_README.html#autotoc_md119":[1,40,2],
"md_README.html#autotoc_md120":[1,40,3],
"md_README.html#autotoc_md122":[1,41],
"md_README.html#autotoc_md123":[1,41,0],
"md_README.html#autotoc_md124":[1,41,1],
"md_README.html#autotoc_md125":[1,41,2],
"md_README.html#autotoc_md126":[1,41,3],
"md_README.html#autotoc_md127":[1,41,4],
"md_README.html#autotoc_md129":[1,42],
"md_README.html#autotoc_md130":[1,43],
"md_README.html#autotoc_md131":[1,43,0],
"md_README.html#autotoc_md132":[1,43,1],
"md_README.html#autotoc_md133":[1,43,2],
"md_README.html#autotoc_md24":[1,0],
"md_README.html#autotoc_md26":[1,1],
"md_README.html#autotoc_md27":[1,1,0],
@@ -143,25 +151,26 @@ var NAVTREEINDEX0 =
"md_README.html#autotoc_md62":[1,20],
"md_README.html#autotoc_md64":[1,20,0],
"md_README.html#autotoc_md66":[1,21],
"md_README.html#autotoc_md68":[1,22],
"md_README.html#autotoc_md70":[1,23],
"md_README.html#autotoc_md71":[1,23,0],
"md_README.html#autotoc_md73":[1,24],
"md_README.html#autotoc_md74":[1,25],
"md_README.html#autotoc_md76":[1,25,0],
"md_README.html#autotoc_md78":[1,26],
"md_README.html#autotoc_md80":[1,26,0],
"md_README.html#autotoc_md82":[1,27],
"md_README.html#autotoc_md84":[1,28],
"md_README.html#autotoc_md86":[1,29],
"md_README.html#autotoc_md88":[1,30],
"md_README.html#autotoc_md90":[1,31],
"md_README.html#autotoc_md92":[1,32],
"md_README.html#autotoc_md94":[1,33],
"md_README.html#autotoc_md95":[1,33,0],
"md_README.html#autotoc_md96":[1,33,1],
"md_README.html#autotoc_md97":[1,33,2],
"md_README.html#autotoc_md98":[1,33,3],
"md_README.html#autotoc_md67":[1,21,0],
"md_README.html#autotoc_md68":[1,21,1],
"md_README.html#autotoc_md70":[1,22],
"md_README.html#autotoc_md72":[1,23],
"md_README.html#autotoc_md73":[1,23,0],
"md_README.html#autotoc_md75":[1,24],
"md_README.html#autotoc_md76":[1,25],
"md_README.html#autotoc_md78":[1,25,0],
"md_README.html#autotoc_md80":[1,26],
"md_README.html#autotoc_md82":[1,26,0],
"md_README.html#autotoc_md84":[1,27],
"md_README.html#autotoc_md86":[1,28],
"md_README.html#autotoc_md88":[1,29],
"md_README.html#autotoc_md90":[1,30],
"md_README.html#autotoc_md92":[1,31],
"md_README.html#autotoc_md94":[1,32],
"md_README.html#autotoc_md96":[1,33],
"md_README.html#autotoc_md97":[1,33,0],
"md_README.html#autotoc_md98":[1,33,1],
"md_README.html#autotoc_md99":[1,33,2],
"md_changelog.html":[0],
"md_changelog.html#autotoc_md1":[0,0],
"md_changelog.html#autotoc_md10":[0,0,2,0],
@@ -186,20 +195,20 @@ var NAVTREEINDEX0 =
"md_changelog.html#autotoc_md8":[0,0,1,2],
"md_changelog.html#autotoc_md9":[0,0,2],
"md_tests_2README.html":[2],
"md_tests_2README.html#autotoc_md133":[2,0],
"md_tests_2README.html#autotoc_md134":[2,1],
"md_tests_2README.html#autotoc_md135":[2,2],
"md_tests_2README.html#autotoc_md136":[2,3],
"multiplexing_8h_source.html":[4,0,0,14],
"md_tests_2README.html#autotoc_md135":[2,0],
"md_tests_2README.html#autotoc_md136":[2,1],
"md_tests_2README.html#autotoc_md137":[2,2],
"md_tests_2README.html#autotoc_md138":[2,3],
"md_tests_2README.html#autotoc_md139":[2,4],
"multiplexing_8h_source.html":[4,0,0,16],
"pages.html":[],
"signal__info_8h.html":[4,0,0,15],
"signal__info_8h_source.html":[4,0,0,15],
"signal__info_8h.html":[4,0,0,17],
"signal__info_8h_source.html":[4,0,0,17],
"structDbcDatabase.html":[3,0,1],
"structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b":[3,0,1,0],
"structDbcDiagnostic.html":[3,0,4],
"structDbcParseContext.html":[3,0,8],
"structDbcParseResult.html":[3,0,10],
"structDecodeDatabase.html":[3,0,18],
"structDecodeFrame.html":[3,0,21],
"structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23":[3,0,21,4],
"structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d":[3,0,21,5],
@@ -225,29 +234,20 @@ var NAVTREEINDEX0 =
"structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb":[3,0,22,2],
"structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473":[3,0,22,12],
"structDecodedFrameValue.html":[3,0,19],
"structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0":[3,0,19,2],
"structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c":[3,0,19,0],
"structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8":[3,0,19,1],
"structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73":[3,0,19,1],
"structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d":[3,0,19,0],
"structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0":[3,0,19,3],
"structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8":[3,0,19,2],
"structDecodedSignalValue.html":[3,0,20],
"structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28":[3,0,20,2],
"structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978":[3,0,20,3],
"structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686":[3,0,20,4],
"structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7":[3,0,20,1],
"structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a":[3,0,20,2],
"structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28":[3,0,20,3],
"structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978":[3,0,20,4],
"structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2":[3,0,20,1],
"structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686":[3,0,20,5],
"structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2":[3,0,20,0],
"structFrameInfo.html":[3,0,23],
"structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf":[3,0,23,2],
"structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084":[3,0,23,8],
"structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d":[3,0,23,4],
"structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8":[3,0,23,6],
"structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9":[3,0,23,5],
"structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb":[3,0,23,0],
"structFrameInfo.html#ace75121294f9d89b762080ab5643293c":[3,0,23,7],
"structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943":[3,0,23,3],
"structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e":[3,0,23,1],
"structFrameKey.html":[3,0,24],
"structFrameKeyHasher.html":[3,0,25],
"structMultiplexing.html":[3,0,26],
"structPendingValueDescriptions.html":[3,0,27],
"structRawCanFrame.html":[3,0,28],
"structRawCanFrame.html#a0acb487612104c99c9907344c035df83":[3,0,28,2]
"structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8":[3,0,23,6]
};
+26 -13
View File
@@ -1,5 +1,16 @@
var NAVTREEINDEX1 =
{
"structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9":[3,0,23,5],
"structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb":[3,0,23,0],
"structFrameInfo.html#ace75121294f9d89b762080ab5643293c":[3,0,23,7],
"structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943":[3,0,23,3],
"structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e":[3,0,23,1],
"structFrameKey.html":[3,0,24],
"structFrameKeyHasher.html":[3,0,25],
"structMultiplexing.html":[3,0,26],
"structPendingValueDescriptions.html":[3,0,27],
"structRawCanFrame.html":[3,0,28],
"structRawCanFrame.html#a0acb487612104c99c9907344c035df83":[3,0,28,2],
"structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4":[3,0,28,0],
"structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7":[3,0,28,1],
"structSignalInfo.html":[3,0,29],
@@ -16,17 +27,19 @@ var NAVTREEINDEX1 =
"structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52":[3,0,29,8],
"structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499":[3,0,29,5],
"structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c":[3,0,29,3],
"tests_2main_8cpp_source.html":[4,0,3,4],
"text__utils_8h_source.html":[4,0,0,16],
"tree__node_8cpp.html":[4,0,0,17],
"tree__node_8cpp_source.html":[4,0,0,17],
"tree__node_8h.html":[4,0,0,18],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[4,0,0,18,1],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[4,0,0,18,1,2],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[4,0,0,18,1,1],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[4,0,0,18,1,0],
"tree__node_8h_source.html":[4,0,0,18],
"tree__node__test_8cpp_source.html":[4,0,3,5],
"typefactory_8h_source.html":[4,0,0,19],
"value__descriptions_8h_source.html":[4,0,0,20]
"structSignalKey.html":[3,0,30],
"structSignalKeyHasher.html":[3,0,31],
"tests_2main_8cpp_source.html":[4,0,3,5],
"text__utils_8h_source.html":[4,0,0,18],
"tree__node_8cpp.html":[4,0,0,19],
"tree__node_8cpp_source.html":[4,0,0,19],
"tree__node_8h.html":[4,0,0,20],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[4,0,0,20,1],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[4,0,0,20,1,2],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[4,0,0,20,1,1],
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[4,0,0,20,1,0],
"tree__node_8h_source.html":[4,0,0,20],
"tree__node__test_8cpp_source.html":[4,0,3,6],
"typefactory_8h_source.html":[4,0,0,21],
"value__descriptions_8h_source.html":[4,0,0,22]
};
+1 -1
View File
@@ -1,6 +1,6 @@
var searchData=
[
['1_20already_20implemented_0',['Stage 1 - already implemented',['../md_README.html#autotoc_md115',1,'']]],
['1_20already_20implemented_0',['Stage 1 - already implemented',['../md_README.html#autotoc_md117',1,'']]],
['1_20parse_20and_20ui_20path_1',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['10_2001_2',['2026-10-01',['../md_changelog.html#autotoc_md15',1,'']]],
['10_2005_3',['2026-10-05',['../md_changelog.html#autotoc_md11',1,'']]],
+10 -5
View File
@@ -1,8 +1,13 @@
var searchData=
[
['name_0',['name',['../structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780',1,'DecodeSignal::name'],['../structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579',1,'DecodeFrame::name'],['../structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb',1,'FrameInfo::name'],['../structSignalInfo.html#a379e422a00cad56f896cacf60455b088',1,'SignalInfo::name']]],
['next_20steps_1',['Recommended Next Steps',['../md_README.html#autotoc_md114',1,'']]],
['nodetype_2',['NodeType',['../tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16',1,'tree_node.h']]],
['normalization_3',['CAN ID Normalization',['../md_README.html#autotoc_md86',1,'']]],
['not_20enough_4',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]]
['maintenance_0',['maintenance',['../md_changelog.html#autotoc_md14',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md22',1,'Documentation and maintenance']]],
['maximum_1',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum']]],
['measuring_20code_20coverage_2',['Measuring code coverage',['../md_README.html#autotoc_md130',1,'']]],
['minimum_3',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum']]],
['model_20adapter_4',['Optional Qt model adapter',['../md_README.html#autotoc_md124',1,'']]],
['model_20tests_5',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md137',1,'']]],
['module_20documentation_6',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['module_20layout_7',['Module Layout',['../md_README.html#autotoc_md32',1,'']]],
['motorola_20extraction_8',['Intel and Motorola Extraction',['../md_README.html#autotoc_md94',1,'']]],
['multiplexing_9',['multiplexing',['../md_README.html#autotoc_md84',1,'Basic multiplexing'],['../structMultiplexing.html',1,'Multiplexing']]]
];
+5 -5
View File
@@ -1,8 +1,8 @@
var searchData=
[
['offset_0',['offset',['../structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74',1,'DecodeSignal::offset'],['../structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e',1,'SignalInfo::offset']]],
['on_20debian_20ubuntu_1',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['optional_20model_20tests_2',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md135',1,'']]],
['optional_20qt_20model_20adapter_3',['Optional Qt model adapter',['../md_README.html#autotoc_md122',1,'']]],
['overview_4',['Overview',['../md_README.html#autotoc_md24',1,'']]]
['name_0',['name',['../structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780',1,'DecodeSignal::name'],['../structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579',1,'DecodeFrame::name'],['../structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb',1,'FrameInfo::name'],['../structSignalInfo.html#a379e422a00cad56f896cacf60455b088',1,'SignalInfo::name']]],
['next_20steps_1',['Recommended Next Steps',['../md_README.html#autotoc_md116',1,'']]],
['nodetype_2',['NodeType',['../tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16',1,'tree_node.h']]],
['normalization_3',['CAN ID Normalization',['../md_README.html#autotoc_md88',1,'']]],
['not_20enough_4',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]]
];
+6 -17
View File
@@ -1,20 +1,9 @@
var searchData=
[
['parse_20and_20ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['parse_20dbc_1',['Parse DBC',['../md_README.html#autotoc_md95',1,'']]],
['parse_20errors_2',['parse errors',['../md_README.html#autotoc_md76',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md80',1,'Signal validation and parse errors']]],
['parsed_20data_20structures_3',['Parsed Data Structures',['../md_README.html#autotoc_md34',1,'']]],
['parsefile_4',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]],
['parsefilewithdiagnostics_5',['ParseFileWithDiagnostics',['../classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc',1,'DbcParser']]],
['parser_20and_20runtime_20decode_20module_20documentation_6',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['parser_20coverage_7',['Parser coverage',['../md_tests_2README.html#autotoc_md134',1,'']]],
['parser_20support_8',['Parser Support',['../md_README.html#autotoc_md70',1,'']]],
['path_9',['path',['../md_README.html#autotoc_md27',1,'1. Parse and UI path'],['../md_README.html#autotoc_md28',1,'2. Runtime decode path'],['../md_README.html#autotoc_md101',1,'live path'],['../md_README.html#autotoc_md102',1,'trace path']]],
['pendingvaluedescriptions_10',['PendingValueDescriptions',['../structPendingValueDescriptions.html',1,'']]],
['pgn_11',['pgn',['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn'],['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn']]],
['pgn_20extraction_12',['PGN Extraction',['../md_README.html#autotoc_md88',1,'']]],
['physicalvalue_13',['physicalValue',['../structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978',1,'DecodedSignalValue']]],
['precision_14',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['public_15',['public',['../structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084',1,'FrameInfo::public'],['../structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14',1,'DecodeFrame::public'],['../structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8',1,'DecodedFrameValue::public']]],
['purpose_16',['Purpose',['../md_README.html#autotoc_md45',1,'']]]
['offset_0',['offset',['../structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74',1,'DecodeSignal::offset'],['../structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e',1,'SignalInfo::offset']]],
['on_20debian_20ubuntu_1',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['optional_20model_20tests_2',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md137',1,'']]],
['optional_20qt_20model_20adapter_3',['Optional Qt model adapter',['../md_README.html#autotoc_md124',1,'']]],
['overview_4',['Overview',['../md_README.html#autotoc_md24',1,'']]],
['ownership_20and_20reload_5',['Definition ownership and reload',['../md_README.html#autotoc_md67',1,'']]]
];
+17 -5
View File
@@ -1,8 +1,20 @@
var searchData=
[
['qt_0',['Standalone tree tests without Qt',['../md_README.html#autotoc_md123',1,'']]],
['qt_20creator_1',['qt creator',['../md_README.html#autotoc_md131',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md130',1,'Configure the GCC coverage build in Qt Creator']]],
['qt_20libraries_2',['Build core without Qt libraries',['../md_README.html#autotoc_md121',1,'']]],
['qt_20model_20adapter_3',['Optional Qt model adapter',['../md_README.html#autotoc_md122',1,'']]],
['qttest_20regression_20tests_4',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
['parse_20and_20ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['parse_20dbc_1',['Parse DBC',['../md_README.html#autotoc_md97',1,'']]],
['parse_20errors_2',['parse errors',['../md_README.html#autotoc_md78',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md82',1,'Signal validation and parse errors']]],
['parsed_20data_20structures_3',['Parsed Data Structures',['../md_README.html#autotoc_md34',1,'']]],
['parsefile_4',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]],
['parsefilewithdiagnostics_5',['ParseFileWithDiagnostics',['../classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc',1,'DbcParser']]],
['parser_20and_20runtime_20decode_20module_20documentation_6',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['parser_20coverage_7',['Parser coverage',['../md_tests_2README.html#autotoc_md136',1,'']]],
['parser_20support_8',['Parser Support',['../md_README.html#autotoc_md72',1,'']]],
['path_9',['path',['../md_README.html#autotoc_md27',1,'1. Parse and UI path'],['../md_README.html#autotoc_md28',1,'2. Runtime decode path'],['../md_README.html#autotoc_md103',1,'live path'],['../md_README.html#autotoc_md104',1,'trace path']]],
['pendingvaluedescriptions_10',['PendingValueDescriptions',['../structPendingValueDescriptions.html',1,'']]],
['pgn_11',['pgn',['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn'],['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn']]],
['pgn_20extraction_12',['PGN Extraction',['../md_README.html#autotoc_md90',1,'']]],
['physicalvalue_13',['physicalValue',['../structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978',1,'DecodedSignalValue']]],
['precision_14',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['public_15',['public',['../structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084',1,'FrameInfo::public'],['../structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14',1,'DecodeFrame::public'],['../structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8',1,'DecodedFrameValue::public']]],
['purpose_16',['Purpose',['../md_README.html#autotoc_md45',1,'']]]
];
+5 -17
View File
@@ -1,20 +1,8 @@
var searchData=
[
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md98',1,'']]],
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
['rawcanframe_20tt_3',['&lt;tt&gt;RawCanFrame&lt;/tt&gt;',['../md_README.html#autotoc_md60',1,'']]],
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28',1,'DecodedSignalValue']]],
['receivers_5',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers']]],
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md114',1,'']]],
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
['regression_20coverage_8',['Additional regression coverage',['../md_tests_2README.html#autotoc_md136',1,'']]],
['regression_20tests_9',['regression tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md127',1,'Regression tests']]],
['representation_20and_20precision_10',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['run_20the_20demo_11',['Build and run the demo',['../md_README.html#autotoc_md124',1,'']]],
['runtime_20decode_20database_12',['Build runtime decode database',['../md_README.html#autotoc_md97',1,'']]],
['runtime_20decode_20layer_13',['Runtime Decode Layer',['../md_README.html#autotoc_md44',1,'']]],
['runtime_20decode_20layer_20exists_14',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['runtime_20decode_20module_20documentation_15',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['runtime_20decode_20path_16',['2. Runtime decode path',['../md_README.html#autotoc_md28',1,'']]]
['qt_0',['Standalone tree tests without Qt',['../md_README.html#autotoc_md125',1,'']]],
['qt_20creator_1',['qt creator',['../md_README.html#autotoc_md133',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md132',1,'Configure the GCC coverage build in Qt Creator']]],
['qt_20libraries_2',['Build core without Qt libraries',['../md_README.html#autotoc_md123',1,'']]],
['qt_20model_20adapter_3',['Optional Qt model adapter',['../md_README.html#autotoc_md124',1,'']]],
['qttest_20regression_20tests_4',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
];
+19 -20
View File
@@ -1,23 +1,22 @@
var searchData=
[
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md78',1,'']]],
['signal_20validation_20and_20parse_20errors_1',['Signal validation and parse errors',['../md_README.html#autotoc_md80',1,'']]],
['signal_20value_20descriptions_20tt_20val_5f_20tt_2',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md110',1,'']]],
['signal_5finfo_2eh_3',['signal_info.h',['../signal__info_8h.html',1,'']]],
['signalinfo_4',['SignalInfo',['../structSignalInfo.html',1,'']]],
['signalinfo_20tt_5',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md35',1,'']]],
['stage_201_20already_20implemented_6',['Stage 1 - already implemented',['../md_README.html#autotoc_md115',1,'']]],
['stage_202_7',['Stage 2',['../md_README.html#autotoc_md116',1,'']]],
['stage_203_8',['Stage 3',['../md_README.html#autotoc_md117',1,'']]],
['stage_204_9',['Stage 4',['../md_README.html#autotoc_md118',1,'']]],
['standalone_20tree_20tests_20without_20qt_10',['Standalone tree tests without Qt',['../md_README.html#autotoc_md123',1,'']]],
['startbit_11',['startbit',['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit'],['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit']]],
['statement_20handler_20factory_12',['Statement Handler Factory',['../md_README.html#autotoc_md108',1,'']]],
['steps_13',['Recommended Next Steps',['../md_README.html#autotoc_md114',1,'']]],
['strategy_14',['Unified Decode Strategy',['../md_README.html#autotoc_md100',1,'']]],
['structured_20diagnostics_15',['Structured diagnostics',['../md_README.html#autotoc_md71',1,'']]],
['structures_16',['Parsed Data Structures',['../md_README.html#autotoc_md34',1,'']]],
['support_17',['Parser Support',['../md_README.html#autotoc_md70',1,'']]],
['supported_20dbc_20syntax_18',['Supported DBC Syntax',['../md_README.html#autotoc_md73',1,'']]],
['syntax_19',['Supported DBC Syntax',['../md_README.html#autotoc_md73',1,'']]]
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md100',1,'']]],
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
['rawcanframe_20tt_3',['&lt;tt&gt;RawCanFrame&lt;/tt&gt;',['../md_README.html#autotoc_md60',1,'']]],
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a503c90b4b1a610b8252c45e466367c28',1,'DecodedSignalValue']]],
['receivers_5',['receivers',['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers'],['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers']]],
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md116',1,'']]],
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
['regression_20coverage_8',['Additional regression coverage',['../md_tests_2README.html#autotoc_md138',1,'']]],
['regression_20tests_9',['regression tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md129',1,'Regression tests']]],
['reload_10',['Definition ownership and reload',['../md_README.html#autotoc_md67',1,'']]],
['reload_20coverage_11',['Definition lifetime and reload coverage',['../md_tests_2README.html#autotoc_md139',1,'']]],
['representation_20and_20precision_12',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['run_20the_20demo_13',['Build and run the demo',['../md_README.html#autotoc_md126',1,'']]],
['runtime_20decode_20database_14',['Build runtime decode database',['../md_README.html#autotoc_md99',1,'']]],
['runtime_20decode_20layer_15',['Runtime Decode Layer',['../md_README.html#autotoc_md44',1,'']]],
['runtime_20decode_20layer_20exists_16',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['runtime_20decode_20module_20documentation_17',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['runtime_20decode_20path_18',['2. Runtime decode path',['../md_README.html#autotoc_md28',1,'']]]
];
+24 -34
View File
@@ -1,37 +1,27 @@
var searchData=
[
['tests_0',['tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md127',1,'Regression tests'],['../md_tests_2README.html#autotoc_md135',1,'Tree and optional model tests']]],
['tests_20without_20qt_1',['Standalone tree tests without Qt',['../md_README.html#autotoc_md123',1,'']]],
['the_20demo_2',['Build and run the demo',['../md_README.html#autotoc_md124',1,'']]],
['the_20gcc_20coverage_20build_20in_20qt_20creator_3',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md130',1,'']]],
['the_20runtime_20decode_20layer_20exists_4',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['the_20tree_20is_20not_20enough_5',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]],
['trace_20path_6',['trace path',['../md_README.html#autotoc_md102',1,'']]],
['transmitter_7',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
['tree_8',['Build UI tree',['../md_README.html#autotoc_md96',1,'']]],
['tree_20and_20optional_20model_20tests_9',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md135',1,'']]],
['tree_20is_20not_20enough_10',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]],
['tree_20layer_11',['UI Tree Layer',['../md_README.html#autotoc_md41',1,'']]],
['tree_20tests_20without_20qt_12',['Standalone tree tests without Qt',['../md_README.html#autotoc_md123',1,'']]],
['tree_5fnode_2ecpp_13',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
['tree_5fnode_2eh_14',['tree_node.h',['../tree__node_8h.html',1,'']]],
['treenode_15',['treenode',['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode()'],['../classTreeNode.html',1,'TreeNode'],['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &amp;frame)']]],
['treenode_20tt_16',['&lt;tt&gt;TreeNode&lt;/tt&gt;',['../md_README.html#autotoc_md42',1,'']]],
['tt_20byteorder_20tt_17',['&lt;tt&gt;ByteOrder&lt;/tt&gt;',['../md_README.html#autotoc_md47',1,'']]],
['tt_20dbcdatabase_20tt_18',['&lt;tt&gt;DbcDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md39',1,'']]],
['tt_20dbcdecoder_20tt_19',['&lt;tt&gt;DbcDecoder&lt;/tt&gt;',['../md_README.html#autotoc_md68',1,'']]],
['tt_20decodedatabase_20tt_20',['&lt;tt&gt;DecodeDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md57',1,'']]],
['tt_20decodedframevalue_20tt_21',['&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;',['../md_README.html#autotoc_md66',1,'']]],
['tt_20decodedsignalvalue_20tt_22',['&lt;tt&gt;DecodedSignalValue&lt;/tt&gt;',['../md_README.html#autotoc_md62',1,'']]],
['tt_20decodeframe_20tt_23',['&lt;tt&gt;DecodeFrame&lt;/tt&gt;',['../md_README.html#autotoc_md53',1,'']]],
['tt_20decodesignal_20tt_24',['&lt;tt&gt;DecodeSignal&lt;/tt&gt;',['../md_README.html#autotoc_md51',1,'']]],
['tt_20frameinfo_20tt_25',['&lt;tt&gt;FrameInfo&lt;/tt&gt;',['../md_README.html#autotoc_md37',1,'']]],
['tt_20framekey_20tt_26',['&lt;tt&gt;FrameKey&lt;/tt&gt;',['../md_README.html#autotoc_md55',1,'']]],
['tt_20rawcanframe_20tt_27',['&lt;tt&gt;RawCanFrame&lt;/tt&gt;',['../md_README.html#autotoc_md60',1,'']]],
['tt_20signalinfo_20tt_28',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md35',1,'']]],
['tt_20treenode_20tt_29',['&lt;tt&gt;TreeNode&lt;/tt&gt;',['../md_README.html#autotoc_md42',1,'']]],
['tt_20val_5f_20tt_30',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md110',1,'']]],
['tt_20valuetype_20tt_31',['&lt;tt&gt;ValueType&lt;/tt&gt;',['../md_README.html#autotoc_md49',1,'']]],
['typefactory_32',['TypeFactory',['../classTypeFactory.html',1,'']]],
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_33',['TypeFactory&lt; std::string, DbcStatementHandler &gt;',['../classTypeFactory.html',1,'']]]
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md80',1,'']]],
['signal_20identifiers_1',['Stable frame and signal identifiers',['../md_README.html#autotoc_md68',1,'']]],
['signal_20validation_20and_20parse_20errors_2',['Signal validation and parse errors',['../md_README.html#autotoc_md82',1,'']]],
['signal_20value_20descriptions_20tt_20val_5f_20tt_3',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md112',1,'']]],
['signal_5finfo_2eh_4',['signal_info.h',['../signal__info_8h.html',1,'']]],
['signalinfo_5',['SignalInfo',['../structSignalInfo.html',1,'']]],
['signalinfo_20tt_6',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md35',1,'']]],
['signalkey_7',['SignalKey',['../structSignalKey.html',1,'']]],
['signalkeyhasher_8',['SignalKeyHasher',['../structSignalKeyHasher.html',1,'']]],
['stable_20frame_20and_20signal_20identifiers_9',['Stable frame and signal identifiers',['../md_README.html#autotoc_md68',1,'']]],
['stage_201_20already_20implemented_10',['Stage 1 - already implemented',['../md_README.html#autotoc_md117',1,'']]],
['stage_202_11',['Stage 2',['../md_README.html#autotoc_md118',1,'']]],
['stage_203_12',['Stage 3',['../md_README.html#autotoc_md119',1,'']]],
['stage_204_13',['Stage 4',['../md_README.html#autotoc_md120',1,'']]],
['standalone_20tree_20tests_20without_20qt_14',['Standalone tree tests without Qt',['../md_README.html#autotoc_md125',1,'']]],
['startbit_15',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
['statement_20handler_20factory_16',['Statement Handler Factory',['../md_README.html#autotoc_md110',1,'']]],
['steps_17',['Recommended Next Steps',['../md_README.html#autotoc_md116',1,'']]],
['strategy_18',['Unified Decode Strategy',['../md_README.html#autotoc_md102',1,'']]],
['structured_20diagnostics_19',['Structured diagnostics',['../md_README.html#autotoc_md73',1,'']]],
['structures_20',['Parsed Data Structures',['../md_README.html#autotoc_md34',1,'']]],
['support_21',['Parser Support',['../md_README.html#autotoc_md72',1,'']]],
['supported_20dbc_20syntax_22',['Supported DBC Syntax',['../md_README.html#autotoc_md75',1,'']]],
['syntax_23',['Supported DBC Syntax',['../md_README.html#autotoc_md75',1,'']]]
];
+34 -9
View File
@@ -1,12 +1,37 @@
var searchData=
[
['ubuntu_0',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['ui_20path_1',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['ui_20tree_2',['Build UI tree',['../md_README.html#autotoc_md96',1,'']]],
['ui_20tree_20layer_3',['UI Tree Layer',['../md_README.html#autotoc_md41',1,'']]],
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md100',1,'']]],
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
['unreleased_6',['Unreleased',['../md_changelog.html#autotoc_md1',1,'']]],
['usage_7',['Example Usage',['../md_README.html#autotoc_md94',1,'']]],
['use_20in_20frametap_8',['Intended Use in FrameTap',['../md_README.html#autotoc_md104',1,'']]]
['tests_0',['tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md129',1,'Regression tests'],['../md_tests_2README.html#autotoc_md137',1,'Tree and optional model tests']]],
['tests_20without_20qt_1',['Standalone tree tests without Qt',['../md_README.html#autotoc_md125',1,'']]],
['the_20demo_2',['Build and run the demo',['../md_README.html#autotoc_md126',1,'']]],
['the_20gcc_20coverage_20build_20in_20qt_20creator_3',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md132',1,'']]],
['the_20runtime_20decode_20layer_20exists_4',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['the_20tree_20is_20not_20enough_5',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]],
['trace_20path_6',['trace path',['../md_README.html#autotoc_md104',1,'']]],
['transmitter_7',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
['tree_8',['Build UI tree',['../md_README.html#autotoc_md98',1,'']]],
['tree_20and_20optional_20model_20tests_9',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md137',1,'']]],
['tree_20is_20not_20enough_10',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]],
['tree_20layer_11',['UI Tree Layer',['../md_README.html#autotoc_md41',1,'']]],
['tree_20tests_20without_20qt_12',['Standalone tree tests without Qt',['../md_README.html#autotoc_md125',1,'']]],
['tree_5fnode_2ecpp_13',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
['tree_5fnode_2eh_14',['tree_node.h',['../tree__node_8h.html',1,'']]],
['treenode_15',['treenode',['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode()'],['../classTreeNode.html',1,'TreeNode'],['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &amp;frame)']]],
['treenode_20tt_16',['&lt;tt&gt;TreeNode&lt;/tt&gt;',['../md_README.html#autotoc_md42',1,'']]],
['tt_20byteorder_20tt_17',['&lt;tt&gt;ByteOrder&lt;/tt&gt;',['../md_README.html#autotoc_md47',1,'']]],
['tt_20dbcdatabase_20tt_18',['&lt;tt&gt;DbcDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md39',1,'']]],
['tt_20dbcdecoder_20tt_19',['&lt;tt&gt;DbcDecoder&lt;/tt&gt;',['../md_README.html#autotoc_md70',1,'']]],
['tt_20decodedatabase_20tt_20',['&lt;tt&gt;DecodeDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md57',1,'']]],
['tt_20decodedframevalue_20tt_21',['&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;',['../md_README.html#autotoc_md66',1,'']]],
['tt_20decodedsignalvalue_20tt_22',['&lt;tt&gt;DecodedSignalValue&lt;/tt&gt;',['../md_README.html#autotoc_md62',1,'']]],
['tt_20decodeframe_20tt_23',['&lt;tt&gt;DecodeFrame&lt;/tt&gt;',['../md_README.html#autotoc_md53',1,'']]],
['tt_20decodesignal_20tt_24',['&lt;tt&gt;DecodeSignal&lt;/tt&gt;',['../md_README.html#autotoc_md51',1,'']]],
['tt_20frameinfo_20tt_25',['&lt;tt&gt;FrameInfo&lt;/tt&gt;',['../md_README.html#autotoc_md37',1,'']]],
['tt_20framekey_20tt_26',['&lt;tt&gt;FrameKey&lt;/tt&gt;',['../md_README.html#autotoc_md55',1,'']]],
['tt_20rawcanframe_20tt_27',['&lt;tt&gt;RawCanFrame&lt;/tt&gt;',['../md_README.html#autotoc_md60',1,'']]],
['tt_20signalinfo_20tt_28',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md35',1,'']]],
['tt_20treenode_20tt_29',['&lt;tt&gt;TreeNode&lt;/tt&gt;',['../md_README.html#autotoc_md42',1,'']]],
['tt_20val_5f_20tt_30',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md112',1,'']]],
['tt_20valuetype_20tt_31',['&lt;tt&gt;ValueType&lt;/tt&gt;',['../md_README.html#autotoc_md49',1,'']]],
['typefactory_32',['TypeFactory',['../classTypeFactory.html',1,'']]],
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_33',['TypeFactory&lt; std::string, DbcStatementHandler &gt;',['../classTypeFactory.html',1,'']]]
];
+9 -10
View File
@@ -1,13 +1,12 @@
var searchData=
[
['v1_200_20—_202026_2006_2014_0',['v1.0 — 2026-06-14',['../md_changelog.html#autotoc_md18',1,'']]],
['val_5f_20tt_1',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md110',1,'']]],
['valid_2',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
['validation_20and_20parse_20errors_3',['validation and parse errors',['../md_README.html#autotoc_md76',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md80',1,'Signal validation and parse errors']]],
['value_20descriptions_20tt_20val_5f_20tt_4',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md110',1,'']]],
['value_20representation_20and_20precision_5',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['valuedescriptions_6',['valuedescriptions',['../structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff',1,'DecodeSignal::valueDescriptions'],['../structSignalInfo.html#a43f47d0433d0cc39076bd7278b46af9c',1,'SignalInfo::valueDescriptions']]],
['valuetype_7',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType:&#160;decode_database.h']]],
['valuetype_20tt_8',['&lt;tt&gt;ValueType&lt;/tt&gt;',['../md_README.html#autotoc_md49',1,'']]],
['variants_20in_20qt_20creator_9',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md131',1,'']]]
['ubuntu_0',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['ui_20path_1',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['ui_20tree_2',['Build UI tree',['../md_README.html#autotoc_md98',1,'']]],
['ui_20tree_20layer_3',['UI Tree Layer',['../md_README.html#autotoc_md41',1,'']]],
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md102',1,'']]],
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
['unreleased_6',['Unreleased',['../md_changelog.html#autotoc_md1',1,'']]],
['usage_7',['Example Usage',['../md_README.html#autotoc_md96',1,'']]],
['use_20in_20frametap_8',['Intended Use in FrameTap',['../md_README.html#autotoc_md106',1,'']]]
];
+10 -4
View File
@@ -1,7 +1,13 @@
var searchData=
[
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]],
['without_20qt_2',['Standalone tree tests without Qt',['../md_README.html#autotoc_md123',1,'']]],
['without_20qt_20libraries_3',['Build core without Qt libraries',['../md_README.html#autotoc_md121',1,'']]]
['v1_200_20—_202026_2006_2014_0',['v1.0 — 2026-06-14',['../md_changelog.html#autotoc_md18',1,'']]],
['val_5f_20tt_1',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md112',1,'']]],
['valid_2',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
['validation_20and_20parse_20errors_3',['validation and parse errors',['../md_README.html#autotoc_md78',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md82',1,'Signal validation and parse errors']]],
['value_20descriptions_20tt_20val_5f_20tt_4',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md112',1,'']]],
['value_20representation_20and_20precision_5',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['valuedescriptions_6',['valuedescriptions',['../structDecodeSignal.html#a822155d9bf4ed5f3300c9e9befe606ff',1,'DecodeSignal::valueDescriptions'],['../structSignalInfo.html#a43f47d0433d0cc39076bd7278b46af9c',1,'SignalInfo::valueDescriptions']]],
['valuetype_7',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType:&#160;decode_database.h']]],
['valuetype_20tt_8',['&lt;tt&gt;ValueType&lt;/tt&gt;',['../md_README.html#autotoc_md49',1,'']]],
['variants_20in_20qt_20creator_9',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md133',1,'']]]
];
+4 -2
View File
@@ -1,5 +1,7 @@
var searchData=
[
['—_202026_2003_2013_0',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['—_202026_2006_2014_1',['v1.0 — 2026-06-14',['../md_changelog.html#autotoc_md18',1,'']]]
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]],
['without_20qt_2',['Standalone tree tests without Qt',['../md_README.html#autotoc_md125',1,'']]],
['without_20qt_20libraries_3',['Build core without Qt libraries',['../md_README.html#autotoc_md123',1,'']]]
];
+5
View File
@@ -0,0 +1,5 @@
var searchData=
[
['—_202026_2003_2013_0',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['—_202026_2006_2014_1',['v1.0 — 2026-06-14',['../md_changelog.html#autotoc_md18',1,'']]]
];
+1 -1
View File
@@ -1,6 +1,6 @@
var searchData=
[
['2_0',['Stage 2',['../md_README.html#autotoc_md116',1,'']]],
['2_0',['Stage 2',['../md_README.html#autotoc_md118',1,'']]],
['2_20runtime_20decode_20path_1',['2. Runtime decode path',['../md_README.html#autotoc_md28',1,'']]],
['2026_2003_2013_2',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['2026_2006_2014_3',['v1.0 — 2026-06-14',['../md_changelog.html#autotoc_md18',1,'']]],
+1 -1
View File
@@ -1,4 +1,4 @@
var searchData=
[
['3_0',['Stage 3',['../md_README.html#autotoc_md117',1,'']]]
['3_0',['Stage 3',['../md_README.html#autotoc_md119',1,'']]]
];
+1 -1
View File
@@ -1,4 +1,4 @@
var searchData=
[
['4_0',['Stage 4',['../md_README.html#autotoc_md118',1,'']]]
['4_0',['Stage 4',['../md_README.html#autotoc_md120',1,'']]]
];
+18 -15
View File
@@ -1,21 +1,24 @@
var searchData=
[
['a_20raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md98',1,'']]],
['adapter_1',['Optional Qt model adapter',['../md_README.html#autotoc_md122',1,'']]],
['a_20raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md100',1,'']]],
['adapter_1',['Optional Qt model adapter',['../md_README.html#autotoc_md124',1,'']]],
['addchild_2',['AddChild',['../classTreeNode.html#a6161f2ebb92184eab4215d121870e788',1,'TreeNode']]],
['added_3',['added',['../md_changelog.html#autotoc_md3',1,'Added'],['../md_changelog.html#autotoc_md6',1,'Added'],['../md_changelog.html#autotoc_md10',1,'Added'],['../md_changelog.html#autotoc_md21',1,'Added']]],
['additional_20regression_20coverage_4',['Additional regression coverage',['../md_tests_2README.html#autotoc_md136',1,'']]],
['all_20build_20variants_20in_20qt_20creator_5',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md131',1,'']]],
['already_20implemented_6',['Stage 1 - already implemented',['../md_README.html#autotoc_md115',1,'']]],
['and_20lcov_20on_20debian_20ubuntu_7',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['and_20maintenance_8',['and maintenance',['../md_changelog.html#autotoc_md14',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md22',1,'Documentation and maintenance']]],
['and_20motorola_20extraction_9',['Intel and Motorola Extraction',['../md_README.html#autotoc_md92',1,'']]],
['and_20optional_20model_20tests_10',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md135',1,'']]],
['and_20parse_20errors_11',['and parse errors',['../md_README.html#autotoc_md76',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md80',1,'Signal validation and parse errors']]],
['additional_20regression_20coverage_4',['Additional regression coverage',['../md_tests_2README.html#autotoc_md138',1,'']]],
['all_20build_20variants_20in_20qt_20creator_5',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md133',1,'']]],
['already_20implemented_6',['Stage 1 - already implemented',['../md_README.html#autotoc_md117',1,'']]],
['and_20lcov_20on_20debian_20ubuntu_7',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['and_20maintenance_8',['and maintenance',['../md_changelog.html#autotoc_md22',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md14',1,'Documentation and maintenance']]],
['and_20motorola_20extraction_9',['Intel and Motorola Extraction',['../md_README.html#autotoc_md94',1,'']]],
['and_20optional_20model_20tests_10',['Tree and optional model tests',['../md_tests_2README.html#autotoc_md137',1,'']]],
['and_20parse_20errors_11',['and parse errors',['../md_README.html#autotoc_md78',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md82',1,'Signal validation and parse errors']]],
['and_20precision_12',['Raw value representation and precision',['../md_README.html#autotoc_md64',1,'']]],
['and_20run_20the_20demo_13',['Build and run the demo',['../md_README.html#autotoc_md124',1,'']]],
['and_20runtime_20decode_20module_20documentation_14',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['and_20ui_20path_15',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['api_20documentation_16',['Generate API documentation',['../md_README.html#autotoc_md125',1,'']]],
['architecture_17',['High-Level Architecture',['../md_README.html#autotoc_md26',1,'']]]
['and_20reload_13',['Definition ownership and reload',['../md_README.html#autotoc_md67',1,'']]],
['and_20reload_20coverage_14',['Definition lifetime and reload coverage',['../md_tests_2README.html#autotoc_md139',1,'']]],
['and_20run_20the_20demo_15',['Build and run the demo',['../md_README.html#autotoc_md126',1,'']]],
['and_20runtime_20decode_20module_20documentation_16',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['and_20signal_20identifiers_17',['Stable frame and signal identifiers',['../md_README.html#autotoc_md68',1,'']]],
['and_20ui_20path_18',['1. Parse and UI path',['../md_README.html#autotoc_md27',1,'']]],
['api_20documentation_19',['Generate API documentation',['../md_README.html#autotoc_md127',1,'']]],
['architecture_20',['High-Level Architecture',['../md_README.html#autotoc_md26',1,'']]]
];
+8 -8
View File
@@ -1,14 +1,14 @@
var searchData=
[
['basic_20multiplexing_0',['Basic multiplexing',['../md_README.html#autotoc_md82',1,'']]],
['basic_20multiplexing_0',['Basic multiplexing',['../md_README.html#autotoc_md84',1,'']]],
['build_1',['build',['../classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b',1,'DbcDecodeBuilder::Build()'],['../classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b',1,'DbcTreeBuilder::Build()']]],
['build_20and_20run_20the_20demo_2',['Build and run the demo',['../md_README.html#autotoc_md124',1,'']]],
['build_20core_20without_20qt_20libraries_3',['Build core without Qt libraries',['../md_README.html#autotoc_md121',1,'']]],
['build_20in_20qt_20creator_4',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md130',1,'']]],
['build_20integration_5',['Build Integration',['../md_README.html#autotoc_md120',1,'']]],
['build_20runtime_20decode_20database_6',['Build runtime decode database',['../md_README.html#autotoc_md97',1,'']]],
['build_20ui_20tree_7',['Build UI tree',['../md_README.html#autotoc_md96',1,'']]],
['build_20variants_20in_20qt_20creator_8',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md131',1,'']]],
['build_20and_20run_20the_20demo_2',['Build and run the demo',['../md_README.html#autotoc_md126',1,'']]],
['build_20core_20without_20qt_20libraries_3',['Build core without Qt libraries',['../md_README.html#autotoc_md123',1,'']]],
['build_20in_20qt_20creator_4',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md132',1,'']]],
['build_20integration_5',['Build Integration',['../md_README.html#autotoc_md122',1,'']]],
['build_20runtime_20decode_20database_6',['Build runtime decode database',['../md_README.html#autotoc_md99',1,'']]],
['build_20ui_20tree_7',['Build UI tree',['../md_README.html#autotoc_md98',1,'']]],
['build_20variants_20in_20qt_20creator_8',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md133',1,'']]],
['byteorder_9',['byteorder',['../structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d',1,'DecodeSignal::byteOrder'],['../decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b',1,'ByteOrder:&#160;decode_database.h']]],
['byteorder_20tt_10',['&lt;tt&gt;ByteOrder&lt;/tt&gt;',['../md_README.html#autotoc_md47',1,'']]]
];
+12 -12
View File
@@ -1,19 +1,19 @@
var searchData=
[
['can_20id_20normalization_0',['CAN ID Normalization',['../md_README.html#autotoc_md86',1,'']]],
['can_20id_20normalization_0',['CAN ID Normalization',['../md_README.html#autotoc_md88',1,'']]],
['canid_1',['canid',['../structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf',1,'DecodeFrame::canId'],['../structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e',1,'FrameInfo::canId'],['../structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4',1,'RawCanFrame::canId']]],
['changed_2',['changed',['../md_changelog.html#autotoc_md16',1,'Changed'],['../md_changelog.html#autotoc_md12',1,'Changed'],['../md_changelog.html#autotoc_md7',1,'Changed'],['../md_changelog.html#autotoc_md4',1,'Changed']]],
['changed_2',['changed',['../md_changelog.html#autotoc_md4',1,'Changed'],['../md_changelog.html#autotoc_md7',1,'Changed'],['../md_changelog.html#autotoc_md12',1,'Changed'],['../md_changelog.html#autotoc_md16',1,'Changed']]],
['changelog_3',['Changelog',['../md_changelog.html',1,'']]],
['code_20coverage_4',['Measuring code coverage',['../md_README.html#autotoc_md128',1,'']]],
['comment_5',['comment',['../structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5',1,'SignalInfo::comment'],['../structFrameInfo.html#ace75121294f9d89b762080ab5643293c',1,'FrameInfo::comment'],['../structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22',1,'DecodeFrame::comment'],['../structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473',1,'DecodeSignal::comment']]],
['comments_6',['Comments',['../md_README.html#autotoc_md84',1,'']]],
['configure_20all_20build_20variants_20in_20qt_20creator_7',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md131',1,'']]],
['configure_20the_20gcc_20coverage_20build_20in_20qt_20creator_8',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md130',1,'']]],
['code_20coverage_4',['Measuring code coverage',['../md_README.html#autotoc_md130',1,'']]],
['comment_5',['comment',['../structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473',1,'DecodeSignal::comment'],['../structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22',1,'DecodeFrame::comment'],['../structFrameInfo.html#ace75121294f9d89b762080ab5643293c',1,'FrameInfo::comment'],['../structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5',1,'SignalInfo::comment']]],
['comments_6',['Comments',['../md_README.html#autotoc_md86',1,'']]],
['configure_20all_20build_20variants_20in_20qt_20creator_7',['Configure all build variants in Qt Creator',['../md_README.html#autotoc_md133',1,'']]],
['configure_20the_20gcc_20coverage_20build_20in_20qt_20creator_8',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md132',1,'']]],
['contains_9',['contains',['../classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4',1,'TypeFactory']]],
['core_20without_20qt_20libraries_10',['Build core without Qt libraries',['../md_README.html#autotoc_md121',1,'']]],
['coverage_11',['coverage',['../md_tests_2README.html#autotoc_md136',1,'Additional regression coverage'],['../md_tests_2README.html#autotoc_md133',1,'Decoder coverage'],['../md_README.html#autotoc_md128',1,'Measuring code coverage'],['../md_tests_2README.html#autotoc_md134',1,'Parser coverage']]],
['coverage_20build_20in_20qt_20creator_12',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md130',1,'']]],
['core_20without_20qt_20libraries_10',['Build core without Qt libraries',['../md_README.html#autotoc_md123',1,'']]],
['coverage_11',['coverage',['../md_tests_2README.html#autotoc_md138',1,'Additional regression coverage'],['../md_tests_2README.html#autotoc_md135',1,'Decoder coverage'],['../md_tests_2README.html#autotoc_md139',1,'Definition lifetime and reload coverage'],['../md_README.html#autotoc_md130',1,'Measuring code coverage'],['../md_tests_2README.html#autotoc_md136',1,'Parser coverage']]],
['coverage_20build_20in_20qt_20creator_12',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md132',1,'']]],
['create_13',['create',['../classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f',1,'TypeFactory']]],
['creator_14',['creator',['../md_README.html#autotoc_md131',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md130',1,'Configure the GCC coverage build in Qt Creator'],['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory::creator()']]],
['current_20limitations_15',['Current Limitations',['../md_README.html#autotoc_md112',1,'']]]
['creator_14',['creator',['../md_README.html#autotoc_md133',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md132',1,'Configure the GCC coverage build in Qt Creator'],['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory::creator()']]],
['current_20limitations_15',['Current Limitations',['../md_README.html#autotoc_md114',1,'']]]
];
+21 -19
View File
@@ -2,10 +2,10 @@ var searchData=
[
['data_0',['data',['../structRawCanFrame.html#a0acb487612104c99c9907344c035df83',1,'RawCanFrame']]],
['data_20structures_1',['Parsed Data Structures',['../md_README.html#autotoc_md34',1,'']]],
['database_2',['Build runtime decode database',['../md_README.html#autotoc_md97',1,'']]],
['dbc_3',['Parse DBC',['../md_README.html#autotoc_md95',1,'']]],
['database_2',['Build runtime decode database',['../md_README.html#autotoc_md99',1,'']]],
['dbc_3',['Parse DBC',['../md_README.html#autotoc_md97',1,'']]],
['dbc_20parser_20and_20runtime_20decode_20module_20documentation_4',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['dbc_20syntax_5',['Supported DBC Syntax',['../md_README.html#autotoc_md73',1,'']]],
['dbc_20syntax_5',['Supported DBC Syntax',['../md_README.html#autotoc_md75',1,'']]],
['dbc_5fdatabase_2eh_6',['dbc_database.h',['../dbc__database_8h.html',1,'']]],
['dbc_5fdecode_5fbuilder_2ecpp_7',['dbc_decode_builder.cpp',['../dbc__decode__builder_8cpp.html',1,'']]],
['dbc_5fdecode_5fbuilder_2eh_8',['dbc_decode_builder.h',['../dbc__decode__builder_8h.html',1,'']]],
@@ -20,7 +20,7 @@ var searchData=
['dbcdatabase_20tt_17',['&lt;tt&gt;DbcDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md39',1,'']]],
['dbcdecodebuilder_18',['DbcDecodeBuilder',['../classDbcDecodeBuilder.html',1,'']]],
['dbcdecoder_19',['DbcDecoder',['../classDbcDecoder.html',1,'']]],
['dbcdecoder_20tt_20',['&lt;tt&gt;DbcDecoder&lt;/tt&gt;',['../md_README.html#autotoc_md68',1,'']]],
['dbcdecoder_20tt_20',['&lt;tt&gt;DbcDecoder&lt;/tt&gt;',['../md_README.html#autotoc_md70',1,'']]],
['dbcdiagnostic_21',['DbcDiagnostic',['../structDbcDiagnostic.html',1,'']]],
['dbcdiagnosticerror_22',['DbcDiagnosticError',['../classDbcDiagnosticError.html',1,'']]],
['dbcframehandler_23',['DbcFrameHandler',['../classDbcFrameHandler.html',1,'']]],
@@ -35,18 +35,18 @@ var searchData=
['dbctreemodel_32',['DbcTreeModel',['../classDbcTreeModel.html',1,'']]],
['dbcunsupportedmultiplexinghandler_33',['DbcUnsupportedMultiplexingHandler',['../classDbcUnsupportedMultiplexingHandler.html',1,'']]],
['dbcvaluedescriptionhandler_34',['DbcValueDescriptionHandler',['../classDbcValueDescriptionHandler.html',1,'']]],
['debian_20ubuntu_35',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['debian_20ubuntu_35',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['decode_36',['Decode',['../classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7',1,'DbcDecoder']]],
['decode_20a_20raw_20frame_37',['Decode a raw frame',['../md_README.html#autotoc_md98',1,'']]],
['decode_20database_38',['Build runtime decode database',['../md_README.html#autotoc_md97',1,'']]],
['decode_20flow_39',['Decode Flow',['../md_README.html#autotoc_md90',1,'']]],
['decode_20a_20raw_20frame_37',['Decode a raw frame',['../md_README.html#autotoc_md100',1,'']]],
['decode_20database_38',['Build runtime decode database',['../md_README.html#autotoc_md99',1,'']]],
['decode_20flow_39',['Decode Flow',['../md_README.html#autotoc_md92',1,'']]],
['decode_20layer_40',['Runtime Decode Layer',['../md_README.html#autotoc_md44',1,'']]],
['decode_20layer_20exists_41',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['decode_20module_20documentation_42',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
['decode_20path_43',['2. Runtime decode path',['../md_README.html#autotoc_md28',1,'']]],
['decode_20strategy_44',['Unified Decode Strategy',['../md_README.html#autotoc_md100',1,'']]],
['decode_20strategy_44',['Unified Decode Strategy',['../md_README.html#autotoc_md102',1,'']]],
['decode_5fdatabase_2eh_45',['decode_database.h',['../decode__database_8h.html',1,'']]],
['decodedatabase_46',['DecodeDatabase',['../structDecodeDatabase.html',1,'']]],
['decodedatabase_46',['decodedatabase',['../classDecodeDatabase.html',1,'DecodeDatabase'],['../classDecodeDatabase.html#aa935a3a0d334f932d6a8c89a3818286a',1,'DecodeDatabase::DecodeDatabase()']]],
['decodedatabase_20tt_47',['&lt;tt&gt;DecodeDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md57',1,'']]],
['decodedframevalue_48',['DecodedFrameValue',['../structDecodedFrameValue.html',1,'']]],
['decodedframevalue_20tt_49',['&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;',['../md_README.html#autotoc_md66',1,'']]],
@@ -54,16 +54,18 @@ var searchData=
['decodedsignalvalue_20tt_51',['&lt;tt&gt;DecodedSignalValue&lt;/tt&gt;',['../md_README.html#autotoc_md62',1,'']]],
['decodeframe_52',['DecodeFrame',['../structDecodeFrame.html',1,'']]],
['decodeframe_20tt_53',['&lt;tt&gt;DecodeFrame&lt;/tt&gt;',['../md_README.html#autotoc_md53',1,'']]],
['decoder_20coverage_54',['Decoder coverage',['../md_tests_2README.html#autotoc_md133',1,'']]],
['decoder_20coverage_54',['Decoder coverage',['../md_tests_2README.html#autotoc_md135',1,'']]],
['decoder_20layer_55',['Decoder Layer',['../md_README.html#autotoc_md59',1,'']]],
['decodesignal_56',['DecodeSignal',['../structDecodeSignal.html',1,'']]],
['decodesignal_20tt_57',['&lt;tt&gt;DecodeSignal&lt;/tt&gt;',['../md_README.html#autotoc_md51',1,'']]],
['definition_58',['definition',['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition'],['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition'],['../md_README.html#autotoc_md74',1,'Frame definition'],['../md_README.html#autotoc_md78',1,'Signal definition']]],
['demo_59',['Build and run the demo',['../md_README.html#autotoc_md124',1,'']]],
['descriptions_20tt_20val_5f_20tt_60',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md110',1,'']]],
['diagnostics_61',['Structured diagnostics',['../md_README.html#autotoc_md71',1,'']]],
['dispatch_62',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
['dlc_63',['dlc',['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc'],['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc']]],
['documentation_64',['documentation',['../md_README.html',1,'DBC Parser and Runtime Decode Module Documentation'],['../md_changelog.html#autotoc_md19',1,'Documentation'],['../md_README.html#autotoc_md125',1,'Generate API documentation']]],
['documentation_20and_20maintenance_65',['documentation and maintenance',['../md_changelog.html#autotoc_md14',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md22',1,'Documentation and maintenance']]]
['definition_58',['definition',['../structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d',1,'DecodedFrameValue::definition'],['../structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2',1,'DecodedSignalValue::definition'],['../md_README.html#autotoc_md76',1,'Frame definition'],['../md_README.html#autotoc_md80',1,'Signal definition']]],
['definition_20lifetime_20and_20reload_20coverage_59',['Definition lifetime and reload coverage',['../md_tests_2README.html#autotoc_md139',1,'']]],
['definition_20ownership_20and_20reload_60',['Definition ownership and reload',['../md_README.html#autotoc_md67',1,'']]],
['demo_61',['Build and run the demo',['../md_README.html#autotoc_md126',1,'']]],
['descriptions_20tt_20val_5f_20tt_62',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md112',1,'']]],
['diagnostics_63',['Structured diagnostics',['../md_README.html#autotoc_md73',1,'']]],
['dispatch_64',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
['dlc_65',['dlc',['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc'],['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc']]],
['documentation_66',['documentation',['../md_README.html',1,'DBC Parser and Runtime Decode Module Documentation'],['../md_changelog.html#autotoc_md19',1,'Documentation'],['../md_README.html#autotoc_md127',1,'Generate API documentation']]],
['documentation_20and_20maintenance_67',['documentation and maintenance',['../md_changelog.html#autotoc_md22',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md14',1,'Documentation and maintenance']]]
];
+4 -4
View File
@@ -1,9 +1,9 @@
var searchData=
[
['enough_0',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]],
['errors_1',['errors',['../md_README.html#autotoc_md76',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md80',1,'Signal validation and parse errors']]],
['example_20usage_2',['Example Usage',['../md_README.html#autotoc_md94',1,'']]],
['enough_0',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]],
['errors_1',['errors',['../md_README.html#autotoc_md78',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md82',1,'Signal validation and parse errors']]],
['example_20usage_2',['Example Usage',['../md_README.html#autotoc_md96',1,'']]],
['examples_2fmain_2ecpp_3',['main.cpp',['../examples_2main_8cpp.html',1,'']]],
['exists_4',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['extraction_5',['extraction',['../md_README.html#autotoc_md92',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md88',1,'PGN Extraction']]]
['extraction_5',['extraction',['../md_README.html#autotoc_md94',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md90',1,'PGN Extraction']]]
];
+15 -14
View File
@@ -1,19 +1,20 @@
var searchData=
[
['factor_0',['factor',['../structDecodeSignal.html#a428c39913a366a8476dd291061354391',1,'DecodeSignal::factor'],['../structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499',1,'SignalInfo::factor']]],
['factory_1',['Statement Handler Factory',['../md_README.html#autotoc_md108',1,'']]],
['findframe_2',['FindFrame',['../classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da',1,'DbcDecoder']]],
['factory_1',['Statement Handler Factory',['../md_README.html#autotoc_md110',1,'']]],
['findframe_2',['findframe',['../classDbcDecoder.html#a4005c4311f57b7faf21c0cb31463039c',1,'DbcDecoder::FindFrame()'],['../classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970',1,'DecodeDatabase::FindFrame()']]],
['fixed_3',['fixed',['../md_changelog.html#autotoc_md13',1,'Fixed'],['../md_changelog.html#autotoc_md17',1,'Fixed'],['../md_changelog.html#autotoc_md8',1,'Fixed']]],
['flow_4',['Decode Flow',['../md_README.html#autotoc_md90',1,'']]],
['frame_5',['Decode a raw frame',['../md_README.html#autotoc_md98',1,'']]],
['frame_20definition_6',['Frame definition',['../md_README.html#autotoc_md74',1,'']]],
['frame_20validation_20and_20parse_20errors_7',['Frame validation and parse errors',['../md_README.html#autotoc_md76',1,'']]],
['frame_5finfo_2eh_8',['frame_info.h',['../frame__info_8h.html',1,'']]],
['frameinfo_9',['FrameInfo',['../structFrameInfo.html',1,'']]],
['frameinfo_20tt_10',['&lt;tt&gt;FrameInfo&lt;/tt&gt;',['../md_README.html#autotoc_md37',1,'']]],
['framekey_11',['FrameKey',['../structFrameKey.html',1,'']]],
['framekey_20tt_12',['&lt;tt&gt;FrameKey&lt;/tt&gt;',['../md_README.html#autotoc_md55',1,'']]],
['framekeyhasher_13',['FrameKeyHasher',['../structFrameKeyHasher.html',1,'']]],
['frames_14',['frames',['../structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b',1,'DbcDatabase']]],
['frametap_15',['Intended Use in FrameTap',['../md_README.html#autotoc_md104',1,'']]]
['flow_4',['Decode Flow',['../md_README.html#autotoc_md92',1,'']]],
['frame_5',['Decode a raw frame',['../md_README.html#autotoc_md100',1,'']]],
['frame_20and_20signal_20identifiers_6',['Stable frame and signal identifiers',['../md_README.html#autotoc_md68',1,'']]],
['frame_20definition_7',['Frame definition',['../md_README.html#autotoc_md76',1,'']]],
['frame_20validation_20and_20parse_20errors_8',['Frame validation and parse errors',['../md_README.html#autotoc_md78',1,'']]],
['frame_5finfo_2eh_9',['frame_info.h',['../frame__info_8h.html',1,'']]],
['frameinfo_10',['FrameInfo',['../structFrameInfo.html',1,'']]],
['frameinfo_20tt_11',['&lt;tt&gt;FrameInfo&lt;/tt&gt;',['../md_README.html#autotoc_md37',1,'']]],
['framekey_12',['FrameKey',['../structFrameKey.html',1,'']]],
['framekey_20tt_13',['&lt;tt&gt;FrameKey&lt;/tt&gt;',['../md_README.html#autotoc_md55',1,'']]],
['framekeyhasher_14',['FrameKeyHasher',['../structFrameKeyHasher.html',1,'']]],
['frames_15',['frames',['../structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b',1,'DbcDatabase']]],
['frametap_16',['Intended Use in FrameTap',['../md_README.html#autotoc_md106',1,'']]]
];
+11 -10
View File
@@ -1,16 +1,17 @@
var searchData=
[
['gcc_20coverage_20build_20in_20qt_20creator_0',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md130',1,'']]],
['gcc_20gcov_20and_20lcov_20on_20debian_20ubuntu_1',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['gcov_20and_20lcov_20on_20debian_20ubuntu_2',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['generate_20api_20documentation_3',['Generate API documentation',['../md_README.html#autotoc_md125',1,'']]],
['gcc_20coverage_20build_20in_20qt_20creator_0',['Configure the GCC coverage build in Qt Creator',['../md_README.html#autotoc_md132',1,'']]],
['gcc_20gcov_20and_20lcov_20on_20debian_20ubuntu_1',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['gcov_20and_20lcov_20on_20debian_20ubuntu_2',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md131',1,'']]],
['generate_20api_20documentation_3',['Generate API documentation',['../md_README.html#autotoc_md127',1,'']]],
['getchild_4',['getchild',['../classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6',1,'TreeNode::GetChild(std::size_t index) const'],['../classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f',1,'TreeNode::GetChild(std::size_t index)']]],
['getchildcount_5',['GetChildCount',['../classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea',1,'TreeNode']]],
['getframe_6',['GetFrame',['../classTreeNode.html#afc503b40004764163605d6dbdb4ef811',1,'TreeNode']]],
['getname_7',['GetName',['../classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18',1,'TreeNode']]],
['getparent_8',['GetParent',['../classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f',1,'TreeNode']]],
['getrow_9',['GetRow',['../classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8',1,'TreeNode']]],
['getsignal_10',['GetSignal',['../classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1',1,'TreeNode']]],
['gettype_11',['GetType',['../classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9',1,'TreeNode']]],
['getvaluedescription_12',['GetValueDescription',['../structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2',1,'DecodedSignalValue']]]
['getframes_7',['GetFrames',['../classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8',1,'DecodeDatabase']]],
['getname_8',['GetName',['../classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18',1,'TreeNode']]],
['getparent_9',['GetParent',['../classTreeNode.html#aa48fbc17903eb8cfa40353e29f853c6f',1,'TreeNode']]],
['getrow_10',['GetRow',['../classTreeNode.html#ad501f97eeec7f7d3353bfae838fbb6a8',1,'TreeNode']]],
['getsignal_11',['GetSignal',['../classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1',1,'TreeNode']]],
['gettype_12',['GetType',['../classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9',1,'TreeNode']]],
['getvaluedescription_13',['GetValueDescription',['../structDecodedSignalValue.html#affc38af1bf31bcb6f2c33044bce92bd2',1,'DecodedSignalValue']]]
];
+1 -1
View File
@@ -1,6 +1,6 @@
var searchData=
[
['handler_20factory_0',['Statement Handler Factory',['../md_README.html#autotoc_md108',1,'']]],
['handler_20factory_0',['Statement Handler Factory',['../md_README.html#autotoc_md110',1,'']]],
['haspgn_1',['haspgn',['../structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d',1,'DecodeFrame::hasPgn'],['../structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d',1,'FrameInfo::hasPgn']]],
['high_20level_20architecture_2',['High-Level Architecture',['../md_README.html#autotoc_md26',1,'']]]
];
+14 -13
View File
@@ -1,16 +1,17 @@
var searchData=
[
['id_20normalization_0',['CAN ID Normalization',['../md_README.html#autotoc_md86',1,'']]],
['implementation_20—_202026_2003_2013_1',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['implemented_2',['Stage 1 - already implemented',['../md_README.html#autotoc_md115',1,'']]],
['in_20frametap_3',['Intended Use in FrameTap',['../md_README.html#autotoc_md104',1,'']]],
['in_20qt_20creator_4',['in qt creator',['../md_README.html#autotoc_md131',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md130',1,'Configure the GCC coverage build in Qt Creator']]],
['initial_20implementation_20—_202026_2003_2013_5',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['integration_6',['Build Integration',['../md_README.html#autotoc_md120',1,'']]],
['intel_20and_20motorola_20extraction_7',['Intel and Motorola Extraction',['../md_README.html#autotoc_md92',1,'']]],
['intended_20use_20in_20frametap_8',['Intended Use in FrameTap',['../md_README.html#autotoc_md104',1,'']]],
['is_20not_20enough_9',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md106',1,'']]],
['isextended_10',['isextended',['../structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7',1,'RawCanFrame::isExtended'],['../structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41',1,'DecodeFrame::isExtended'],['../structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf',1,'FrameInfo::isExtended']]],
['islittleendian_11',['isLittleEndian',['../structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c',1,'SignalInfo']]],
['issigned_12',['isSigned',['../structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f',1,'SignalInfo']]]
['id_20normalization_0',['CAN ID Normalization',['../md_README.html#autotoc_md88',1,'']]],
['identifiers_1',['Stable frame and signal identifiers',['../md_README.html#autotoc_md68',1,'']]],
['implementation_20—_202026_2003_2013_2',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['implemented_3',['Stage 1 - already implemented',['../md_README.html#autotoc_md117',1,'']]],
['in_20frametap_4',['Intended Use in FrameTap',['../md_README.html#autotoc_md106',1,'']]],
['in_20qt_20creator_5',['in qt creator',['../md_README.html#autotoc_md133',1,'Configure all build variants in Qt Creator'],['../md_README.html#autotoc_md132',1,'Configure the GCC coverage build in Qt Creator']]],
['initial_20implementation_20—_202026_2003_2013_6',['Initial implementation — 2026-03-13',['../md_changelog.html#autotoc_md20',1,'']]],
['integration_7',['Build Integration',['../md_README.html#autotoc_md122',1,'']]],
['intel_20and_20motorola_20extraction_8',['Intel and Motorola Extraction',['../md_README.html#autotoc_md94',1,'']]],
['intended_20use_20in_20frametap_9',['Intended Use in FrameTap',['../md_README.html#autotoc_md106',1,'']]],
['is_20not_20enough_10',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md108',1,'']]],
['isextended_11',['isextended',['../structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf',1,'FrameInfo::isExtended'],['../structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41',1,'DecodeFrame::isExtended'],['../structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7',1,'RawCanFrame::isExtended']]],
['islittleendian_12',['isLittleEndian',['../structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c',1,'SignalInfo']]],
['issigned_13',['isSigned',['../structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f',1,'SignalInfo']]]
];
+1 -9
View File
@@ -1,12 +1,4 @@
var searchData=
[
['layer_0',['layer',['../md_README.html#autotoc_md59',1,'Decoder Layer'],['../md_README.html#autotoc_md44',1,'Runtime Decode Layer'],['../md_README.html#autotoc_md41',1,'UI Tree Layer']]],
['layer_20exists_1',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md30',1,'']]],
['layout_2',['Module Layout',['../md_README.html#autotoc_md32',1,'']]],
['lcov_20on_20debian_20ubuntu_3',['GCC, gcov, and LCOV on Debian/Ubuntu',['../md_README.html#autotoc_md129',1,'']]],
['length_4',['length',['../structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb',1,'DecodeSignal::length'],['../structSignalInfo.html#a1008b5201f71848177217bd52fb84baa',1,'SignalInfo::length']]],
['level_20architecture_5',['High-Level Architecture',['../md_README.html#autotoc_md26',1,'']]],
['libraries_6',['Build core without Qt libraries',['../md_README.html#autotoc_md121',1,'']]],
['limitations_7',['Current Limitations',['../md_README.html#autotoc_md112',1,'']]],
['live_20path_8',['live path',['../md_README.html#autotoc_md101',1,'']]]
['key_0',['key',['../structDecodedSignalValue.html#a33df0fcd92b23b3e08539906fc6b4c4a',1,'DecodedSignalValue::key'],['../structDecodedFrameValue.html#a32143efe2023a1ecd977a9ae93e50b73',1,'DecodedFrameValue::key']]]
];
Loaded 100 of 155 files, more files were not shown because too many files have changed in this diff. Show more