@@ -3,12 +3,13 @@ const builtin = @import("builtin");
3
3
const os = std .os ;
4
4
const posix = std .posix ;
5
5
const mem = std .mem ;
6
+ const heap = std .heap ;
6
7
const assert = std .debug .assert ;
7
8
8
9
const AllocError = std .mem .Allocator .Error ;
9
10
10
11
const darwin = struct {
11
- extern "c" fn madvise (ptr : [* ]align (mem.page_size ) u8 , length : usize , advice : c_int ) c_int ;
12
+ extern "c" fn madvise (ptr : [* ]align (heap.page_size_min ) u8 , length : usize , advice : c_int ) c_int ;
12
13
};
13
14
14
15
pub fn StableArray (comptime T : type ) type {
@@ -33,7 +34,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
33
34
max_virtual_alloc_bytes : usize ,
34
35
35
36
pub fn init (max_virtual_alloc_bytes : usize ) Self {
36
- assert (@mod (max_virtual_alloc_bytes , mem . page_size ) == 0 ); // max_virtual_alloc_bytes must be a multiple of mem.page_size
37
+ assert (@mod (max_virtual_alloc_bytes , heap . page_size_min ) == 0 ); // max_virtual_alloc_bytes must be a multiple of heap.page_size_min
37
38
return Self {
38
39
.items = &[_ ]T {},
39
40
.capacity = 0 ,
@@ -208,8 +209,8 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
208
209
} else {
209
210
const base_addr : usize = @intFromPtr (self .items .ptr );
210
211
const offset_addr : usize = base_addr + new_capacity_bytes ;
211
- const addr : [* ]align (mem . page_size ) u8 = @ptrFromInt (offset_addr );
212
- if (comptime builtin .target .isDarwin ()) {
212
+ const addr : [* ]align (heap . page_size_min ) u8 = @ptrFromInt (offset_addr );
213
+ if (comptime builtin .os . tag .isDarwin ()) {
213
214
const MADV_DONTNEED = 4 ;
214
215
const err : c_int = darwin .madvise (addr , bytes_to_free , MADV_DONTNEED );
215
216
switch (@as (posix .E , @enumFromInt (err ))) {
@@ -243,7 +244,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
243
244
const w = os .windows ;
244
245
w .VirtualFree (@as (* anyopaque , @ptrCast (self .items .ptr )), 0 , w .MEM_RELEASE );
245
246
} else {
246
- var slice : []align (mem . page_size ) const u8 = undefined ;
247
+ var slice : []align (heap . page_size_min ) const u8 = undefined ;
247
248
slice .ptr = @alignCast (@as ([* ]u8 , @ptrCast (self .items .ptr )));
248
249
slice .len = self .max_virtual_alloc_bytes ;
249
250
posix .munmap (slice );
@@ -340,7 +341,7 @@ pub fn StableArrayAligned(comptime T: type, comptime alignment: u29) type {
340
341
}
341
342
342
343
fn calcBytesUsedForCapacity (capacity : usize ) usize {
343
- return mem .alignForward (usize , k_sizeof * capacity , mem . page_size );
344
+ return mem .alignForward (usize , k_sizeof * capacity , heap . page_size_min );
344
345
}
345
346
};
346
347
}
@@ -364,15 +365,15 @@ test "init" {
364
365
test "append" {
365
366
var a = StableArray (u8 ).init (TEST_VIRTUAL_ALLOC_SIZE );
366
367
try a .appendSlice (&[_ ]u8 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 });
367
- assert (a .calcTotalUsedBytes () == mem . page_size );
368
+ assert (a .calcTotalUsedBytes () == heap . page_size_min );
368
369
for (a .items , 0.. ) | v , i | {
369
370
assert (v == i );
370
371
}
371
372
a .deinit ();
372
373
373
- var b = StableArrayAligned (u8 , mem . page_size ).init (TEST_VIRTUAL_ALLOC_SIZE );
374
+ var b = StableArrayAligned (u8 , heap . page_size_min ).init (TEST_VIRTUAL_ALLOC_SIZE );
374
375
try b .appendSlice (&[_ ]u8 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 });
375
- assert (b .calcTotalUsedBytes () == mem . page_size * 10 );
376
+ assert (b .calcTotalUsedBytes () == heap . page_size_min * 10 );
376
377
for (b .items , 0.. ) | v , i | {
377
378
assert (v == i );
378
379
}
@@ -384,17 +385,17 @@ test "shrinkAndFree" {
384
385
try a .appendSlice (&[_ ]u8 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 });
385
386
a .shrinkAndFree (5 );
386
387
387
- assert (a .calcTotalUsedBytes () == mem . page_size );
388
+ assert (a .calcTotalUsedBytes () == heap . page_size_min );
388
389
assert (a .items .len == 5 );
389
390
for (a .items , 0.. ) | v , i | {
390
391
assert (v == i );
391
392
}
392
393
a .deinit ();
393
394
394
- var b = StableArrayAligned (u8 , mem . page_size ).init (TEST_VIRTUAL_ALLOC_SIZE );
395
+ var b = StableArrayAligned (u8 , heap . page_size_min ).init (TEST_VIRTUAL_ALLOC_SIZE );
395
396
try b .appendSlice (&[_ ]u8 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 });
396
397
b .shrinkAndFree (5 );
397
- assert (b .calcTotalUsedBytes () == mem . page_size * 5 );
398
+ assert (b .calcTotalUsedBytes () == heap . page_size_min * 5 );
398
399
assert (b .items .len == 5 );
399
400
for (b .items , 0.. ) | v , i | {
400
401
assert (v == i );
@@ -404,7 +405,7 @@ test "shrinkAndFree" {
404
405
var c = StableArrayAligned (u8 , 2048 ).init (TEST_VIRTUAL_ALLOC_SIZE );
405
406
try c .appendSlice (&[_ ]u8 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 });
406
407
c .shrinkAndFree (5 );
407
- assert (c .calcTotalUsedBytes () == mem . page_size * 3 );
408
+ assert (c .calcTotalUsedBytes () == heap . page_size_min * 3 );
408
409
assert (c .capacity == 6 );
409
410
assert (c .items .len == 5 );
410
411
for (c .items , 0.. ) | v , i | {
@@ -426,10 +427,10 @@ test "resize" {
426
427
}
427
428
428
429
test "out of memory" {
429
- var a = StableArrayAligned (u8 , mem . page_size ).init (TEST_VIRTUAL_ALLOC_SIZE );
430
+ var a = StableArrayAligned (u8 , heap . page_size_min ).init (TEST_VIRTUAL_ALLOC_SIZE );
430
431
defer a .deinit ();
431
432
432
- const max_capacity : usize = TEST_VIRTUAL_ALLOC_SIZE / mem . page_size ;
433
+ const max_capacity : usize = TEST_VIRTUAL_ALLOC_SIZE / heap . page_size_min ;
433
434
try a .appendNTimes (0xFF , max_capacity );
434
435
for (a .items ) | v | {
435
436
assert (v == 0xFF );
@@ -464,8 +465,8 @@ test "growing retains values" {
464
465
var a = StableArray (u8 ).init (TEST_VIRTUAL_ALLOC_SIZE );
465
466
defer a .deinit ();
466
467
467
- try a .resize (mem . page_size );
468
+ try a .resize (heap . page_size_min );
468
469
a .items [0 ] = 0xFF ;
469
- try a .resize (mem . page_size * 2 );
470
+ try a .resize (heap . page_size_min * 2 );
470
471
assert (a .items [0 ] == 0xFF );
471
472
}
0 commit comments