stevee

My wayland statusbar
git clone git://gtms.dev/stevee
Log | Files | Refs | README | LICENSE

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 }