diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig index 28e95d0414..352c12c695 100644 --- a/lib/std/c/freebsd.zig +++ b/lib/std/c/freebsd.zig @@ -9,6 +9,20 @@ pub const CPU_SETSIZE = 256; pub const cpuset_t = extern struct { __bits: [(CPU_SETSIZE + (@bitSizeOf(c_long) - 1)) / @bitSizeOf(c_long)]c_long, }; + +// TODO: can eventually serve for the domainset_t's type too. +fn __BIT_COUNT(bits: []const c_long) c_long { + var count: c_long = 0; + for (bits) |b| { + count += @popCount(b); + } + return count; +} + +pub fn CPU_COUNT(set: cpuset_t) c_int { + return @intCast(c_int, __BIT_COUNT(set.__bits[0..])); +} + pub const cpulevel_t = c_int; pub const cpuwhich_t = c_int; pub const id_t = i64;