list.zig (2502B)
1 const std = @import("std"); 2 const wl = @import("wayland").server.wl; 3 4 const B = struct { 5 data: u32, 6 link: wl.list.Link = undefined, 7 }; 8 9 const C = struct { 10 data: u32, 11 link: wl.list.Link = undefined, 12 13 pub fn getLink(c: *C) *wl.list.Link { 14 return &c.link; 15 } 16 17 pub fn fromLink(link: *wl.list.Link) *C { 18 return @fieldParentPtr("link", link); 19 } 20 }; 21 22 pub fn main() void { 23 { 24 var a: wl.list.Head(B, .link) = undefined; 25 a.init(); 26 27 var one = B{ .data = 1 }; 28 var two = B{ .data = 2 }; 29 var three = B{ .data = 3 }; 30 31 std.debug.print("length: {} empty: {}\n", .{ a.length(), a.empty() }); 32 33 a.append(&one); 34 a.append(&two); 35 a.append(&three); 36 37 std.debug.print("length: {} empty: {}\n", .{ a.length(), a.empty() }); 38 39 var b: wl.list.Head(B, .link) = undefined; 40 b.init(); 41 42 var four = B{ .data = 4 }; 43 var five = B{ .data = 5 }; 44 b.append(&four); 45 b.append(&five); 46 47 a.appendList(&b); 48 49 std.debug.print("length: {} empty: {}\n", .{ a.length(), a.empty() }); 50 51 { 52 std.debug.print("forward\n", .{}); 53 var it = a.iterator(.forward); 54 while (it.next()) |x| std.debug.print("{}\n", .{x.data}); 55 } 56 57 three.link.swapWith(&four.link); 58 59 { 60 std.debug.print("reverse swapped 3/4\n", .{}); 61 var it = a.iterator(.reverse); 62 while (it.next()) |x| std.debug.print("{}\n", .{x.data}); 63 } 64 } 65 { 66 var a: wl.list.Head(C, null) = undefined; 67 a.init(); 68 69 var one = C{ .data = 1 }; 70 var two = C{ .data = 2 }; 71 var three = C{ .data = 3 }; 72 var four = C{ .data = 4 }; 73 var five = C{ .data = 5 }; 74 75 std.debug.print("length: {} empty: {}\n", .{ a.length(), a.empty() }); 76 77 a.append(&one); 78 a.append(&two); 79 a.append(&three); 80 a.append(&four); 81 a.append(&five); 82 83 std.debug.print("length: {} empty: {}\n", .{ a.length(), a.empty() }); 84 85 { 86 std.debug.print("forward\n", .{}); 87 var it = a.iterator(.forward); 88 while (it.next()) |b| std.debug.print("{}\n", .{b.data}); 89 } 90 91 two.link.swapWith(&five.link); 92 93 { 94 std.debug.print("reverse swapped 2/5\n", .{}); 95 var it = a.iterator(.reverse); 96 while (it.next()) |b| std.debug.print("{}\n", .{b.data}); 97 } 98 } 99 }