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 › Const › writePackedTwosComplement Public Function writePackedTwosComplement Doc Source Public Function std.math.big.int.Const.writePackedTwosComplement
pub fn writePackedTwosComplement (x : Const , buffer : []u8 , bit_offset : usize , bit_count : usize , endian : Endian ) void Params x : Const buffer : []u8 bit_offset : usize bit_count : usize endian : Endian File math/big/int.zig: 2600
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632 pub fn writePackedTwosComplement (x : Const , buffer : []u8 , bit_offset : usize , bit_count : usize , endian : Endian ) void {
assert (x .fitsInTwosComp (if (x .positive ) .unsigned else .signed , bit_count ));
// Copy all complete limbs
var carry : u1 = 1 ;
var limb_index : usize = 0 ;
var bit_index : usize = 0 ;
while (limb_index < bit_count / @bitSizeOf (Limb )) : (limb_index += 1 ) {
var limb : Limb = if (limb_index < x .limbs .len ) x .limbs [limb_index ] else 0 ;
// 2's complement (bitwise not, then add carry bit)
if (!x .positive ) {
const ov = @addWithOverflow (~limb , carry );
limb = ov [0 ];
carry = ov [1 ];
}
// Write one Limb of bits
mem .writePackedInt (Limb , buffer , bit_index + bit_offset , limb , endian );
bit_index += @bitSizeOf (Limb );
}
// Copy the remaining bits
if (bit_count != bit_index ) {
var limb : Limb = if (limb_index < x .limbs .len ) x .limbs [limb_index ] else 0 ;
// 2's complement (bitwise not, then add carry bit)
if (!x .positive ) limb = ~limb +% carry ;
// Write all remaining bits
mem .writeVarPackedInt (buffer , bit_index + bit_offset , bit_count - bit_index , limb , endian );
}
}
Write the value of
xto a packed memorybuffer. Asserts thatbufferis large enough to contain a value of bit-sizebit_countat offsetbit_offset.This is equivalent to storing the value of an integer with
bit_countbits as if it were a field in packed memory at the provided bit offset.