#+private
package main

import "core:sys/darwin"

CTL_HW :: 6
HW_AVAILCPU :: 25
HW_NCPU :: 3
get_hardware_concurrency :: proc() -> int {
	mib: [4]i32
	num_cpu: i32
	num_cpu_len: uint = size_of(num_cpu)

	mib[0] = CTL_HW
	mib[1] = HW_AVAILCPU
	darwin.syscall_sysctl(&mib[0], 2, &num_cpu, &num_cpu_len, nil, 0)
	if num_cpu < 1 {
		mib[1] = HW_NCPU
		darwin.syscall_sysctl(&mib[0], 2, &num_cpu, &num_cpu_len, nil, 0)
	}
	return int(num_cpu if num_cpu > 0 else 1)
}