28 if (a == Status::Inactive || b == Status::Inactive) {
29 return Status::Inactive;
31 if (a == Status::Active && b == Status::Active) {
32 return Status::Active;
34 if (a == Status::Error || b == Status::Error) {
37 return Status::Unknown;
43 if (a == Status::Active || b == Status::Active) {
44 return Status::Active;
46 if (a == Status::Inactive && b == Status::Inactive) {
47 return Status::Inactive;
49 if (a == Status::Error || b == Status::Error) {
52 return Status::Unknown;
58 if (a == Status::Active) {
59 return Status::Inactive;
61 if (a == Status::Inactive) {
62 return Status::Active;
70 if ((a == Status::Active || a == Status::Inactive)
71 && (b == Status::Active || b == Status::Inactive)) {
72 return (a != b) ? Status::Active : Status::Inactive;
74 if (a == Status::Error || b == Status::Error) {
77 return Status::Unknown;
83 bool hasUnknown =
false;
84 bool hasError =
false;
85 for (
const auto s : inputs) {
86 if (s == Status::Inactive) {
87 return Status::Inactive;
89 if (s == Status::Error) {
91 }
else if (s == Status::Unknown) {
95 if (hasError) {
return Status::Error; }
96 return hasUnknown ? Status::Unknown : Status::Active;
102 bool hasUnknown =
false;
103 bool hasError =
false;
104 for (
const auto s : inputs) {
105 if (s == Status::Active) {
106 return Status::Active;
108 if (s == Status::Error) {
110 }
else if (s == Status::Unknown) {
114 if (hasError) {
return Status::Error; }
115 return hasUnknown ? Status::Unknown : Status::Inactive;
123 bool hasUnknown =
false;
124 for (
const auto s : inputs) {
125 if (s == Status::Active) {
127 }
else if (s == Status::Error) {
128 return Status::Error;
129 }
else if (s == Status::Unknown) {
133 if (hasUnknown) {
return Status::Unknown; }
134 return (activeCount % 2 != 0) ? Status::Active : Status::Inactive;
Central enumeration types for element types, groups, and signal status.
Status statusAnd(const Status a, const Status b)
AND: Inactive dominates all; unknown propagates as-is.
Status statusXorAll(const QVector< Status > &inputs)
Status statusOrAll(const QVector< Status > &inputs)
Fold OR over a range. Active dominates.
Status statusAndAll(const QVector< Status > &inputs)
Fold AND over a range. Inactive dominates.
Status statusXor(const Status a, const Status b)
XOR: requires all inputs known; any Unknown -> Unknown, any Error -> Error.
Status statusOr(const Status a, const Status b)
OR: Active dominates all; unknown propagates as-is.
Status statusNot(const Status a)
NOT: inverts known values; Unknown -> Unknown, Error -> Error.