From d87868c510c790b22b4cd5b7a1b2da3781f8b424 Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Thu, 13 Aug 2020 01:00:52 +0200 Subject: [PATCH] Use new IdRenderer in vulkan/generator.zig --- generator/vulkan/generator.zig | 27 ++++++++++++++++++--------- generator/vulkan/render.zig | 14 ++++++++------ 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/generator/vulkan/generator.zig b/generator/vulkan/generator.zig index 52f5050..75f4efd 100644 --- a/generator/vulkan/generator.zig +++ b/generator/vulkan/generator.zig @@ -3,7 +3,7 @@ const reg = @import("registry.zig"); const xml = @import("../xml.zig"); const renderRegistry = @import("render.zig").render; const parseXml = @import("parse.zig").parseXml; -const util = @import("util.zig"); +const IdRenderer = @import("../id_render.zig").IdRenderer; const mem = std.mem; const Allocator = mem.Allocator; const FeatureLevel = reg.FeatureLevel; @@ -114,12 +114,14 @@ const TagFixerUpper = struct { gpa: *Allocator, registry: *reg.Registry, names: std.StringHashMap(NameInfo), + id_renderer: *const IdRenderer, - fn init(gpa: *Allocator, registry: *reg.Registry) TagFixerUpper { + fn init(gpa: *Allocator, registry: *reg.Registry, id_renderer: *const IdRenderer) TagFixerUpper { return .{ .gpa = gpa, .registry = registry, .names = std.StringHashMap(NameInfo).init(gpa), + .id_renderer = id_renderer, }; } @@ -128,7 +130,7 @@ const TagFixerUpper = struct { } fn insertName(self: *TagFixerUpper, name: []const u8) !void { - const tagless = util.stripAuthorTag(name, self.registry.tags); + const tagless = self.id_renderer.stripAuthorTag(name); const is_tagged = tagless.len != name.len; const result = try self.names.getOrPut(tagless); @@ -162,7 +164,7 @@ const TagFixerUpper = struct { } fn fixName(self: *TagFixerUpper, name: *[]const u8) !void { - const tagless = util.stripAuthorTag(name.*, self.registry.tags); + const tagless = self.id_renderer.stripAuthorTag(name.*); const info = self.names.get(tagless) orelse return error.InvalidRegistry; if (info.tagless_name_exists) { name.* = tagless; @@ -235,17 +237,24 @@ pub const Generator = struct { gpa: *Allocator, reg_arena: std.heap.ArenaAllocator, registry: reg.Registry, + id_renderer: IdRenderer, fn init(allocator: *Allocator, spec: *xml.Element) !Generator { const result = try parseXml(allocator, spec); + + const tags = try allocator.alloc([]const u8, result.registry.tags.len); + for (tags) |*tag, i| tag.* = result.registry.tags[i].name; + return Generator{ .gpa = allocator, .reg_arena = result.arena, .registry = result.registry, + .id_renderer = IdRenderer.init(allocator, tags), }; } fn deinit(self: Generator) void { + self.gpa.free(self.id_renderer.tags); self.reg_arena.deinit(); } @@ -261,12 +270,12 @@ pub const Generator = struct { } fn stripFlagBits(self: Generator, name: []const u8) []const u8 { - const tagless = util.stripAuthorTag(name, self.registry.tags); + const tagless = self.id_renderer.stripAuthorTag(name); return tagless[0 .. tagless.len - "FlagBits".len]; } fn stripFlags(self: Generator, name: []const u8) []const u8 { - const tagless = util.stripAuthorTag(name, self.registry.tags); + const tagless = self.id_renderer.stripAuthorTag(name); return tagless[0 .. tagless.len - "Flags".len]; } @@ -306,13 +315,13 @@ pub const Generator = struct { } fn fixupTags(self: *Generator) !void { - var fixer_upper = TagFixerUpper.init(self.gpa, &self.registry); + var fixer_upper = TagFixerUpper.init(self.gpa, &self.registry, &self.id_renderer); defer fixer_upper.deinit(); try fixer_upper.fixup(); } - fn render(self: *Generator, out_stream: anytype) !void { - try renderRegistry(out_stream, &self.reg_arena.allocator, &self.registry); + fn render(self: *Generator, writer: anytype) !void { + try renderRegistry(writer, &self.reg_arena.allocator, &self.registry, &self.id_renderer); } }; diff --git a/generator/vulkan/render.zig b/generator/vulkan/render.zig index 75bde89..94d7479 100644 --- a/generator/vulkan/render.zig +++ b/generator/vulkan/render.zig @@ -4,6 +4,8 @@ const id_render = @import("../id_render.zig"); const cparse = @import("c_parse.zig"); const mem = std.mem; const Allocator = mem.Allocator; +const CaseStyle = id_render.CaseStyle; +const IdRenderer = id_render.IdRenderer; const preamble = \\ @@ -167,9 +169,9 @@ fn Renderer(comptime WriterType: type) type { writer: WriterType, allocator: *Allocator, registry: *const reg.Registry, - id_renderer: id_render.IdRenderer, + id_renderer: *IdRenderer, - fn init(writer: WriterType, allocator: *Allocator, registry: *const reg.Registry) !Self { + fn init(writer: WriterType, allocator: *Allocator, registry: *const reg.Registry, id_renderer: *IdRenderer) !Self { const tags = try allocator.alloc([]const u8, registry.tags.len); for (tags) |*tag, i| tag.* = registry.tags[i].name; @@ -177,7 +179,7 @@ fn Renderer(comptime WriterType: type) type { .writer = writer, .allocator = allocator, .registry = registry, - .id_renderer = id_render.IdRenderer.init(allocator, tags), + .id_renderer = id_renderer, }; } @@ -190,7 +192,7 @@ fn Renderer(comptime WriterType: type) type { try self.id_renderer.render(self.writer, id); } - fn writeIdentifierWithCase(self: *Self, case: id_render.CaseStyle, id: []const u8) !void { + fn writeIdentifierWithCase(self: *Self, case: CaseStyle, id: []const u8) !void { try self.id_renderer.renderWithCase(self.writer, case, id); } @@ -1097,8 +1099,8 @@ fn Renderer(comptime WriterType: type) type { }; } -pub fn render(writer: anytype, allocator: *Allocator, registry: *const reg.Registry) !void { - var renderer = try Renderer(@TypeOf(writer)).init(writer, allocator, registry); +pub fn render(writer: anytype, allocator: *Allocator, registry: *const reg.Registry, id_renderer: *IdRenderer) !void { + var renderer = try Renderer(@TypeOf(writer)).init(writer, allocator, registry, id_renderer); defer renderer.deinit(); try renderer.render(); }