// SPDX-License-Identifier: MIT #ifndef MULTIPLEXING_H #define MULTIPLEXING_H #include #include #include /** @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 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