21 lines
767 B
Zig
21 lines
767 B
Zig
const std = @import("std");
|
|
|
|
pub fn structToBitFields(comptime IntType: type, comptime EnumDataType: type, flags: anytype) IntType {
|
|
var value: IntType = 0;
|
|
inline for (comptime std.meta.fieldNames(EnumDataType)) |field_name| {
|
|
if (@field(flags, field_name)) {
|
|
value |= @enumToInt(@field(EnumDataType, field_name));
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
pub fn bitFieldsToStruct(comptime StructType: type, comptime EnumDataType: type, flags: anytype) StructType {
|
|
var value = std.mem.zeroes(StructType);
|
|
inline for (comptime std.meta.fieldNames(EnumDataType)) |field_name| {
|
|
if (flags & (@enumToInt(@field(EnumDataType, field_name))) != 0) {
|
|
@field(value, field_name) = true;
|
|
}
|
|
}
|
|
return value;
|
|
}
|