#include "dbc_decode_builder.h" DecodeDatabase DbcDecodeBuilder::Build (const DbcDatabase &source) const { DecodeDatabase result; for (std::size_t frameIndex = 0U; frameIndex < source.frames.size(); ++frameIndex) { const FrameInfo &sourceFrame = source.frames[frameIndex]; DecodeFrame targetFrame; targetFrame.name = sourceFrame.name; targetFrame.canId = sourceFrame.canId; targetFrame.isExtended = sourceFrame.isExtended; targetFrame.dlc = sourceFrame.dlc; targetFrame.pgn = sourceFrame.pgn; targetFrame.hasPgn = sourceFrame.hasPgn; targetFrame.transmitter = sourceFrame.transmitter; targetFrame.comment = sourceFrame.comment; for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) { const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex]; DecodeSignal targetSignal; targetSignal.name = sourceSignal.name; targetSignal.startBit = sourceSignal.startBit; targetSignal.length = sourceSignal.length; targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola; targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned; targetSignal.factor = sourceSignal.factor; targetSignal.offset = sourceSignal.offset; targetSignal.minimum = sourceSignal.minimum; targetSignal.maximum = sourceSignal.maximum; targetSignal.unit = sourceSignal.unit; targetSignal.receivers = sourceSignal.receivers; targetSignal.comment = sourceSignal.comment; targetFrame.signals.push_back (targetSignal); } result.frames.push_back (targetFrame); result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] = result.frames.size() - 1U; } return result; }