Skip to content

Commit

Permalink
Merge pull request #5 from rdunnington/zig-0.11.x
Browse files Browse the repository at this point in the history
Zig 0.11.x
  • Loading branch information
rdunnington authored Aug 16, 2023
2 parents 3375a97 + 5ae4e52 commit 55905a3
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 21 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ jobs:
- uses: actions/checkout@v2
- uses: goto-bus-stop/setup-zig@v2
with:
version: 0.10.0
version: master
- run: zig test stable_array.zig
40 changes: 20 additions & 20 deletions stable_array.zig
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
mem.copy(T, range, new_items);
const after_subrange = start + new_items.len;

for (self.items[after_range..]) |item, i| {
for (self.items[after_range..], 0..) |item, i| {
self.items[after_subrange..][i] = item;
}

Expand Down Expand Up @@ -114,13 +114,13 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
pub fn appendNTimes(self: *Self, value: T, n: usize) !void {
const old_len = self.items.len;
try self.resize(self.items.len + n);
mem.set(T, self.items[old_len..self.items.len], value);
@memset(self.items[old_len..self.items.len], value);
}

pub fn appendNTimesAssumeCapacity(self: *Self, value: T, n: usize) void {
const new_len = self.items.len + n;
assert(new_len <= self.capacity);
mem.set(T, self.items.ptr[self.items.len..new_len], value);
@memset(self.items.ptr[self.items.len..new_len], value);
self.items.len = new_len;
}

Expand Down Expand Up @@ -170,7 +170,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
if (newlen == i) return self.pop();

const old_item = self.items[i];
for (self.items[i..newlen]) |*b, j| b.* = self.items[i + 1 + j];
for (self.items[i..newlen], 0..) |*b, j| b.* = self.items[i + 1 + j];
self.items[newlen] = undefined;
self.items.len = newlen;
return old_item;
Expand Down Expand Up @@ -200,16 +200,16 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {

if (builtin.os.tag == .windows) {
const w = os.windows;
const addr: usize = @ptrToInt(self.items.ptr) + new_capacity_bytes;
w.VirtualFree(@intToPtr(w.PVOID, addr), bytes_to_free, w.MEM_DECOMMIT);
const addr: usize = @intFromPtr(self.items.ptr) + new_capacity_bytes;
w.VirtualFree(@as(w.PVOID, @ptrFromInt(addr)), bytes_to_free, w.MEM_DECOMMIT);
} else {
var base_addr: usize = @ptrToInt(self.items.ptr);
var base_addr: usize = @intFromPtr(self.items.ptr);
var offset_addr: usize = base_addr + new_capacity_bytes;
var addr: [*]align(mem.page_size) u8 = @alignCast(mem.page_size, @intToPtr([*]u8, offset_addr));
var addr: [*]align(mem.page_size) u8 = @ptrFromInt(offset_addr);
if (comptime builtin.target.isDarwin()) {
const MADV_DONTNEED = 4;
const err: c_int = darwin.madvise(addr, bytes_to_free, MADV_DONTNEED);
switch (@intToEnum(os.darwin.E, err)) {
switch (@as(os.darwin.E, @enumFromInt(err))) {
os.E.INVAL => unreachable,
os.E.NOMEM => unreachable,
else => {},
Expand Down Expand Up @@ -238,10 +238,10 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
if (self.capacity > 0) {
if (builtin.os.tag == .windows) {
const w = os.windows;
w.VirtualFree(@ptrCast(*anyopaque, self.items.ptr), 0, w.MEM_RELEASE);
w.VirtualFree(@as(*anyopaque, @ptrCast(self.items.ptr)), 0, w.MEM_RELEASE);
} else {
var slice: []align(mem.page_size) const u8 = undefined;
slice.ptr = @alignCast(mem.page_size, @ptrCast([*]u8, self.items.ptr));
slice.ptr = @alignCast(@as([*]u8, @ptrCast(self.items.ptr)));
slice.len = self.max_virtual_alloc_bytes;
os.munmap(slice);
}
Expand All @@ -260,15 +260,15 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
if (builtin.os.tag == .windows) {
const w = os.windows;
const addr: w.PVOID = try w.VirtualAlloc(null, self.max_virtual_alloc_bytes, w.MEM_RESERVE, w.PAGE_READWRITE);
self.items.ptr = @ptrCast([*]T, @alignCast(alignment, addr));
self.items.ptr = @alignCast(@ptrCast(addr));
self.items.len = 0;
} else {
const prot: u32 = std.c.PROT.READ | std.c.PROT.WRITE;
const map: u32 = std.c.MAP.PRIVATE | std.c.MAP.ANONYMOUS;
const fd: os.fd_t = -1;
const offset: usize = 0;
var slice = try os.mmap(null, self.max_virtual_alloc_bytes, prot, map, fd, offset);
self.items.ptr = @ptrCast([*]T, @alignCast(alignment, slice.ptr));
self.items.ptr = @alignCast(@ptrCast(slice.ptr));
self.items.len = 0;
}
} else if (current_capacity_bytes == self.max_virtual_alloc_bytes) {
Expand All @@ -278,7 +278,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {

if (builtin.os.tag == .windows) {
const w = std.os.windows;
_ = try w.VirtualAlloc(@ptrCast(w.PVOID, self.items.ptr), new_capacity_bytes, w.MEM_COMMIT, w.PAGE_READWRITE);
_ = try w.VirtualAlloc(@as(w.PVOID, @ptrCast(self.items.ptr)), new_capacity_bytes, w.MEM_COMMIT, w.PAGE_READWRITE);
}
}

Expand Down Expand Up @@ -319,7 +319,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
}

fn calcBytesUsedForCapacity(capacity: usize) usize {
return mem.alignForward(k_sizeof * capacity, mem.page_size);
return mem.alignForward(usize, k_sizeof * capacity, mem.page_size);
}
};
}
Expand All @@ -344,15 +344,15 @@ test "append" {
var a = StableArray(u8).init(TEST_VIRTUAL_ALLOC_SIZE);
try a.appendSlice(&[_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
assert(a.calcTotalUsedBytes() == mem.page_size);
for (a.items) |v, i| {
for (a.items, 0..) |v, i| {
assert(v == i);
}
a.deinit();

var b = StableArrayAligned(u8, mem.page_size).init(TEST_VIRTUAL_ALLOC_SIZE);
try b.appendSlice(&[_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
assert(b.calcTotalUsedBytes() == mem.page_size * 10);
for (b.items) |v, i| {
for (b.items, 0..) |v, i| {
assert(v == i);
}
b.deinit();
Expand All @@ -365,7 +365,7 @@ test "shrinkAndFree" {

assert(a.calcTotalUsedBytes() == mem.page_size);
assert(a.items.len == 5);
for (a.items) |v, i| {
for (a.items, 0..) |v, i| {
assert(v == i);
}
a.deinit();
Expand All @@ -375,7 +375,7 @@ test "shrinkAndFree" {
b.shrinkAndFree(5);
assert(b.calcTotalUsedBytes() == mem.page_size * 5);
assert(b.items.len == 5);
for (b.items) |v, i| {
for (b.items, 0..) |v, i| {
assert(v == i);
}
b.deinit();
Expand All @@ -386,7 +386,7 @@ test "shrinkAndFree" {
assert(c.calcTotalUsedBytes() == mem.page_size * 3);
assert(c.capacity == 6);
assert(c.items.len == 5);
for (c.items) |v, i| {
for (c.items, 0..) |v, i| {
assert(v == i);
}
c.deinit();
Expand Down

0 comments on commit 55905a3

Please sign in to comment.