Branch data Line data Source code
1 : : /**
2 : : * @file dbc_decode_builder.cpp
3 : : * @brief Conversion of parsed metadata to runtime definitions.
4 : : *
5 : : * Created: 2026-03-13
6 : : * Author: Deeaitch (Dim. Himro)
7 : : *
8 : : * Licensed under the MIT License.
9 : : * See LICENSE file in the project root for full license text.
10 : : */
11 : :
12 : : #include "dbc_decode_builder.h"
13 : : #include <utility>
14 : :
15 : 108 : DecodeDatabase DbcDecodeBuilder::Build(const DbcDatabase &source) const {
16 : 108 : std::vector<DecodeFrame> frames;
17 [ + - ]: 108 : frames.reserve(source.frames.size());
18 : :
19 [ + + ]: 248 : for (const FrameInfo &sourceFrame: source.frames) {
20 : 140 : DecodeFrame targetFrame;
21 : :
22 [ + - ]: 140 : targetFrame.attributes = sourceFrame.attributes;
23 [ + - ]: 140 : targetFrame.frameFormat = sourceFrame.frameFormat;
24 : 140 : targetFrame.cycleTimeMs = sourceFrame.cycleTimeMs;
25 [ + - ]: 140 : targetFrame.name = sourceFrame.name;
26 : 140 : targetFrame.canId = sourceFrame.canId;
27 : 140 : targetFrame.isExtended = sourceFrame.isExtended;
28 : 140 : targetFrame.dlc = sourceFrame.dlc;
29 : 140 : targetFrame.pgn = sourceFrame.pgn;
30 : 140 : targetFrame.hasPgn = sourceFrame.hasPgn;
31 [ + - ]: 140 : targetFrame.transmitter = sourceFrame.transmitter;
32 [ + - ]: 140 : targetFrame.comment = sourceFrame.comment;
33 : :
34 [ + - ]: 140 : targetFrame.signals.reserve(sourceFrame.signals.size());
35 [ + + ]: 313 : for (const SignalInfo &sourceSignal: sourceFrame.signals) {
36 : 173 : DecodeSignal targetSignal;
37 : :
38 [ + - ]: 173 : targetSignal.attributes = sourceSignal.attributes;
39 : 173 : targetSignal.multiplexing = sourceSignal.multiplexing;
40 [ + - ]: 173 : targetSignal.name = sourceSignal.name;
41 : 173 : targetSignal.startBit = sourceSignal.startBit;
42 : 173 : targetSignal.length = sourceSignal.length;
43 [ + + ]: 173 : targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
44 [ + + ]: 173 : targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
45 : 173 : targetSignal.factor = sourceSignal.factor;
46 : 173 : targetSignal.offset = sourceSignal.offset;
47 : 173 : targetSignal.minimum = sourceSignal.minimum;
48 : 173 : targetSignal.maximum = sourceSignal.maximum;
49 [ + - ]: 173 : targetSignal.unit = sourceSignal.unit;
50 [ + - ]: 173 : targetSignal.receivers = sourceSignal.receivers;
51 [ + - ]: 173 : targetSignal.comment = sourceSignal.comment;
52 [ + - ]: 173 : targetSignal.valueDescriptions = sourceSignal.valueDescriptions;
53 : :
54 [ + - ]: 173 : targetFrame.signals.push_back(std::move(targetSignal));
55 : 173 : }
56 : :
57 [ + - ]: 140 : frames.push_back(std::move(targetFrame));
58 : 140 : }
59 : :
60 [ + + ]: 176 : return DecodeDatabase(frames);
61 : 108 : }
|