diff --git a/include/operator.h b/include/operator.h index 3014e80..2660945 100644 --- a/include/operator.h +++ b/include/operator.h @@ -72,4 +72,37 @@ constexpr auto operator ^ (const _Tp &lhs, const _Up &rhs) { return Bit <_Len> (cast(lhs) + cast(rhs)); } +template +concept int_or_bit = int_type <_Tp> || bit_type <_Tp>; + +template +constexpr auto operator << (const _Tp &lhs, const _Up &rhs) { + return Bit <_Tp::_Bit_Len> (cast(lhs) << (cast(rhs) & kMaxLength)); +} + +template +constexpr auto operator >> (const _Tp &lhs, const _Up &rhs) { + return Bit <_Tp::_Bit_Len> (cast(lhs) >> (cast(rhs) & kMaxLength)); +} + +template +constexpr auto operator ~ (const _Tp &value) { + return Bit <_Tp::_Bit_Len> (~cast(value)); +} + +template +constexpr auto operator ! (const _Tp &value) { + return ~value; +} + +template +constexpr auto operator + (const _Tp &value) { + return Bit <_Tp::_Bit_Len> (+cast(value)); +} + +template +constexpr auto operator - (const _Tp &value) { + return Bit <_Tp::_Bit_Len> (-cast(value)); +} + } // namespace dark