| ... | ... | @@ -1,5 +1,6 @@ |
| 1 | | const assert = @import("std").debug.assert; |
| 2 | | const mem = @import("std").mem; // For mem.Compare |
| 1 | const std = @import("index.zig"); |
| 2 | const assert = std.debug.assert; |
| 3 | const mem = std.mem; // For mem.Compare |
| 3 | 4 | |
| 4 | 5 | const Color = enum(u1) { |
| 5 | 6 | Black, |
| ... | ... | @@ -129,8 +130,9 @@ pub const Node = struct { |
| 129 | 130 | |
| 130 | 131 | pub const Tree = struct { |
| 131 | 132 | root: ?*Node, |
| 132 | | compare_fn: fn(*Node, *Node) mem.Compare, |
| 133 | compareFn: fn(*Node, *Node) mem.Compare, |
| 133 | 134 | |
| 135 | /// If you have a need for a version that caches this, please file a bug. |
| 134 | 136 | pub fn first(tree: *Tree) ?*Node { |
| 135 | 137 | var node: *Node = tree.root orelse return null; |
| 136 | 138 | |
| ... | ... | @@ -380,7 +382,7 @@ pub const Tree = struct { |
| 380 | 382 | var new = newconst; |
| 381 | 383 | |
| 382 | 384 | // I assume this can get optimized out if the caller already knows. |
| 383 | | if (tree.compare_fn(old, new) != mem.Compare.Equal) return ReplaceError.NotEqual; |
| 385 | if (tree.compareFn(old, new) != mem.Compare.Equal) return ReplaceError.NotEqual; |
| 384 | 386 | |
| 385 | 387 | if (old.get_parent()) |parent| { |
| 386 | 388 | parent.set_child(new, parent.left == old); |
| ... | ... | @@ -397,7 +399,7 @@ pub const Tree = struct { |
| 397 | 399 | |
| 398 | 400 | pub fn init(tree: *Tree, f: fn(*Node, *Node) mem.Compare) void { |
| 399 | 401 | tree.root = null; |
| 400 | | tree.compare_fn = f; |
| 402 | tree.compareFn = f; |
| 401 | 403 | } |
| 402 | 404 | }; |
| 403 | 405 | |
| ... | ... | @@ -460,7 +462,7 @@ fn do_lookup(key: *Node, tree: *Tree, pparent: *?*Node, is_left: *bool) ?*Node { |
| 460 | 462 | is_left.* = false; |
| 461 | 463 | |
| 462 | 464 | while (maybe_node) |node| { |
| 463 | | var res: mem.Compare = tree.compare_fn(node, key); |
| 465 | var res: mem.Compare = tree.compareFn(node, key); |
| 464 | 466 | if (res == mem.Compare.Equal) { |
| 465 | 467 | return node; |
| 466 | 468 | } |
| ... | ... | @@ -501,7 +503,7 @@ fn testCompare(l: *Node, r: *Node) mem.Compare { |
| 501 | 503 | unreachable; |
| 502 | 504 | } |
| 503 | 505 | |
| 504 | | test "populate, remove, and replace, depulicate keys" { |
| 506 | test "rb" { |
| 505 | 507 | var tree: Tree = undefined; |
| 506 | 508 | var ns: [10]testNumber = undefined; |
| 507 | 509 | ns[0].value = 42; |