Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › math › big › int › Managed › mulWrap Public Function mulWrap Doc Source Public Function std.math.big.int.Managed.mulWrap
pub fn mulWrap (
rma : *Managed ,
a : *const Managed ,
b : *const Managed ,
signedness : Signedness ,
bit_count : usize ,
) !void Params File math/big/int.zig: 3287
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312 pub fn mulWrap (
rma : *Managed ,
a : *const Managed ,
b : *const Managed ,
signedness : Signedness ,
bit_count : usize ,
) !void {
var alias_count : usize = 0 ;
if (rma .limbs .ptr == a .limbs .ptr )
alias_count += 1 ;
if (rma .limbs .ptr == b .limbs .ptr )
alias_count += 1 ;
const needed = calcTwosCompLimbCount (bit_count );
const capacity_alias = limbsAliasDistinct (rma , a ) or limbsAliasDistinct (rma , b );
try rma .ensureAliasAwareCapacity (needed , capacity_alias );
var m = rma .toMutable ();
if (alias_count == 0 ) {
m .mulWrapNoAlias (a .toConst (), b .toConst (), signedness , bit_count , rma .allocator );
} else {
const limb_count = calcMulWrapLimbsBufferLen (bit_count , a .len (), b .len (), alias_count );
const limbs_buffer = try rma .allocator .alloc (Limb , limb_count );
defer rma .allocator .free (limbs_buffer );
m .mulWrap (a .toConst (), b .toConst (), signedness , bit_count , limbs_buffer , rma .allocator );
}
rma .setMetadata (m .positive , m .len );
}
rma = a * b with 2s-complement wrapping semantics.
rma, a and b may be aliases. However, it is more efficient if rma does not alias a or b.
Returns an error if memory could not be allocated.
rma's allocator is used for temporary storage to speed up the multiplication.