public static void CPU_CLR_S(int cpu, size_t cpusetsize, cpu_set_t *set) { if (cpu / 8 < (int)cpusetsize) { ((size_t *)set)[cpu / 8 / SizeOf.size_t] &= ~((size_t)1 << (cpu % (8 * SizeOf.size_t))); } }
public static bool CPU_ISSET_S(int cpu, size_t cpusetsize, cpu_set_t *set) { if (cpu / 8 < (int)cpusetsize) { size_t value = ((size_t *)set)[cpu / 8 / SizeOf.size_t] & ((size_t)1 << (cpu % (8 * SizeOf.size_t))); return(value != 0); } return(false); }
public static void CPU_ZERO_S(size_t size, cpu_set_t *set) { size_t *s = (size_t *)set; for (size_t i = 0; i < size / SizeOf.size_t; i++) { s[i] = 0; } }
public static void CPU_XOR_S(size_t setsize, cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2) { size_t *dst = (size_t *)destset; size_t *src1 = (size_t *)srcset1; size_t *src2 = (size_t *)srcset2; for (size_t i = 0; i < setsize / SizeOf.size_t; i++) { dst[i] = src1[i] ^ src2[i]; } }
public static bool CPU_EQUAL_S(size_t size, cpu_set_t *set1, cpu_set_t *set2) { size_t *s1 = (size_t *)set1; size_t *s2 = (size_t *)set2; for (int i = 0; i < size / SizeOf.size_t; i++) { if (s1[i] != s2[i]) { return(false); } } return(true); }
public static int CPU_COUNT_S(size_t size, cpu_set_t *set) { size_t *s = (size_t *)set; size_t count = 0; for (size_t i = 0; i < size / SizeOf.ssize_t; i++) { size_t n = s[i]; while (n != 0) { count += n & 1; n >>= 1; } } return((int)count); }
internal static unsafe bool CPU_ISSET(int cpu, cpu_set_t *set) { return((set->bits[CPUELT(cpu)] & CPUMASK(cpu)) != 0); }
internal static unsafe void CPU_SET(int cpu, cpu_set_t *set) { set->bits[CPUELT(cpu)] |= CPUMASK(cpu); }
internal static extern unsafe int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
public static extern int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
public static bool CPU_EQUAL(cpu_set_t *s1, cpu_set_t *s2) => CPU_EQUAL_S(SizeOf.cpu_set_t, s1, s2);
public static void CPU_ZERO(cpu_set_t *set) => CPU_ZERO_S(SizeOf.cpu_set_t, set);
public static int CPU_COUNT(cpu_set_t *set) => CPU_COUNT_S(SizeOf.cpu_set_t, set);
public static void CPU_XOR(cpu_set_t *d, cpu_set_t *s1, cpu_set_t *s2) => CPU_XOR_S(SizeOf.cpu_set_t, d, s1, s2);
public static bool CPU_ISSET(int cpu, cpu_set_t *set) => CPU_ISSET_S(cpu, SizeOf.cpu_set_t, set);
public static void CPU_CLR(int cpu, cpu_set_t *set) => CPU_CLR_S(cpu, SizeOf.cpu_set_t, set);