Function set [src]

Sets the Mutable to value. Value must be an primitive integer type. Asserts the value fits within the limbs buffer. Note: calcLimbLen can be used to figure out how big the limbs buffer needs to be to store a specific value.

Prototype

pub fn set(self: *Mutable, value: anytype) void

Parameters

self: *Mutable

Source

pub fn set(self: *Mutable, value: anytype) void { const T = @TypeOf(value); const needed_limbs = calcLimbLen(value); assert(needed_limbs <= self.limbs.len); // value too big self.len = needed_limbs; self.positive = value >= 0; switch (@typeInfo(T)) { .int => |info| { var w_value = @abs(value); if (info.bits <= limb_bits) { self.limbs[0] = w_value; } else { var i: usize = 0; while (true) : (i += 1) { self.limbs[i] = @as(Limb, @truncate(w_value)); w_value >>= limb_bits; if (w_value == 0) break; } } }, .comptime_int => { comptime var w_value = @abs(value); if (w_value <= maxInt(Limb)) { self.limbs[0] = w_value; } else { const mask = (1 << limb_bits) - 1; comptime var i = 0; inline while (true) : (i += 1) { self.limbs[i] = w_value & mask; w_value >>= limb_bits; if (w_value == 0) break; } } }, else => @compileError("cannot set Mutable using type " ++ @typeName(T)), } }