std: Implement featureSetHasAny/featureSetHasAll
Introduce two helper functions to avoid writing short novels only to check for more than a single feature.master
parent
a123378141
commit
90f7034b69
|
@ -637,9 +637,28 @@ pub const Target = struct {
|
|||
return x;
|
||||
}
|
||||
|
||||
/// Returns true if the specified feature is enabled.
|
||||
pub fn featureSetHas(set: Set, feature: F) bool {
|
||||
return set.isEnabled(@enumToInt(feature));
|
||||
}
|
||||
|
||||
/// Returns true if any specified feature is enabled.
|
||||
pub fn featureSetHasAny(set: Set, features: anytype) bool {
|
||||
comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features)));
|
||||
inline for (features) |feature| {
|
||||
if (set.isEnabled(@enumToInt(@as(F, feature)))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Returns true if every specified feature is enabled.
|
||||
pub fn featureSetHasAll(set: Set, features: anytype) bool {
|
||||
comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features)));
|
||||
inline for (features) |feature| {
|
||||
if (!set.isEnabled(@enumToInt(@as(F, feature)))) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
|
@ -827,6 +827,11 @@ test "CrossTarget.parse" {
|
|||
std.testing.expect(Target.x86.featureSetHas(target.cpu.features, .cmov));
|
||||
std.testing.expect(Target.x86.featureSetHas(target.cpu.features, .fxsr));
|
||||
|
||||
std.testing.expect(Target.x86.featureSetHasAny(target.cpu.features, .{ .sse, .avx, .cmov }));
|
||||
std.testing.expect(!Target.x86.featureSetHasAny(target.cpu.features, .{ .sse, .avx }));
|
||||
std.testing.expect(Target.x86.featureSetHasAll(target.cpu.features, .{ .mmx, .x87 }));
|
||||
std.testing.expect(!Target.x86.featureSetHasAll(target.cpu.features, .{ .mmx, .x87, .sse }));
|
||||
|
||||
const text = try cross_target.zigTriple(std.testing.allocator);
|
||||
defer std.testing.allocator.free(text);
|
||||
std.testing.expectEqualSlices(u8, "x86_64-linux-gnu", text);
|
||||
|
|
Loading…
Reference in New Issue