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 › mem › joinMaybeZ Private Function joinMaybeZ Doc Source Private Function std.mem.joinMaybeZ
fn joinMaybeZ (allocator : Allocator , separator : []const u8 , slices : []const []const u8 , zero : bool ) Allocator .Error ![]u8 Params allocator : Allocator separator : []const u8 slices : []const []const u8 zero : bool File mem.zig: 3532
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558 fn joinMaybeZ (allocator : Allocator , separator : []const u8 , slices : []const []const u8 , zero : bool ) Allocator .Error ![]u8 {
if (slices .len == 0 ) return if (zero ) try allocator .dupe (u8 , &[1 ]u8 {0 }) else &[0 ]u8 {};
const total_len = blk : {
var sum : usize = separator .len * (slices .len - 1 );
for (slices ) |slice | sum += slice .len ;
if (zero ) sum += 1 ;
break :blk sum ;
};
const buf = try allocator .alloc (u8 , total_len );
errdefer allocator .free (buf );
@memcpy (buf [0 ..slices [0 ].len ], slices [0 ]);
var buf_index : usize = slices [0 ].len ;
for (slices [1 ..]) |slice | {
@memcpy (buf [buf_index .. buf_index + separator .len ], separator );
buf_index += separator .len ;
@memcpy (buf [buf_index .. buf_index + slice .len ], slice );
buf_index += slice .len ;
}
if (zero ) buf [buf .len - 1 ] = 0 ;
// No need for shrink since buf is exactly the correct size.
return buf ;
}