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 › llsubcarry Private Function llsubcarry Doc Source Private Function std.math.big.int.llsubcarry
fn llsubcarry (r : []Limb , a : []const Limb , b : []const Limb ) Limb Params File math/big/int.zig: 3977
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002 fn llsubcarry (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 borrow : Limb = 0 ;
while (i < b .len ) : (i += 1 ) {
const ov1 = @subWithOverflow (a [i ], b [i ]);
r [i ] = ov1 [0 ];
const ov2 = @subWithOverflow (r [i ], borrow );
r [i ] = ov2 [0 ];
borrow = @as (Limb , ov1 [1 ]) + ov2 [1 ];
}
while (i < a .len ) : (i += 1 ) {
const ov = @subWithOverflow (a [i ], borrow );
r [i ] = ov [0 ];
borrow = ov [1 ];
}
return borrow ;
}
Knuth 4.3.1, Algorithm S.