authorgravatar for shawn@git.icuShawn Landden <shawn@git.icu> 2018-08-07 04:57:41-07:00
committergravatar for shawn@git.icuShawn Landden <shawn@git.icu> 2018-08-07 04:57:41-07:00
log86b512c5cd277a800c8333ed4206002316f4aca2
treefbbaa07c60593d0682af8a2fd6d317dbdff6d53b
parent5d2abf4402bdbd70eb95cf0d516ce12ff4202101

mem: move enum Compare from rb to mem


2 files changed, 18 insertions(+), 17 deletions(-)

std/mem.zig+6
......@@ -135,6 +135,12 @@ pub const Allocator = struct {
135135 }
136136};
137137
138const Compare = enum {
139 LessThan,
140 Equal,
141 GreaterThan,
142};
143
138144/// Copy all of source into dest at position 0.
139145/// dest.len must be >= source.len.
140146/// dest.ptr must be <= src.ptr.
std/rb.zig+12-17
......@@ -1,4 +1,5 @@
11const assert = @import("std").debug.assert;
2const mem = @import("std").mem; // For mem.Compare
23
34const Color = enum(u1) {
45 Black,
......@@ -7,12 +8,6 @@ const Color = enum(u1) {
78const Red = Color.Red;
89const Black = Color.Black;
910
10const Compare = enum {
11 LessThan,
12 Equal,
13 GreaterThan,
14};
15
1611const ReplaceError = error {
1712 NotEqual,
1813};
......@@ -134,7 +129,7 @@ pub const Node = struct {
134129
135130pub const Tree = struct {
136131 root: ?*Node,
137 compare_fn: fn(*Node, *Node) Compare,
132 compare_fn: fn(*Node, *Node) mem.Compare,
138133
139134 pub fn first(tree: *Tree) ?*Node {
140135 var node: *Node = tree.root orelse return null;
......@@ -385,7 +380,7 @@ pub const Tree = struct {
385380 var new = newconst;
386381
387382 // I assume this can get optimized out if the caller already knows.
388 if (tree.compare_fn(old, new) != Compare.Equal) return ReplaceError.NotEqual;
383 if (tree.compare_fn(old, new) != mem.Compare.Equal) return ReplaceError.NotEqual;
389384
390385 if (old.get_parent()) |parent| {
391386 parent.set_child(new, parent.left == old);
......@@ -400,7 +395,7 @@ pub const Tree = struct {
400395 new.* = old.*;
401396 }
402397
403 pub fn init(tree: *Tree, f: fn(*Node, *Node) Compare) void {
398 pub fn init(tree: *Tree, f: fn(*Node, *Node) mem.Compare) void {
404399 tree.root = null;
405400 tree.compare_fn = f;
406401 }
......@@ -465,15 +460,15 @@ fn do_lookup(key: *Node, tree: *Tree, pparent: *?*Node, is_left: *bool) ?*Node {
465460 is_left.* = false;
466461
467462 while (maybe_node) |node| {
468 var res: Compare = tree.compare_fn(node, key);
469 if (res == Compare.Equal) {
463 var res: mem.Compare = tree.compare_fn(node, key);
464 if (res == mem.Compare.Equal) {
470465 return node;
471466 }
472467 pparent.* = node;
473 if (res == Compare.GreaterThan) {
468 if (res == mem.Compare.GreaterThan) {
474469 is_left.* = true;
475470 maybe_node = node.left;
476 } else if (res == Compare.LessThan) {
471 } else if (res == mem.Compare.LessThan) {
477472 is_left.* = false;
478473 maybe_node = node.right;
479474 } else {
......@@ -492,16 +487,16 @@ fn testGetNumber(node: *Node) *testNumber {
492487 return @fieldParentPtr(testNumber, "node", node);
493488}
494489
495fn testCompare(l: *Node, r: *Node) Compare {
490fn testCompare(l: *Node, r: *Node) mem.Compare {
496491 var left = testGetNumber(l);
497492 var right = testGetNumber(r);
498493
499494 if (left.value < right.value) {
500 return Compare.LessThan;
495 return mem.Compare.LessThan;
501496 } else if (left.value == right.value) {
502 return Compare.Equal;
497 return mem.Compare.Equal;
503498 } else if (left.value > right.value) {
504 return Compare.GreaterThan;
499 return mem.Compare.GreaterThan;
505500 }
506501 unreachable;
507502}