diff --git a/include/operator.h b/include/operator.h index 2660945..654d50b 100644 --- a/include/operator.h +++ b/include/operator.h @@ -23,6 +23,7 @@ consteval auto get_common_length() -> std::size_t { } } + template requires bit_match <_Tp, _Up> constexpr auto operator + (const _Tp &lhs, const _Up &rhs) { @@ -34,42 +35,42 @@ template requires bit_match <_Tp, _Up> constexpr auto operator - (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) - cast(rhs)); } template requires bit_match <_Tp, _Up> constexpr auto operator * (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) * cast(rhs)); } template requires bit_match <_Tp, _Up> constexpr auto operator / (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) / cast(rhs)); } template requires bit_match <_Tp, _Up> constexpr auto operator & (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) & cast(rhs)); } template requires bit_match <_Tp, _Up> constexpr auto operator | (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) | cast(rhs)); } template requires bit_match <_Tp, _Up> constexpr auto operator ^ (const _Tp &lhs, const _Up &rhs) { constexpr auto _Len = get_common_length <_Tp, _Up>(); - return Bit <_Len> (cast(lhs) + cast(rhs)); + return Bit <_Len> (cast(lhs) ^ cast(rhs)); } template @@ -105,4 +106,25 @@ constexpr auto operator - (const _Tp &value) { return Bit <_Tp::_Bit_Len> (-cast(value)); } +template +constexpr bool operator && (const _Tp &lhs, const _Up &rhs) { + return cast(lhs) && cast(rhs); +} + +template +constexpr bool operator || (const _Tp &lhs, const _Up &rhs) { + return cast(lhs) || cast(rhs); +} + +template +constexpr bool operator == (const _Tp &lhs, const _Up &rhs) { + return cast(lhs) == cast(rhs); +} + +template +constexpr auto operator <=> (const _Tp &lhs, const _Up &rhs) { + return cast(lhs) <=> cast(rhs); +} + + } // namespace dark