refactor: use enum type for buffer references
This commit is contained in:
parent
5438f19015
commit
9b02a8f6e9
4 changed files with 51 additions and 35 deletions
|
|
@ -1750,3 +1750,25 @@ pub fn extract_state(self: *Self, iter: *[]const u8) !void {
|
|||
try self.reset_from_string_and_update(content);
|
||||
if (dirty) self.mark_dirty();
|
||||
}
|
||||
|
||||
pub fn to_ref(self: *Self) Ref {
|
||||
return @enumFromInt(@intFromPtr(self));
|
||||
}
|
||||
|
||||
pub const Ref = enum(usize) {
|
||||
_,
|
||||
|
||||
pub fn cborEncode(self: @This(), writer: *std.Io.Writer) std.io.Writer.Error!void {
|
||||
const value: usize = @intFromEnum(self);
|
||||
try cbor.writeValue(writer, value);
|
||||
}
|
||||
|
||||
pub fn cborExtract(self: *@This(), iter: *[]const u8) cbor.Error!bool {
|
||||
var value: usize = 0;
|
||||
if (try cbor.matchValue(iter, cbor.extract(&value))) {
|
||||
self.* = @enumFromInt(value);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ fn add_buffer(self: *Self, buffer: *Buffer) error{OutOfMemory}!void {
|
|||
}
|
||||
|
||||
pub fn delete_buffer(self: *Self, buffer_: *Buffer) void {
|
||||
const buffer = self.buffer_from_ref(self.buffer_to_ref(buffer_)) orelse return; // check buffer is valid
|
||||
const buffer = self.buffer_from_ref(buffer_.to_ref()) orelse return; // check buffer is valid
|
||||
if (self.buffers.fetchRemove(buffer.get_file_path())) |kv| {
|
||||
self.allocator.free(kv.key);
|
||||
kv.value.deinit();
|
||||
|
|
@ -230,15 +230,11 @@ pub fn close_others(self: *Self, protected: *Buffer) error{OutOfMemory}!usize {
|
|||
return remaining;
|
||||
}
|
||||
|
||||
pub fn buffer_from_ref(self: *Self, buffer_ref: usize) ?*Buffer {
|
||||
pub fn buffer_from_ref(self: *Self, buffer_ref: Buffer.Ref) ?*Buffer {
|
||||
var i = self.buffers.iterator();
|
||||
while (i.next()) |p|
|
||||
if (@intFromPtr(p.value_ptr.*) == buffer_ref)
|
||||
if (@intFromPtr(p.value_ptr.*) == @intFromEnum(buffer_ref))
|
||||
return p.value_ptr.*;
|
||||
tp.trace(tp.channel.debug, .{ "buffer_from_ref", "failed", buffer_ref });
|
||||
return null;
|
||||
}
|
||||
|
||||
pub fn buffer_to_ref(_: *Self, buffer: *Buffer) usize {
|
||||
return @intFromPtr(buffer);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue