freetype:harfbuzz: 100% blob and 50% buffer binding

This commit is contained in:
Ali Chraghi 2022-06-10 15:27:43 +04:30 committed by Stephen Gutekanst
parent d98bfab809
commit 2b7527b028
11 changed files with 502 additions and 52 deletions

35
freetype/src/utils.zig Normal file
View 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 => {},
}
}