Function toInt [src]
Convert self to Int.
Returns an error if self cannot be narrowed into the requested type without truncation.
Prototype
pub fn toInt(self: Const, comptime Int: type) ConvertError!Int Parameters
self: ConstInt: type Possible Errors
Source
pub fn toInt(self: Const, comptime Int: type) ConvertError!Int {
switch (@typeInfo(Int)) {
.int => |info| {
// Make sure -0 is handled correctly.
if (self.eqlZero()) return 0;
const Unsigned = std.meta.Int(.unsigned, info.bits);
if (!self.fitsInTwosComp(info.signedness, info.bits)) {
return error.TargetTooSmall;
}
var r: Unsigned = 0;
if (@sizeOf(Unsigned) <= @sizeOf(Limb)) {
r = @intCast(self.limbs[0]);
} else {
for (self.limbs[0..self.limbs.len], 0..) |_, ri| {
const limb = self.limbs[self.limbs.len - ri - 1];
r <<= limb_bits;
r |= limb;
}
}
if (info.signedness == .unsigned) {
return if (self.positive) @intCast(r) else error.NegativeIntoUnsigned;
} else {
if (self.positive) {
return @intCast(r);
} else {
if (math.cast(Int, r)) |ok| {
return -ok;
} else {
return minInt(Int);
}
}
}
},
else => @compileError("expected int type, found '" ++ @typeName(Int) ++ "'"),
}
}