freetype:harfbuzz: 100% blob and 50% buffer binding
This commit is contained in:
parent
d98bfab809
commit
2b7527b028
11 changed files with 502 additions and 52 deletions
35
freetype/src/utils.zig
Normal file
35
freetype/src/utils.zig
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
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;
|
||||
}
|
||||
|
||||
pub fn refAllDecls(comptime T: type) void {
|
||||
switch (@typeInfo(T)) {
|
||||
.Struct, .Union, .Opaque, .Enum => {
|
||||
inline for (comptime std.meta.declarations(T)) |decl| {
|
||||
if (decl.is_pub) {
|
||||
refAllDecls(@TypeOf(@field(T, decl.name)));
|
||||
std.testing.refAllDecls(T);
|
||||
}
|
||||
}
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue