mem: move enum Compare from rb to mem

This commit is contained in:
Shawn Landden 2018-08-07 04:57:41 -07:00
parent 5d2abf4402
commit 86b512c5cd
2 changed files with 18 additions and 17 deletions

View File

@ -135,6 +135,12 @@ pub const Allocator = struct {
}
};
const Compare = enum {
LessThan,
Equal,
GreaterThan,
};
/// Copy all of source into dest at position 0.
/// dest.len must be >= source.len.
/// dest.ptr must be <= src.ptr.

View File

@ -1,4 +1,5 @@
const assert = @import("std").debug.assert;
const mem = @import("std").mem; // For mem.Compare
const Color = enum(u1) {
Black,
@ -7,12 +8,6 @@ const Color = enum(u1) {
const Red = Color.Red;
const Black = Color.Black;
const Compare = enum {
LessThan,
Equal,
GreaterThan,
};
const ReplaceError = error {
NotEqual,
};
@ -134,7 +129,7 @@ pub const Node = struct {
pub const Tree = struct {
root: ?*Node,
compare_fn: fn(*Node, *Node) Compare,
compare_fn: fn(*Node, *Node) mem.Compare,
pub fn first(tree: *Tree) ?*Node {
var node: *Node = tree.root orelse return null;
@ -385,7 +380,7 @@ pub const Tree = struct {
var new = newconst;
// I assume this can get optimized out if the caller already knows.
if (tree.compare_fn(old, new) != Compare.Equal) return ReplaceError.NotEqual;
if (tree.compare_fn(old, new) != mem.Compare.Equal) return ReplaceError.NotEqual;
if (old.get_parent()) |parent| {
parent.set_child(new, parent.left == old);
@ -400,7 +395,7 @@ pub const Tree = struct {
new.* = old.*;
}
pub fn init(tree: *Tree, f: fn(*Node, *Node) Compare) void {
pub fn init(tree: *Tree, f: fn(*Node, *Node) mem.Compare) void {
tree.root = null;
tree.compare_fn = f;
}
@ -465,15 +460,15 @@ fn do_lookup(key: *Node, tree: *Tree, pparent: *?*Node, is_left: *bool) ?*Node {
is_left.* = false;
while (maybe_node) |node| {
var res: Compare = tree.compare_fn(node, key);
if (res == Compare.Equal) {
var res: mem.Compare = tree.compare_fn(node, key);
if (res == mem.Compare.Equal) {
return node;
}
pparent.* = node;
if (res == Compare.GreaterThan) {
if (res == mem.Compare.GreaterThan) {
is_left.* = true;
maybe_node = node.left;
} else if (res == Compare.LessThan) {
} else if (res == mem.Compare.LessThan) {
is_left.* = false;
maybe_node = node.right;
} else {
@ -492,16 +487,16 @@ fn testGetNumber(node: *Node) *testNumber {
return @fieldParentPtr(testNumber, "node", node);
}
fn testCompare(l: *Node, r: *Node) Compare {
fn testCompare(l: *Node, r: *Node) mem.Compare {
var left = testGetNumber(l);
var right = testGetNumber(r);
if (left.value < right.value) {
return Compare.LessThan;
return mem.Compare.LessThan;
} else if (left.value == right.value) {
return Compare.Equal;
return mem.Compare.Equal;
} else if (left.value > right.value) {
return Compare.GreaterThan;
return mem.Compare.GreaterThan;
}
unreachable;
}