mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
`TailQueue` was implemented as a doubly-linked list, but named after an abstract data type. This was inconsistent with `SinglyLinkedList`, which can be used to implement an abstract data type, but is still named after the implementation. Renaming `TailQueue` to `DoublyLinkedList` improves consistency between the two type names, and should help discoverability. `TailQueue` is now a deprecated alias of `DoublyLinkedList`. Related to issues #1629 and #8233.
52 lines
1.1 KiB
Zig
52 lines
1.1 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
|
|
const mystruct = struct {
|
|
pending: ?listofstructs,
|
|
};
|
|
pub fn DoublyLinkedList(comptime T: type) type {
|
|
return struct {
|
|
const Self = @This();
|
|
|
|
pub const Node = struct {
|
|
prev: ?*Node,
|
|
next: ?*Node,
|
|
data: T,
|
|
};
|
|
|
|
first: ?*Node,
|
|
last: ?*Node,
|
|
len: usize,
|
|
|
|
pub fn init() Self {
|
|
return Self{
|
|
.first = null,
|
|
.last = null,
|
|
.len = 0,
|
|
};
|
|
}
|
|
};
|
|
}
|
|
const listofstructs = DoublyLinkedList(mystruct);
|
|
|
|
const a = struct {
|
|
const Self = @This();
|
|
|
|
foo: listofstructs,
|
|
|
|
pub fn init() Self {
|
|
return Self{
|
|
.foo = listofstructs.init(),
|
|
};
|
|
}
|
|
};
|
|
|
|
test "initialization" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
var t = a.init();
|
|
try std.testing.expect(t.foo.len == 0);
|
|
}
|