DoxigAlpha

setString

Set self from the string representation value.

value must contain only digits <= base and is case insensitive. Base prefixes are not allowed (e.g. 0x43 should simply be 43). Underscores in the input string are ignored and can be used as digit separators.

Returns an error if memory could not be allocated or value has invalid digits for the requested base.

self's allocator is used for temporary storage to boost multiplication performance.

Function parameters

Parameters

#
self:*Managed
base:u8
value:[]const u8

Used to indicate either limit of a 2s-complement integer.

Types

#
TwosCompIntLimit
Used to indicate either limit of a 2s-complement integer.
Mutable
A arbitrary-precision big integer, with a fixed set of mutable limbs.
Const
A arbitrary-precision big integer, with a fixed set of immutable limbs.
Managed
An arbitrary-precision big integer along with an allocator which manages the memory.

Returns the number of limbs needed to store `scalar`, which must be a

Functions

#
calcLimbLen
Returns the number of limbs needed to store `scalar`, which must be a
calcSetStringLimbCount
Assumes `string_len` doesn't account for minus signs if the number is negative.
calcNonZeroTwosCompLimbCount
Compute the number of limbs required to store a 2s-complement number of `bit_count` bits.
calcTwosCompLimbCount
Compute the number of limbs required to store a 2s-complement number of `bit_count` bits.
addMulLimbWithCarry
a + b * c + *carry, sets carry to the overflow bits
llcmp
Returns -1, 0, 1 if |a| < |b|, |a| == |b| or |a| > |b| respectively for limbs.

Source

Implementation

#
pub fn setString(self: *Managed, base: u8, value: []const u8) !void {
    if (base < 2 or base > 36) return error.InvalidBase;
    try self.ensureCapacity(calcSetStringLimbCount(base, value.len));
    const limbs_buffer = try self.allocator.alloc(Limb, calcSetStringLimbsBufferLen(base, value.len));
    defer self.allocator.free(limbs_buffer);
    var m = self.toMutable();
    try m.setString(base, value, limbs_buffer, self.allocator);
    self.setMetadata(m.positive, m.len);
}