#define _GNU_SOURCE
#include "scheduler_iface.hpp"

#include <pthread.h>
#include <sched.h>
#include <unistd.h>

void set_thread_affinity(int core_id)
{
    if (core_id < 0)
        return;

    long nproc = sysconf(_SC_NPROCESSORS_ONLN);
    if (nproc <= 0)
        return;

    int target = static_cast<int>(static_cast<long>(core_id) % nproc);

    cpu_set_t cpuset;
    CPU_ZERO(&cpuset);
    CPU_SET(target, &cpuset);

    (void)pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
}
