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

NegativeIntoUnsigned
TargetTooSmall

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) ++ "'"), } }