40 lines
1.2 KiB
C++
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
|