struct Record [src]
Fields
name: []const u8
id: u32
operands: []const u64
blob: []const u8
Source
pub const Record = struct {
name: []const u8,
id: u32,
operands: []const u64,
blob: []const u8,
fn toOwnedAbbrev(record: Record, allocator: std.mem.Allocator) !Abbrev {
var operands = std.ArrayList(Abbrev.Operand).init(allocator);
defer operands.deinit();
assert(record.id == Abbrev.Builtin.define_abbrev.toRecordId());
var i: usize = 0;
while (i < record.operands.len) switch (record.operands[i]) {
Abbrev.Operand.literal_id => {
try operands.append(.{ .literal = record.operands[i + 1] });
i += 2;
},
@intFromEnum(Abbrev.Operand.Encoding.fixed) => {
try operands.append(.{ .encoding = .{ .fixed = @intCast(record.operands[i + 1]) } });
i += 2;
},
@intFromEnum(Abbrev.Operand.Encoding.vbr) => {
try operands.append(.{ .encoding = .{ .vbr = @intCast(record.operands[i + 1]) } });
i += 2;
},
@intFromEnum(Abbrev.Operand.Encoding.array) => {
try operands.append(.{ .encoding = .{ .array = 6 } });
i += 1;
},
@intFromEnum(Abbrev.Operand.Encoding.char6) => {
try operands.append(.{ .encoding = .char6 });
i += 1;
},
@intFromEnum(Abbrev.Operand.Encoding.blob) => {
try operands.append(.{ .encoding = .{ .blob = 6 } });
i += 1;
},
else => unreachable,
};
return .{ .operands = try operands.toOwnedSlice() };
}
}