From 22874125360103f5c830712eeb55b7054250f485 Mon Sep 17 00:00:00 2001 From: Christofer Nolander Date: Wed, 23 Aug 2023 22:12:17 +0200 Subject: [PATCH] use format mixin for bit-flags --- generator/vulkan/render.zig | 55 +++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/generator/vulkan/render.zig b/generator/vulkan/render.zig index 840ac08..a6821af 100644 --- a/generator/vulkan/render.zig +++ b/generator/vulkan/render.zig @@ -49,7 +49,33 @@ const preamble = \\ pub fn contains(lhs: FlagsType, rhs: FlagsType) bool { \\ return toInt(intersect(lhs, rhs)) == toInt(rhs); \\ } -++ bit_flag_format ++ + \\ pub usingnamespace FlagFormatMixin(FlagsType); + \\ }; + \\} + \\fn FlagFormatMixin(comptime FlagsType: type) type { + \\ return struct { + \\ pub fn format( + \\ self: FlagsType, + \\ comptime _: []const u8, + \\ _: std.fmt.FormatOptions, + \\ writer: anytype, + \\ ) !void { + \\ try writer.writeAll(@typeName(FlagsType) ++ "{"); + \\ var first = true; + \\ inline for (comptime std.meta.fieldNames(FlagsType)) |name| { + \\ if (name[0] == '_') continue; + \\ if (@field(self, name)) { + \\ if (first) { + \\ try writer.writeAll(" " ++ name); + \\ first = false; + \\ } else { + \\ try writer.writeAll(", " ++ name); + \\ } + \\ } + \\ } + \\ if (!first) try writer.writeAll(" "); + \\ try writer.writeAll("}"); + \\ } \\ }; \\} \\pub fn makeApiVersion(variant: u3, major: u7, minor: u10, patch: u12) u32 { @@ -70,31 +96,6 @@ const preamble = \\ ; -const bit_flag_format = - \\ pub fn format( - \\ self: @This(), - \\ comptime _: []const u8, - \\ _: std.fmt.FormatOptions, - \\ writer: anytype, - \\ ) !void { - \\ try writer.writeAll(@typeName(@This()) ++ "{"); - \\ var first = true; - \\ inline for (comptime std.meta.fieldNames(@This())) |name| { - \\ if (name[0] == '_') continue; - \\ if (@field(self, name)) { - \\ if (first) { - \\ try writer.writeAll(" " ++ name); - \\ first = false; - \\ } else { - \\ try writer.writeAll(", " ++ name); - \\ } - \\ } - \\ } - \\ if (!first) try writer.writeAll(" "); - \\ try writer.writeAll("}"); - \\ } -; - const builtin_types = std.ComptimeStringMap([]const u8, .{ .{ "void", @typeName(void) }, .{ "char", @typeName(u8) }, @@ -1086,7 +1087,7 @@ fn Renderer(comptime WriterType: type) type { \\ } \\ return true; \\ } - ++ bit_flag_format ++ + \\ pub usingnamespace FlagFormatMixin(CommandFlags); \\ }; \\} \\