libnum: make comparisons with int const

This commit is contained in:
Lephenixnoir 2023-04-22 19:55:47 +02:00
parent 0e1ec15a6d
commit 36a21e3261
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
1 changed files with 15 additions and 15 deletions

View File

@ -132,19 +132,19 @@ struct num8
/* Comparisons with int */
inline constexpr bool operator==(int const &i) {
inline constexpr bool operator==(int const &i) const {
return (v | i) == 0;
}
inline constexpr bool operator<(int const &i) {
inline constexpr bool operator<(int const &i) const {
return i >= 1;
}
inline constexpr bool operator>=(int const &i) {
inline constexpr bool operator>=(int const &i) const {
return i <= 0;
}
inline constexpr bool operator<=(int const &i) {
inline constexpr bool operator<=(int const &i) const {
return i + !v > 0;
}
inline constexpr bool operator>(int const &i) {
inline constexpr bool operator>(int const &i) const {
return i + !v <= 0;
}
@ -236,22 +236,22 @@ struct num16
/* Comparisons with int */
inline constexpr bool operator==(int const &i) {
inline constexpr bool operator==(int const &i) const {
return (int16_t)i == i && (i << 8) == v;
}
inline constexpr bool operator<(int const &i) {
inline constexpr bool operator<(int const &i) const {
return (v >> 8) < i;
}
inline constexpr bool operator>=(int const &i) {
inline constexpr bool operator>=(int const &i) const {
return (v >> 8) >= i;
}
/* Unfortunately the branchless version for this test is expressed in terms
of `v`, not `i`, so it does not simplify well when `i` is known. In that
case, writing eg. `x > num16(0)` is faster than `x > 0`. */
inline constexpr bool operator<=(int const &i) {
inline constexpr bool operator<=(int const &i) const {
return (v >> 8) + ((v & 0xff) != 0) <= i;
}
inline constexpr bool operator>(int const &i) {
inline constexpr bool operator>(int const &i) const {
return (v >> 8) + ((v & 0xff) != 0) > i;
}
@ -348,19 +348,19 @@ struct num32
/* Comparisons with int */
inline constexpr bool operator==(int const &i) {
inline constexpr bool operator==(int const &i) const {
return (int16_t)i == i && (i << 16) == v;
}
inline constexpr bool operator<(int const &i) {
inline constexpr bool operator<(int const &i) const {
return (v >> 16) < i;
}
inline constexpr bool operator>=(int const &i) {
inline constexpr bool operator>=(int const &i) const {
return (v >> 16) >= i;
}
inline constexpr bool operator<=(int const &i) {
inline constexpr bool operator<=(int const &i) const {
return (v >> 16) + ((v & 0xffff) != 0) <= i;
}
inline constexpr bool operator>(int const &i) {
inline constexpr bool operator>(int const &i) const {
return (v >> 16) + ((v & 0xffff) != 0) > i;
}