1use crate::{error::assert_finite, fbig::FBig, repr::Word, round::Round};
2use core::ops::{Shl, ShlAssign, Shr, ShrAssign};
3
4impl<R: Round, const B: Word> Shl<isize> for FBig<R, B> {
5 type Output = Self;
6 #[inline]
7 fn shl(mut self, rhs: isize) -> Self::Output {
8 assert_finite(&self.repr);
9 if !self.repr.is_zero() {
10 self.repr.exponent += rhs;
11 }
12 self
13 }
14}
15
16impl<R: Round, const B: Word> ShlAssign<isize> for FBig<R, B> {
17 #[inline]
18 fn shl_assign(&mut self, rhs: isize) {
19 assert_finite(&self.repr);
20 if !self.repr.is_zero() {
21 self.repr.exponent += rhs;
22 }
23 }
24}
25
26impl<R: Round, const B: Word> Shr<isize> for FBig<R, B> {
27 type Output = Self;
28 #[inline]
29 fn shr(mut self, rhs: isize) -> Self::Output {
30 assert_finite(&self.repr);
31 if !self.repr.is_zero() {
32 self.repr.exponent -= rhs;
33 }
34 self
35 }
36}
37
38impl<R: Round, const B: Word> ShrAssign<isize> for FBig<R, B> {
39 #[inline]
40 fn shr_assign(&mut self, rhs: isize) {
41 assert_finite(&self.repr);
42 if !self.repr.is_zero() {
43 self.repr.exponent -= rhs;
44 }
45 self.repr.exponent -= rhs;
46 }
47}