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 library itself.
Zig › std/ › mem.zig › joinMaybeZ
joinMaybeZ
mem.joinMaybeZ
fn joinMaybeZ (allocator : Allocator , separator : []const u8 , slices : []const []const u8 , zero : bool ) Allocator .Error ![]u8
File
Code
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 ;
return buf ;
}