Files
dbc/core/multiplexing.h
T
2026-10-23 20:28:55 -04:00

40 lines
1.2 KiB
C++

// SPDX-License-Identifier: MIT
#ifndef MULTIPLEXING_H
#define MULTIPLEXING_H
#include <cstdint>
#include <string>
#include <vector>
/** @brief Signal participation in multiplexing. */
enum class MultiplexRole {
Unconditional,
Selector,
Branch,
BranchSelector
};
/** @brief Inclusive raw selector range, without expanding individual values. */
struct MultiplexRange {
std::uint64_t minimum = 0U;
std::uint64_t maximum = 0U;
};
/** @brief Basic markers and optional explicit extended multiplexing condition. */
struct Multiplexing {
MultiplexRole role = MultiplexRole::Unconditional;
std::uint64_t value = 0U; /**< mN fallback when no explicit ranges are supplied. */
std::string selector; /**< Parent selector name within the same frame. */
std::vector<MultiplexRange> ranges; /**< Alternatives for the named selector; override mN. */
};
inline bool IsMultiplexSelector(MultiplexRole role) {
return role == MultiplexRole::Selector || role == MultiplexRole::BranchSelector;
}
inline bool IsMultiplexBranch(MultiplexRole role) {
return role == MultiplexRole::Branch || role == MultiplexRole::BranchSelector;
}
#endif