forked from mirror/vulkan-zig
Registry: Struct aliases
This commit is contained in:
@@ -97,7 +97,7 @@ pub const Registry = struct {
|
|||||||
std.debug.warn("Structs:\n", .{});
|
std.debug.warn("Structs:\n", .{});
|
||||||
var it = self.structs.iterator();
|
var it = self.structs.iterator();
|
||||||
while (it.next()) |kv| {
|
while (it.next()) |kv| {
|
||||||
std.debug.warn(" {}:\n", .{kv.key});
|
std.debug.warn(" {} ({} aliases):\n", .{kv.key, kv.value.aliases.count()});
|
||||||
|
|
||||||
var member_it = kv.value.members.iterator(0);
|
var member_it = kv.value.members.iterator(0);
|
||||||
while (member_it.next()) |member| {
|
while (member_it.next()) |member| {
|
||||||
@@ -203,6 +203,10 @@ const TypeInfo = struct {
|
|||||||
comptime Errors: type,
|
comptime Errors: type,
|
||||||
output: fn (@TypeOf(context), []const u8) Errors!void
|
output: fn (@TypeOf(context), []const u8) Errors!void
|
||||||
) Errors!void {
|
) Errors!void {
|
||||||
|
if (self.array_size) |array_size| {
|
||||||
|
try std.fmt.format(context, Errors, output, "[{}]", .{array_size});
|
||||||
|
}
|
||||||
|
|
||||||
for (self.pointers) |ptr| {
|
for (self.pointers) |ptr| {
|
||||||
switch (ptr.size) {
|
switch (ptr.size) {
|
||||||
.One => try output(context, "*"),
|
.One => try output(context, "*"),
|
||||||
@@ -215,10 +219,6 @@ const TypeInfo = struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.array_size) |array_size| {
|
|
||||||
try std.fmt.format(context, Errors, output, "[{}]", .{array_size});
|
|
||||||
}
|
|
||||||
|
|
||||||
try output(context, self.name);
|
try output(context, self.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,16 +240,22 @@ const StructInfo = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
members: std.SegmentedList(Member, 0),
|
members: std.SegmentedList(Member, 0),
|
||||||
|
aliases: std.SegmentedList([]const u8, 0),
|
||||||
|
|
||||||
fn init(allocator: *Allocator) StructInfo {
|
fn init(allocator: *Allocator) StructInfo {
|
||||||
return .{
|
return .{
|
||||||
.members = std.SegmentedList(Member, 0).init(allocator),
|
.members = std.SegmentedList(Member, 0).init(allocator),
|
||||||
|
.aliases = std.SegmentedList([]const u8, 0).init(allocator)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn addMember(self: *StructInfo, name: []const u8, type_info: TypeInfo) void {
|
fn addMember(self: *StructInfo, name: []const u8, type_info: TypeInfo) void {
|
||||||
self.members.push(.{.name = name, .type_info = type_info}) catch unreachable;
|
self.members.push(.{.name = name, .type_info = type_info}) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn addAlias(self: *StructInfo, alias: []const u8) void {
|
||||||
|
self.aliases.push(alias) catch unreachable;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const HandleInfo = union(enum) {
|
const HandleInfo = union(enum) {
|
||||||
@@ -428,7 +434,9 @@ fn processStructType(registry: *Registry, ty: *xml.Element) void {
|
|||||||
const name = ty.getAttribute("name").?;
|
const name = ty.getAttribute("name").?;
|
||||||
|
|
||||||
if (ty.getAttribute("alias")) |alias| {
|
if (ty.getAttribute("alias")) |alias| {
|
||||||
// TODO
|
// Aliases should always be defined after their parent type, so this should be safe
|
||||||
|
var s = ®istry.structs.get(alias).?.value;
|
||||||
|
s.addAlias(name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user