authorgravatar for justin.b.alexander1@gmail.comvegecode <justin.b.alexander1@gmail.com> 2019-03-25 22:13:21-05:00
committergravatar for justin.b.alexander1@gmail.comvegecode <justin.b.alexander1@gmail.com> 2019-03-31 15:54:02-05:00
loge89b704293447807c67e938ca471ef40a9597ab6
tree61a1259fb174a70a6db415366014248e7769e68c
parenta4afacd1822cea75196b27a8a5fe30bd252eccae

Add memcmp to builtins


1 files changed, 25 insertions(+), 0 deletions(-)

std/special/builtin.zig+25
......@@ -55,6 +55,31 @@ export fn memmove(dest: ?[*]u8, src: ?[*]const u8, n: usize) ?[*]u8 {
5555 return dest;
5656}
5757
58export fn memcmp(vl: ?[*]const u8, vr: ?[*]const u8, n: usize) isize {
59 @setRuntimeSafety(false);
60
61 var index: usize = 0;
62 while (index != n) : (index += 1) {
63 const compare_val = @bitCast(i8, vl.?[index] -% vr.?[index]);
64 if (compare_val != 0) {
65 return compare_val;
66 }
67 }
68
69 return 0;
70}
71
72test "test_memcmp" {
73 const base_arr = []u8{ 1, 1, 1 };
74 const arr1 = []u8{ 1, 1, 1 };
75 const arr2 = []u8{ 1, 0, 1 };
76 const arr3 = []u8{ 1, 2, 1 };
77
78 std.testing.expect(memcmp(base_arr[0..].ptr, arr1[0..].ptr, base_arr.len) == 0);
79 std.testing.expect(memcmp(base_arr[0..].ptr, arr2[0..].ptr, base_arr.len) == 1);
80 std.testing.expect(memcmp(base_arr[0..].ptr, arr3[0..].ptr, base_arr.len) == -1);
81}
82
5883comptime {
5984 if (builtin.mode != builtin.Mode.ReleaseFast and
6085 builtin.mode != builtin.Mode.ReleaseSmall and