Closes #29
This commit is contained in:
1 parent
a702cffd93
commit
8d06165979
18 files changed
+611
-215
No files matched your search
+25
-6
@@ -3,18 +3,37 @@
|
||||
#define MULTIPLEXING_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/** @brief Unconditional signal, selector, or single-value branch. */
|
||||
/** @brief Signal participation in multiplexing. */
|
||||
enum class MultiplexRole {
|
||||
Unconditional,
|
||||
Selector,
|
||||
Branch
|
||||
Branch,
|
||||
BranchSelector
|
||||
};
|
||||
|
||||
/** Basic multiplexing: one unsigned selector per frame, one raw value per branch. */
|
||||
struct Multiplexing {
|
||||
MultiplexRole role = MultiplexRole::Unconditional; /**< Signal participation in multiplexing. */
|
||||
std::uint64_t value = 0U; /**< Required raw selector value; used only by branches. */
|
||||
/** @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
|
||||
Reference in new issue
Block a user