RyanHub - file viewer
filename: include/platform.h
branch: main
back to repo
// platform.h

#pragma once

#ifdef _WIN32
#define _WIN32_WINNT 0x0601
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#pragma comment(lib, "Ws2_32.lib")

typedef HANDLE thread_t;
typedef CRITICAL_SECTION mutex_t;

#define THREAD_FUNC_RETURN DWORD WINAPI
#define THREAD_CREATE(tid, func, arg) (*(tid) = CreateThread(NULL, 0, func, arg, 0, NULL))
#define THREAD_DETACH(tid) CloseHandle(*(tid))
#define THREAD_FUNC_RETURN_VALUE 0

#define MUTEX_INIT(m) InitializeCriticalSection(m)
#define MUTEX_LOCK(m) EnterCriticalSection(m)
#define MUTEX_UNLOCK(m) LeaveCriticalSection(m)
#define MUTEX_DESTROY(m) DeleteCriticalSection(m)

#define SOCKET_TYPE SOCKET
#define CLOSESOCKET closesocket
#define INVALID_SOCKET_VAL INVALID_SOCKET

static inline int platform_socket_init() {
    WSADATA wsa;
    return WSAStartup(MAKEWORD(2, 2), &wsa);
}
#define PLATFORM_SOCKET_INIT() platform_socket_init()

#define PLATFORM_SOCKET_CLEANUP() WSACleanup()

#define platform_sleep_ms(ms) Sleep(ms)
#define platform_clear_console() system("cls")


#else
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

typedef pthread_t thread_t;
typedef pthread_mutex_t mutex_t;

#define THREAD_FUNC_RETURN void*
#define THREAD_CREATE(tid, func, arg) pthread_create((tid), NULL, func, arg)
#define THREAD_DETACH(tid) pthread_detach(*(tid))
#define THREAD_FUNC_RETURN_VALUE NULL

#define MUTEX_INIT(m) pthread_mutex_init(m, NULL)
#define MUTEX_LOCK(m) pthread_mutex_lock(m)
#define MUTEX_UNLOCK(m) pthread_mutex_unlock(m)
#define MUTEX_DESTROY(m) pthread_mutex_destroy(m)

#define SOCKET_TYPE int
#define CLOSESOCKET close
#define INVALID_SOCKET_VAL -1

#define PLATFORM_SOCKET_INIT()
#define PLATFORM_SOCKET_CLEANUP()

#define platform_sleep_ms(ms) usleep((ms) * 1000)
#define platform_clear_console() system("clear")

#endif