diff options
| author | Benjamin Feng <benjamin.feng@glassdoor.com> | 2019-12-05 17:59:43 -0600 |
|---|---|---|
| committer | Benjamin Feng <benjamin.feng@glassdoor.com> | 2019-12-05 18:01:49 -0600 |
| commit | 7d1c4fe4dcb6188d2af0f65bf713aca8d326ea46 (patch) | |
| tree | b5f87a99039e36396db6fe8b043bc85ca2fd118d /lib/std | |
| parent | 30da6d49f435b7ef317b059113ec1fab21d72d00 (diff) | |
| download | zig-7d1c4fe4dcb6188d2af0f65bf713aca8d326ea46.tar.gz zig-7d1c4fe4dcb6188d2af0f65bf713aca8d326ea46.zip | |
Switch bitmask to enums
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/heap.zig | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/std/heap.zig b/lib/std/heap.zig index fcc9420cf7..a32db9862a 100644 --- a/lib/std/heap.zig +++ b/lib/std/heap.zig @@ -256,28 +256,32 @@ const WasmPageAllocator = struct { // TODO: figure out why __heap_base cannot be found var heap_base_wannabe align(16) = [_]u8{0} ** 256; + const PageStatus = enum(u1) { + used = 0, + free = 1, + + pub const all_used: u8 = 0; + }; + const FreeBlock = struct { bytes: []align(16) u8, const Io = std.packed_int_array.PackedIntIo(u1, .Little); - const used = 0; - const free = 1; - fn totalPages(self: FreeBlock) usize { return self.bytes.len * 8; } - fn getBit(self: *FreeBlock, idx: usize) u1 { + fn getBit(self: *FreeBlock, idx: usize) PageStatus { const bit_offset = 0; - return Io.get(self.bytes, idx, bit_offset); + return @intToEnum(PageStatus, Io.get(self.bytes, idx, bit_offset)); } - fn setBits(self: *FreeBlock, start_idx: usize, len: usize, val: u1) void { + fn setBits(self: *FreeBlock, start_idx: usize, len: usize, val: PageStatus) void { const bit_offset = 0; var i: usize = 0; while (i < len) : (i += 1) { - Io.set(self.bytes, start_idx + i, bit_offset, val); + Io.set(self.bytes, start_idx + i, bit_offset, @enumToInt(val)); } } @@ -302,10 +306,10 @@ const WasmPageAllocator = struct { var j: usize = i * 128; while (j < (i + 1) * 128) : (j += 1) { var count: usize = 0; - while (j + count < self.totalPages() and self.getBit(j + count) == 1) { + while (j + count < self.totalPages() and self.getBit(j + count) == .free) { count += 1; if (count >= num_pages) { - self.setBits(j, num_pages, used); + self.setBits(j, num_pages, .used); return j; } } @@ -316,7 +320,7 @@ const WasmPageAllocator = struct { } fn recycle(self: *FreeBlock, start_idx: usize, len: usize) void { - self.setBits(start_idx, len, free); + self.setBits(start_idx, len, .free); } }; @@ -391,7 +395,7 @@ const WasmPageAllocator = struct { extended.bytes = @intToPtr([*]align(16) u8, free_end * std.mem.page_size)[0..std.mem.page_size]; // Since this is the first page being freed and we consume it, assume *nothing* is free. - std.mem.set(u8, extended.bytes, FreeBlock.used); + std.mem.set(u8, extended.bytes, PageStatus.all_used); } const clamped_start = std.math.max(extendedOffset(), free_start); extended.recycle(clamped_start - extendedOffset(), free_end - clamped_start); |
