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