244 lines
39 KiB
HTML
244 lines
39 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title>LCOV - coverage.info - core/decode_database.cpp</title>
|
|
<link rel="stylesheet" type="text/css" href="../gcov.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<table width="100%" border=0 cellspacing=0 cellpadding=0>
|
|
<tr><td class="title">LCOV - code coverage report</td></tr>
|
|
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
|
|
|
<tr>
|
|
<td width="100%">
|
|
<table cellpadding=1 border=0 width="100%">
|
|
<tr>
|
|
<td width="10%" class="headerItem">Current view:</td>
|
|
<td width="10%" class="headerValue"><a href="../index.html" title="Click to go to top-level">top level</a> - <a href="index.html" title="Click to go to directory core">core</a> - decode_database.cpp<span style="font-size: 80%;"> (source / <a href="decode_database.cpp.func-c.html" title="Click to go to function table">functions</a>)</span></td>
|
|
<td width="5%"></td>
|
|
<td width="5%"></td>
|
|
<td width="5%" class="headerCovTableHead">Coverage</td>
|
|
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
|
|
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="headerItem">Test:</td>
|
|
<td class="headerValue">coverage.info</td>
|
|
<td></td>
|
|
<td class="headerItem">Lines:</td>
|
|
<td class="headerCovTableEntryHi">99.1 %</td>
|
|
<td class="headerCovTableEntry">110</td>
|
|
<td class="headerCovTableEntry">109</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="headerItem">Test Date:</td>
|
|
<td class="headerValue">2026-10-20 13:34:58</td>
|
|
<td></td>
|
|
<td class="headerItem">Functions:</td>
|
|
<td class="headerCovTableEntryHi">100.0 %</td>
|
|
<td class="headerCovTableEntry">10</td>
|
|
<td class="headerCovTableEntry">10</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
<td class="headerItem">Branches:</td>
|
|
<td class="headerCovTableEntryMed">80.2 %</td>
|
|
<td class="headerCovTableEntry">182</td>
|
|
<td class="headerCovTableEntry">146</td>
|
|
</tr>
|
|
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
|
</table>
|
|
|
|
<table cellpadding=0 cellspacing=0 border=0>
|
|
<tr>
|
|
<td><br></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<pre class="sourceHeading"> Branch data Line data Source code</pre>
|
|
<pre class="source">
|
|
<span id="L1"><span class="lineNum"> 1</span> : : // SPDX-License-Identifier: MIT</span>
|
|
<span id="L2"><span class="lineNum"> 2</span> : : // Copyright (c) 2026 Dim Himro</span>
|
|
<span id="L3"><span class="lineNum"> 3</span> : : </span>
|
|
<span id="L4"><span class="lineNum"> 4</span> : : #include "decode_database.h"</span>
|
|
<span id="L5"><span class="lineNum"> 5</span> : : #include "j1939.h"</span>
|
|
<span id="L6"><span class="lineNum"> 6</span> : : #include "signal_layout.h"</span>
|
|
<span id="L7"><span class="lineNum"> 7</span> : : #include <bitset></span>
|
|
<span id="L8"><span class="lineNum"> 8</span> : : #include <cmath></span>
|
|
<span id="L9"><span class="lineNum"> 9</span> : : #include <limits></span>
|
|
<span id="L10"><span class="lineNum"> 10</span> : : #include <stdexcept></span>
|
|
<span id="L11"><span class="lineNum"> 11</span> : : #include <unordered_set></span>
|
|
<span id="L12"><span class="lineNum"> 12</span> : : </span>
|
|
<span id="L13"><span class="lineNum"> 13</span> : : namespace {</span>
|
|
<span id="L14"><span class="lineNum"> 14</span> : : constexpr std::size_t MaximumPayloadBits = std::numeric_limits<std::uint8_t>::max() * 8U;</span>
|
|
<span id="L15"><span class="lineNum"> 15</span> : : using SignalBits = std::bitset<MaximumPayloadBits>;</span>
|
|
<span id="L16"><span class="lineNum"> 16</span> : : </span>
|
|
<span id="L17"><span class="lineNum"> 17</span> :<span class="tlaGNC"> 2476 : void ValidateSignal(const DecodeSignal &signal, std::uint8_t dlc) {</span></span>
|
|
<span id="L18"><span class="lineNum"> 18</span> [<span class="tlaGBC" title="Branch 0 was taken 1133 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 1343 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1130 times"> + </span>]:<span class="tlaGNC"> 2476 : if (signal.byteOrder != ByteOrder::Intel && signal.byteOrder != ByteOrder::Motorola)</span></span>
|
|
<span id="L19"><span class="lineNum"> 19</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument("Invalid signal byte order: " + signal.name);</span></span>
|
|
<span id="L20"><span class="lineNum"> 20</span> [<span class="tlaGBC" title="Branch 0 was taken 93 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2380 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 90 times"> + </span>]:<span class="tlaGNC"> 2473 : if (signal.valueType != ValueType::Unsigned && signal.valueType != ValueType::Signed)</span></span>
|
|
<span id="L21"><span class="lineNum"> 21</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument("Invalid signal value type: " + signal.name);</span></span>
|
|
<span id="L22"><span class="lineNum"> 22</span> [<span class="tlaGBC" title="Branch 0 was taken 75 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2395 times"> + </span>]:<span class="tlaGNC"> 2470 : if (signal.multiplexing.role != MultiplexRole::Unconditional &&</span></span>
|
|
<span id="L23"><span class="lineNum"> 23</span> [<span class="tlaGBC" title="Branch 0 was taken 38 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 37 times"> + </span>]:<span class="tlaGNC"> 75 : signal.multiplexing.role != MultiplexRole::Selector &&</span></span>
|
|
<span id="L24"><span class="lineNum"> 24</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 34 times"> + </span>]:<span class="tlaGNC"> 38 : signal.multiplexing.role != MultiplexRole::Branch)</span></span>
|
|
<span id="L25"><span class="lineNum"> 25</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::invalid_argument("Invalid multiplexing role: " + signal.name);</span></span>
|
|
<span id="L26"><span class="lineNum"> 26</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2430 times"> + </span>]:<span class="tlaGNC"> 2466 : if (!IsValidSignalLayout(signal.startBit, signal.length,</span></span>
|
|
<span id="L27"><span class="lineNum"> 27</span> :<span class="tlaGNC"> 2466 : signal.byteOrder == ByteOrder::Intel, dlc))</span></span>
|
|
<span id="L28"><span class="lineNum"> 28</span> [<span class="tlaGBC" title="Branch 0 was taken 36 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 36 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 36 : throw std::invalid_argument("Invalid signal length or payload position: " + signal.name);</span></span>
|
|
<span id="L29"><span class="lineNum"> 29</span> [<span class="tlaGBC" title="Branch 0 was taken 2405 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 12 times"> + </span>]:<span class="tlaGNC"> 4847 : if (!std::isfinite(signal.factor) || !std::isfinite(signal.offset) ||</span></span>
|
|
<span id="L30"><span class="lineNum"> 30</span> [<span class="tlaGBC" title="Branch 0 was taken 2417 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 13 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 2399 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 6 times"> + </span> :<span class="tlaGNC"> 7240 : !std::isfinite(signal.minimum) || !std::isfinite(signal.maximum) ||</span></span>
|
|
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2393 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 39 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2391 times"> + </span>]
|
|
<span id="L31"><span class="lineNum"> 31</span> [<span class="tlaGBC" title="Branch 0 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2391 times"> + </span>]:<span class="tlaGNC"> 2393 : signal.minimum > signal.maximum)</span></span>
|
|
<span id="L32"><span class="lineNum"> 32</span> [<span class="tlaGBC" title="Branch 0 was taken 39 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 39 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 39 : throw std::invalid_argument("Invalid signal numeric parameters: " + signal.name);</span></span>
|
|
<span id="L33"><span class="lineNum"> 33</span> :<span class="tlaGNC"> 2391 : }</span></span>
|
|
<span id="L34"><span class="lineNum"> 34</span> : : </span>
|
|
<span id="L35"><span class="lineNum"> 35</span> :<span class="tlaGNC"> 2364 : SignalBits GetSignalBits(const DecodeSignal &signal) {</span></span>
|
|
<span id="L36"><span class="lineNum"> 36</span> :<span class="tlaGNC"> 2364 : SignalBits bits;</span></span>
|
|
<span id="L37"><span class="lineNum"> 37</span> :<span class="tlaGNC"> 2364 : const bool littleEndian = signal.byteOrder == ByteOrder::Intel;</span></span>
|
|
<span id="L38"><span class="lineNum"> 38</span> :<span class="tlaGNC"> 2364 : const std::uint64_t start = SignalStartCoordinate(signal.startBit, littleEndian);</span></span>
|
|
<span id="L39"><span class="lineNum"> 39</span> [<span class="tlaGBC" title="Branch 0 was taken 73229 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2364 times"> + </span>]:<span class="tlaGNC"> 75593 : for (std::uint32_t index = 0U; index < signal.length; ++index) {</span></span>
|
|
<span id="L40"><span class="lineNum"> 40</span> :<span class="tlaGNC"> 73229 : const std::uint64_t coordinate = start + index;</span></span>
|
|
<span id="L41"><span class="lineNum"> 41</span> [<span class="tlaGBC" title="Branch 0 was taken 37131 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 36098 times"> + </span>]:<span class="tlaGNC"> 73229 : const std::uint64_t bit = littleEndian ? coordinate</span></span>
|
|
<span id="L42"><span class="lineNum"> 42</span> :<span class="tlaGNC"> 36098 : : coordinate / 8U * 8U + 7U - coordinate % 8U;</span></span>
|
|
<span id="L43"><span class="lineNum"> 43</span> :<span class="tlaGNC"> 73229 : bits.set(static_cast<std::size_t>(bit));</span></span>
|
|
<span id="L44"><span class="lineNum"> 44</span> : : }</span>
|
|
<span id="L45"><span class="lineNum"> 45</span> :<span class="tlaGNC"> 2364 : return bits;</span></span>
|
|
<span id="L46"><span class="lineNum"> 46</span> : : }</span>
|
|
<span id="L47"><span class="lineNum"> 47</span> : : </span>
|
|
<span id="L48"><span class="lineNum"> 48</span> :<span class="tlaGNC"> 71 : bool AreMutuallyExclusive(const DecodeSignal &first, const DecodeSignal &second) {</span></span>
|
|
<span id="L49"><span class="lineNum"> 49</span> :<span class="tlaGNC"> 96 : return first.multiplexing.role == MultiplexRole::Branch &&</span></span>
|
|
<span id="L50"><span class="lineNum"> 50</span> [<span class="tlaGBC" title="Branch 0 was taken 25 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 46 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 6 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span>]:<span class="tlaGNC"> 77 : second.multiplexing.role == MultiplexRole::Branch &&</span></span>
|
|
<span id="L51"><span class="lineNum"> 51</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span>]:<span class="tlaGNC"> 77 : first.multiplexing.value != second.multiplexing.value;</span></span>
|
|
<span id="L52"><span class="lineNum"> 52</span> : : }</span>
|
|
<span id="L53"><span class="lineNum"> 53</span> : : </span>
|
|
<span id="L54"><span class="lineNum"> 54</span> :<span class="tlaGNC"> 2447 : void ValidateFrame(const DecodeFrame &frame) {</span></span>
|
|
<span id="L55"><span class="lineNum"> 55</span> [<span class="tlaGBC" title="Branch 0 was taken 72 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2375 times"> + </span>]:<span class="tlaGNC"> 2447 : const std::uint32_t maximumId = frame.isExtended ? 0x1FFFFFFFU : 0x7FFU;</span></span>
|
|
<span id="L56"><span class="lineNum"> 56</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2438 times"> + </span>]:<span class="tlaGNC"> 2447 : if (frame.canId > maximumId)</span></span>
|
|
<span id="L57"><span class="lineNum"> 57</span> [<span class="tlaGBC" title="Branch 0 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 9 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 9 : throw std::invalid_argument("Invalid normalized CAN ID: " + std::to_string(frame.canId));</span></span>
|
|
<span id="L58"><span class="lineNum"> 58</span> : : </span>
|
|
<span id="L59"><span class="lineNum"> 59</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2414 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 23 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 1 time"> + </span> :<span class="tlaGNC"> 2438 : if (frame.hasPgn && (!frame.isExtended || frame.pgn != ExtractJ1939Pgn(frame.canId)))</span></span>
|
|
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 2 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 6 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 7 was taken 2435 times"> + </span>]
|
|
<span id="L60"><span class="lineNum"> 60</span> [<span class="tlaGBC" title="Branch 0 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 3 : throw std::invalid_argument("Invalid J1939 PGN metadata: " + frame.name);</span></span>
|
|
<span id="L61"><span class="lineNum"> 61</span> : : </span>
|
|
<span id="L62"><span class="lineNum"> 62</span> :<span class="tlaGNC"> 2435 : std::unordered_set<std::string> names;</span></span>
|
|
<span id="L63"><span class="lineNum"> 63</span> :<span class="tlaGNC"> 2435 : const DecodeSignal *selector = nullptr;</span></span>
|
|
<span id="L64"><span class="lineNum"> 64</span> [<span class="tlaGBC" title="Branch 0 was taken 2480 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2340 times"> + </span>]:<span class="tlaGNC"> 4820 : for (const DecodeSignal &signal: frame.signals) {</span></span>
|
|
<span id="L65"><span class="lineNum"> 65</span> [<span class="tlaGBC" title="Branch 0 was taken 2480 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2476 times"> + </span>]:<span class="tlaGNC"> 2480 : if (!names.insert(signal.name).second)</span></span>
|
|
<span id="L66"><span class="lineNum"> 66</span> [<span class="tlaGBC" title="Branch 0 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 4 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 4 : throw std::invalid_argument("Duplicate runtime signal key: " + signal.name);</span></span>
|
|
<span id="L67"><span class="lineNum"> 67</span> [<span class="tlaGBC" title="Branch 0 was taken 2391 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 85 times"> + </span>]:<span class="tlaGNC"> 2476 : ValidateSignal(signal, frame.dlc);</span></span>
|
|
<span id="L68"><span class="lineNum"> 68</span> [<span class="tlaGBC" title="Branch 0 was taken 35 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2356 times"> + </span>]:<span class="tlaGNC"> 2391 : if (signal.multiplexing.role == MultiplexRole::Selector) {</span></span>
|
|
<span id="L69"><span class="lineNum"> 69</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 29 times"> + </span>]:<span class="tlaGNC"> 35 : if (selector != nullptr || signal.valueType != ValueType::Unsigned)</span></span>
|
|
<span id="L70"><span class="lineNum"> 70</span> [<span class="tlaGBC" title="Branch 0 was taken 6 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6 : throw std::invalid_argument("Multiplexing requires one unsigned selector per frame");</span></span>
|
|
<span id="L71"><span class="lineNum"> 71</span> :<span class="tlaGNC"> 29 : selector = &signal;</span></span>
|
|
<span id="L72"><span class="lineNum"> 72</span> : : }</span>
|
|
<span id="L73"><span class="lineNum"> 73</span> : : }</span>
|
|
<span id="L74"><span class="lineNum"> 74</span> : : </span>
|
|
<span id="L75"><span class="lineNum"> 75</span> :<span class="tlaGNC"> 2340 : std::vector<SignalBits> layouts;</span></span>
|
|
<span id="L76"><span class="lineNum"> 76</span> [<span class="tlaGBC" title="Branch 0 was taken 2340 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2340 : layouts.reserve(frame.signals.size());</span></span>
|
|
<span id="L77"><span class="lineNum"> 77</span> [<span class="tlaGBC" title="Branch 0 was taken 2372 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2324 times"> + </span>]:<span class="tlaGNC"> 4696 : for (std::size_t index = 0U; index < frame.signals.size(); ++index) {</span></span>
|
|
<span id="L78"><span class="lineNum"> 78</span> :<span class="tlaGNC"> 2372 : const DecodeSignal &signal = frame.signals[index];</span></span>
|
|
<span id="L79"><span class="lineNum"> 79</span> [<span class="tlaGBC" title="Branch 0 was taken 32 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2340 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 27 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 5 times"> + </span>]:<span class="tlaGNC"> 2372 : if (signal.multiplexing.role == MultiplexRole::Branch &&</span></span>
|
|
<span id="L80"><span class="lineNum"> 80</span> :<span class="tlaGNC"> 27 : (selector == nullptr ||</span></span>
|
|
<span id="L81"><span class="lineNum"> 81</span> [<span class="tlaGBC" title="Branch 0 was taken 22 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 19 times"> + </span>]:<span class="tlaGNC"> 27 : (selector->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector->length))))</span></span>
|
|
<span id="L82"><span class="lineNum"> 82</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 8 : throw std::invalid_argument("Missing selector or branch value outside selector range: " + signal.name);</span></span>
|
|
<span id="L83"><span class="lineNum"> 83</span> [<span class="tlaGBC" title="Branch 0 was taken 2364 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2364 : const SignalBits bits = GetSignalBits(signal);</span></span>
|
|
<span id="L84"><span class="lineNum"> 84</span> [<span class="tlaGBC" title="Branch 0 was taken 71 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2356 times"> + </span>]:<span class="tlaGNC"> 2427 : for (std::size_t previous = 0U; previous < index; ++previous) {</span></span>
|
|
<span id="L85"><span class="lineNum"> 85</span> [<span class="tlaGBC" title="Branch 0 was taken 68 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 3 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 60 times"> + </span> :<span class="tlaGNC"> 71 : if (!AreMutuallyExclusive(signal, frame.signals[previous]) && (bits & layouts[previous]).any())</span></span>
|
|
<span class="lineNum"> </span> <span class="tlaGBC" title="Branch 4 was taken 8 times"> + </span><span class="tlaGBC" title="Branch 5 was taken 63 times"> + </span>]
|
|
<span id="L86"><span class="lineNum"> 86</span> [<span class="tlaGBC" title="Branch 0 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 8 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 8 : throw std::invalid_argument("Overlapping signals: " + signal.name);</span></span>
|
|
<span id="L87"><span class="lineNum"> 87</span> : : }</span>
|
|
<span id="L88"><span class="lineNum"> 88</span> [<span class="tlaGBC" title="Branch 0 was taken 2356 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2356 : layouts.push_back(bits);</span></span>
|
|
<span id="L89"><span class="lineNum"> 89</span> : : }</span>
|
|
<span id="L90"><span class="lineNum"> 90</span> :<span class="tlaGNC"> 2451 : }</span></span>
|
|
<span id="L91"><span class="lineNum"> 91</span> : : }// namespace</span>
|
|
<span id="L92"><span class="lineNum"> 92</span> : : </span>
|
|
<span id="L93"><span class="lineNum"> 93</span> :<span class="tlaGNC"> 2394 : DecodeDatabase::Storage::Storage(const std::vector<DecodeFrame> &definitions)</span></span>
|
|
<span id="L94"><span class="lineNum"> 94</span> :<span class="tlaGNC"> 2394 : : frames(definitions) {</span></span>
|
|
<span id="L95"><span class="lineNum"> 95</span> : : // Validate the complete snapshot before creating its lookup index.</span>
|
|
<span id="L96"><span class="lineNum"> 96</span> :<span class="tlaGNC"> 2394 : std::unordered_set<FrameKey, FrameKeyHasher> keys;</span></span>
|
|
<span id="L97"><span class="lineNum"> 97</span> [<span class="tlaGBC" title="Branch 0 was taken 2394 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2394 : keys.reserve(frames.size());</span></span>
|
|
<span id="L98"><span class="lineNum"> 98</span> [<span class="tlaGBC" title="Branch 0 was taken 2447 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2266 times"> + </span>]:<span class="tlaGNC"> 4713 : for (const DecodeFrame &frame: frames) {</span></span>
|
|
<span id="L99"><span class="lineNum"> 99</span> [<span class="tlaGBC" title="Branch 0 was taken 2324 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 123 times"> + </span>]:<span class="tlaGNC"> 2447 : ValidateFrame(frame);</span></span>
|
|
<span id="L100"><span class="lineNum"> 100</span> [<span class="tlaGBC" title="Branch 0 was taken 2324 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 5 times"> + </span><span class="tlaGBC" title="Branch 3 was taken 2319 times"> + </span>]:<span class="tlaGNC"> 2324 : if (!keys.insert(frame.GetKey()).second)</span></span>
|
|
<span id="L101"><span class="lineNum"> 101</span> [<span class="tlaGBC" title="Branch 0 was taken 5 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 5 : throw std::invalid_argument("Duplicate runtime frame key");</span></span>
|
|
<span id="L102"><span class="lineNum"> 102</span> : : }</span>
|
|
<span id="L103"><span class="lineNum"> 103</span> [<span class="tlaGBC" title="Branch 0 was taken 2266 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2266 : frameIndexByKey.reserve(frames.size());</span></span>
|
|
<span id="L104"><span class="lineNum"> 104</span> [<span class="tlaGBC" title="Branch 0 was taken 2314 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2266 times"> + </span>]:<span class="tlaGNC"> 4580 : for (std::size_t index = 0U; index < frames.size(); ++index) {</span></span>
|
|
<span id="L105"><span class="lineNum"> 105</span> [<span class="tlaGBC" title="Branch 0 was taken 2314 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 2314 : frameIndexByKey.emplace(frames[index].GetKey(), index);</span></span>
|
|
<span id="L106"><span class="lineNum"> 106</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2293 times"> + </span>]:<span class="tlaGNC"> 2314 : if (frames[index].hasPgn)</span></span>
|
|
<span id="L107"><span class="lineNum"> 107</span> [<span class="tlaGBC" title="Branch 0 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span><span class="tlaGBC" title="Branch 2 was taken 21 times"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 21 : frameIndicesByPgn[frames[index].pgn].push_back(index);</span></span>
|
|
<span id="L108"><span class="lineNum"> 108</span> : : }</span>
|
|
<span id="L109"><span class="lineNum"> 109</span> :<span class="tlaGNC"> 2778 : }</span></span>
|
|
<span id="L110"><span class="lineNum"> 110</span> : : </span>
|
|
<span id="L111"><span class="lineNum"> 111</span> :<span class="tlaGNC"> 2394 : DecodeDatabase::DecodeDatabase(const std::vector<DecodeFrame> &frames)</span></span>
|
|
<span id="L112"><span class="lineNum"> 112</span> :<span class="tlaGNC"> 2394 : : storage(std::make_shared<const Storage>(frames)) {</span></span>
|
|
<span id="L113"><span class="lineNum"> 113</span> :<span class="tlaGNC"> 2266 : }</span></span>
|
|
<span id="L114"><span class="lineNum"> 114</span> : : </span>
|
|
<span id="L115"><span class="lineNum"> 115</span> :<span class="tlaGNC"> 76 : const std::vector<DecodeFrame> &DecodeDatabase::GetFrames() const {</span></span>
|
|
<span id="L116"><span class="lineNum"> 116</span> [<span class="tlaGBC" title="Branch 0 was taken 1 time"> + </span><span class="tlaGBC" title="Branch 1 was taken 75 times"> + </span><span class="tlaGBC" title="Branch 2 was taken 1 time"> + </span><span class="tlaUNC" title="Branch 3 was not taken"> - </span>]:<span class="tlaGNC"> 76 : static const std::vector<DecodeFrame> empty;</span></span>
|
|
<span id="L117"><span class="lineNum"> 117</span> [<span class="tlaGBC" title="Branch 0 was taken 74 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 2 times"> + </span>]:<span class="tlaGNC"> 76 : return storage ? storage->frames : empty;</span></span>
|
|
<span id="L118"><span class="lineNum"> 118</span> : : }</span>
|
|
<span id="L119"><span class="lineNum"> 119</span> : : </span>
|
|
<span id="L120"><span class="lineNum"> 120</span> :<span class="tlaGNC"> 6555 : std::shared_ptr<const DecodeFrame> DecodeDatabase::FindFrame(const FrameKey &key) const {</span></span>
|
|
<span id="L121"><span class="lineNum"> 121</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6539 times"> + </span>]:<span class="tlaGNC"> 6555 : if (!storage)</span></span>
|
|
<span id="L122"><span class="lineNum"> 122</span> :<span class="tlaGNC"> 16 : return nullptr;</span></span>
|
|
<span id="L123"><span class="lineNum"> 123</span> : : const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =</span>
|
|
<span id="L124"><span class="lineNum"> 124</span> [<span class="tlaGBC" title="Branch 0 was taken 6539 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 6539 : storage->frameIndexByKey.find(key);</span></span>
|
|
<span id="L125"><span class="lineNum"> 125</span> [<span class="tlaGBC" title="Branch 0 was taken 115 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 6424 times"> + </span>]:<span class="tlaGNC"> 6539 : if (it == storage->frameIndexByKey.end())</span></span>
|
|
<span id="L126"><span class="lineNum"> 126</span> :<span class="tlaGNC"> 115 : return nullptr;</span></span>
|
|
<span id="L127"><span class="lineNum"> 127</span> :<span class="tlaGNC"> 6424 : return std::shared_ptr<const DecodeFrame>(storage, &storage->frames[it->second]);</span></span>
|
|
<span id="L128"><span class="lineNum"> 128</span> : : }</span>
|
|
<span id="L129"><span class="lineNum"> 129</span> : : </span>
|
|
<span id="L130"><span class="lineNum"> 130</span> :<span class="tlaGNC"> 116 : PgnLookupResult DecodeDatabase::FindFrameByPgn(std::uint32_t pgn) const {</span></span>
|
|
<span id="L131"><span class="lineNum"> 131</span> :<span class="tlaGNC"> 116 : PgnLookupResult result;</span></span>
|
|
<span id="L132"><span class="lineNum"> 132</span> [<span class="tlaGBC" title="Branch 0 was taken 24 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 92 times"> + </span>]:<span class="tlaGNC"> 116 : if (!storage)</span></span>
|
|
<span id="L133"><span class="lineNum"> 133</span> :<span class="tlaGNC"> 24 : return result;</span></span>
|
|
<span id="L134"><span class="lineNum"> 134</span> : : const std::unordered_map<std::uint32_t, std::vector<std::size_t>>::const_iterator it =</span>
|
|
<span id="L135"><span class="lineNum"> 135</span> [<span class="tlaGBC" title="Branch 0 was taken 92 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 92 : storage->frameIndicesByPgn.find(pgn);</span></span>
|
|
<span id="L136"><span class="lineNum"> 136</span> [<span class="tlaGBC" title="Branch 0 was taken 47 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 45 times"> + </span>]:<span class="tlaGNC"> 92 : if (it == storage->frameIndicesByPgn.end())</span></span>
|
|
<span id="L137"><span class="lineNum"> 137</span> :<span class="tlaGNC"> 47 : return result;</span></span>
|
|
<span id="L138"><span class="lineNum"> 138</span> [<span class="tlaGBC" title="Branch 0 was taken 16 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 29 times"> + </span>]:<span class="tlaGNC"> 45 : if (it->second.size() != 1U) {</span></span>
|
|
<span id="L139"><span class="lineNum"> 139</span> :<span class="tlaGNC"> 16 : result.ambiguous = true;</span></span>
|
|
<span id="L140"><span class="lineNum"> 140</span> :<span class="tlaGNC"> 16 : return result;</span></span>
|
|
<span id="L141"><span class="lineNum"> 141</span> : : }</span>
|
|
<span id="L142"><span class="lineNum"> 142</span> :<span class="tlaGNC"> 29 : result.definition = std::shared_ptr<const DecodeFrame>(storage, &storage->frames[it->second[0]]);</span></span>
|
|
<span id="L143"><span class="lineNum"> 143</span> :<span class="tlaGNC"> 29 : return result;</span></span>
|
|
<span id="L144"><span class="lineNum"> 144</span> :<span class="tlaUNC"> 0 : }</span></span>
|
|
<span id="L145"><span class="lineNum"> 145</span> : : </span>
|
|
<span id="L146"><span class="lineNum"> 146</span> :<span class="tlaGNC"> 53 : std::shared_ptr<const DecodeSignal> DecodeDatabase::FindSignal(const SignalKey &key) const {</span></span>
|
|
<span id="L147"><span class="lineNum"> 147</span> [<span class="tlaGBC" title="Branch 0 was taken 53 times"> + </span><span class="tlaUNC" title="Branch 1 was not taken"> - </span>]:<span class="tlaGNC"> 53 : const std::shared_ptr<const DecodeFrame> frame = FindFrame(key.frame);</span></span>
|
|
<span id="L148"><span class="lineNum"> 148</span> [<span class="tlaGBC" title="Branch 0 was taken 10 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 43 times"> + </span>]:<span class="tlaGNC"> 53 : if (!frame)</span></span>
|
|
<span id="L149"><span class="lineNum"> 149</span> :<span class="tlaGNC"> 10 : return nullptr;</span></span>
|
|
<span id="L150"><span class="lineNum"> 150</span> [<span class="tlaGBC" title="Branch 0 was taken 48 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 5 times"> + </span>]:<span class="tlaGNC"> 53 : for (const DecodeSignal &signal: frame->signals) {</span></span>
|
|
<span id="L151"><span class="lineNum"> 151</span> [<span class="tlaGBC" title="Branch 0 was taken 38 times"> + </span><span class="tlaGBC" title="Branch 1 was taken 10 times"> + </span>]:<span class="tlaGNC"> 48 : if (signal.name == key.name)</span></span>
|
|
<span id="L152"><span class="lineNum"> 152</span> :<span class="tlaGNC"> 38 : return std::shared_ptr<const DecodeSignal>(frame, &signal);</span></span>
|
|
<span id="L153"><span class="lineNum"> 153</span> : : }</span>
|
|
<span id="L154"><span class="lineNum"> 154</span> :<span class="tlaGNC"> 5 : return nullptr;</span></span>
|
|
<span id="L155"><span class="lineNum"> 155</span> :<span class="tlaGNC"> 53 : }</span></span>
|
|
</pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
|
|
<table width="100%" border=0 cellspacing=0 cellpadding=0>
|
|
<tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
|
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
|
|
</table>
|
|
<br>
|
|
|
|
</body>
|
|
</html>
|