authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-05-04 14:02:04+10:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-06-10 15:41:40+10:00
logb0648bfbd31cad73e00ee72b430dcf2c2907e08f
tree25a5a2da7a6527cf61096e236baf26c58d1ccc05
parentddf7942aaa6a41296d9338423dcdfb93b915e4df
signaturelock-open Commit is signed but in an unrecognized format.

std.heap.ArenaAllocator: use singly linked list


1 files changed, 5 insertions(+), 6 deletions(-)

std/heap.zig+5-6
......@@ -347,10 +347,10 @@ pub const ArenaAllocator = struct {
347347 pub allocator: Allocator,
348348
349349 child_allocator: *Allocator,
350 buffer_list: std.TailQueue([]u8),
350 buffer_list: std.SinglyLinkedList([]u8),
351351 end_index: usize,
352352
353 const BufNode = std.TailQueue([]u8).Node;
353 const BufNode = std.SinglyLinkedList([]u8).Node;
354354
355355 pub fn init(child_allocator: *Allocator) ArenaAllocator {
356356 return ArenaAllocator{
......@@ -359,7 +359,7 @@ pub const ArenaAllocator = struct {
359359 .shrinkFn = shrink,
360360 },
361361 .child_allocator = child_allocator,
362 .buffer_list = std.TailQueue([]u8).init(),
362 .buffer_list = std.SinglyLinkedList([]u8).init(),
363363 .end_index = 0,
364364 };
365365 }
......@@ -387,10 +387,9 @@ pub const ArenaAllocator = struct {
387387 const buf_node = &buf_node_slice[0];
388388 buf_node.* = BufNode{
389389 .data = buf,
390 .prev = null,
391390 .next = null,
392391 };
393 self.buffer_list.append(buf_node);
392 self.buffer_list.prepend(buf_node);
394393 self.end_index = 0;
395394 return buf_node;
396395 }
......@@ -398,7 +397,7 @@ pub const ArenaAllocator = struct {
398397 fn alloc(allocator: *Allocator, n: usize, alignment: u29) ![]u8 {
399398 const self = @fieldParentPtr(ArenaAllocator, "allocator", allocator);
400399
401 var cur_node = if (self.buffer_list.last) |last_node| last_node else try self.createNode(0, n + alignment);
400 var cur_node = if (self.buffer_list.first) |first_node| first_node else try self.createNode(0, n + alignment);
402401 while (true) {
403402 const cur_buf = cur_node.data[@sizeOf(BufNode)..];
404403 const addr = @ptrToInt(cur_buf.ptr) + self.end_index;