add std.math.big.Int.fitsInTwosComp

so that we can pass runtime-known values
master
Andrew Kelley 2018-07-22 10:58:45 -04:00
parent d53fae3551
commit 99153ac0aa
1 changed files with 8 additions and 4 deletions

View File

@ -150,16 +150,20 @@ pub const Int = struct {
return bits;
}
pub fn fits(self: Int, comptime T: type) bool {
pub fn fitsInTwosComp(self: Int, is_signed: bool, bit_count: usize) bool {
if (self.eqZero()) {
return true;
}
if (!T.is_signed and !self.positive) {
if (!is_signed and !self.positive) {
return false;
}
const req_bits = self.bitCountTwosComp() + @boolToInt(self.positive and T.is_signed);
return T.bit_count >= req_bits;
const req_bits = self.bitCountTwosComp() + @boolToInt(self.positive and is_signed);
return bit_count >= req_bits;
}
pub fn fits(self: Int, comptime T: type) bool {
return self.fitsInTwosComp(T.is_signed, T.bit_count);
}
// Returns the approximate size of the integer in the given base. Negative values accomodate for