big: Prettify internal_cmp_digit.

This commit is contained in:
Jeroen van Rijn
2021-08-11 20:59:53 +02:00
parent fd95f50c56
commit 53bf66ce1e
3 changed files with 23 additions and 28 deletions
+3 -3
View File
@@ -1,10 +1,10 @@
@echo off @echo off
:odin run . -vet odin run . -vet
: -o:size : -o:size
:odin build . -build-mode:shared -show-timings -o:minimal -no-bounds-check :odin build . -build-mode:shared -show-timings -o:minimal -no-bounds-check
:odin build . -build-mode:shared -show-timings -o:size -no-bounds-check :odin build . -build-mode:shared -show-timings -o:size -no-bounds-check
:odin build . -build-mode:shared -show-timings -o:size :odin build . -build-mode:shared -show-timings -o:size
odin build . -build-mode:shared -show-timings -o:speed -no-bounds-check :odin build . -build-mode:shared -show-timings -o:speed -no-bounds-check
:odin build . -build-mode:shared -show-timings -o:speed :odin build . -build-mode:shared -show-timings -o:speed
python test.py :python test.py
+1
View File
@@ -89,6 +89,7 @@ int_compare_digit :: proc(a: ^Int, b: DIGIT) -> (comparison: int, err: Error) {
return #force_inline internal_cmp_digit(a, b), nil; return #force_inline internal_cmp_digit(a, b), nil;
} }
int_cmp_digit :: int_compare_digit;
/* /*
Compare the magnitude of two `Int`s, unsigned. Compare the magnitude of two `Int`s, unsigned.
+19 -25
View File
@@ -1046,40 +1046,34 @@ internal_compare :: proc { internal_int_compare, internal_int_compare_digit, };
internal_cmp :: internal_compare; internal_cmp :: internal_compare;
/* /*
Compare an `Int` to an unsigned number upto the size of the backing type. Compare an `Int` to an unsigned number upto `DIGIT & _MASK`.
Returns -1 if `a` < `b`, 0 if `a` == `b` and 1 if `b` > `a`.
Returns -1 if `a` < `b`, 0 if `a` == `b` and 1 if `b` > `a`. Expects: `a` and `b` both to be valid `Int`s, i.e. initialized and not `nil`.
Expects `a` and `b` both to be valid `Int`s, i.e. initialized and not `nil`.
*/ */
internal_int_compare_digit :: #force_inline proc(a: ^Int, b: DIGIT) -> (comparison: int) { internal_int_compare_digit :: #force_inline proc(a: ^Int, b: DIGIT) -> (comparison: int) {
/* a_is_negative := #force_inline internal_is_negative(a);
Compare based on sign.
*/
if #force_inline internal_is_negative(a) { return -1; }
/*
Compare based on magnitude.
*/
if a.used > 1 { return +1; }
/*
Compare the only digit in `a` to `b`.
*/
switch { switch {
case a.digit[0] < b: /*
return -1; Compare based on sign first.
case a.digit[0] == b: */
return 0; case a_is_negative: return -1;
case a.digit[0] > b: /*
return +1; Then compare on magnitude.
case: */
case a.used > 1: return +1;
/*
We have only one digit. Compare it against `b`.
*/
case a.digit[0] < b: return -1;
case a.digit[0] == b: return 0;
case a.digit[0] > b: return +1;
/* /*
Unreachable. Unreachable.
Just here because Odin complains about a missing return value at the bottom of the proc otherwise. Just here because Odin complains about a missing return value at the bottom of the proc otherwise.
*/ */
return; case: return;
} }
} }
internal_compare_digit :: proc { internal_int_compare_digit, }; internal_compare_digit :: proc { internal_int_compare_digit, };