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 › lladdcarry Private Function lladdcarry Doc Source Private Function std.math.big.int.lladdcarry
fn lladdcarry (r : []Limb , a : []const Limb , b : []const Limb ) Limb Params File math/big/int.zig: 4010
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035 fn lladdcarry (r : []Limb , a : []const Limb , b : []const Limb ) Limb {
assert (a .len != 0 and b .len != 0 );
assert (a .len >= b .len );
assert (r .len >= a .len );
assert (!slicesOverlap (r , a ) or @intFromPtr (r .ptr ) <= @intFromPtr (a .ptr ));
assert (!slicesOverlap (r , b ) or @intFromPtr (r .ptr ) <= @intFromPtr (b .ptr ));
var i : usize = 0 ;
var carry : Limb = 0 ;
while (i < b .len ) : (i += 1 ) {
const ov1 = @addWithOverflow (a [i ], b [i ]);
r [i ] = ov1 [0 ];
const ov2 = @addWithOverflow (r [i ], carry );
r [i ] = ov2 [0 ];
carry = @as (Limb , ov1 [1 ]) + ov2 [1 ];
}
while (i < a .len ) : (i += 1 ) {
const ov = @addWithOverflow (a [i ], carry );
r [i ] = ov [0 ];
carry = ov [1 ];
}
return carry ;
}
Knuth 4.3.1, Algorithm A.