164 lines
2.7 KiB
C
164 lines
2.7 KiB
C
|
|
// ::Platform::Windows::Memory::Start::
|
|
|
|
rawptr
|
|
pMemAlloc(usize size)
|
|
{
|
|
return (rawptr)VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
|
|
}
|
|
|
|
rawptr
|
|
pMemAllocZeroed(usize size)
|
|
{
|
|
rawptr mem = pMemAlloc(size);
|
|
MemZero(mem, size);
|
|
return mem;
|
|
}
|
|
|
|
void
|
|
pMemFree(rawptr ptr, usize size)
|
|
{
|
|
Assert(VirtualFree(ptr, size, MEM_RELEASE), "pMemFree failure");
|
|
}
|
|
|
|
// ::Platform::Windows::Memory::End::
|
|
|
|
|
|
|
|
// ::Platform::Windows::Print::Start::
|
|
|
|
i32
|
|
pWriteStdOut(rawptr buf, i32 len)
|
|
{
|
|
return WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), buf, len, NULL, NULL);
|
|
}
|
|
|
|
i32
|
|
pWriteStdErr(rawptr buf, i32 len)
|
|
{
|
|
return WriteConsole(GetStdHandle(STD_ERROR_HANDLE), buf, len, NULL, NULL);
|
|
}
|
|
|
|
// ::Platform::Windows::Print::End::
|
|
|
|
|
|
|
|
// ::Platform::Functions::Directory::Start::
|
|
|
|
b32
|
|
pDirNavigate(c8 *dir)
|
|
{
|
|
return !(b32)SetCurrentDirectory(dir);
|
|
}
|
|
|
|
// ::Platform::Functions::Directory::End::
|
|
|
|
|
|
|
|
// ::Platform::Windows::Profiling::Functions::Start::
|
|
|
|
static inline u64
|
|
pCPUTimerRead()
|
|
{
|
|
return __rdtsc();
|
|
}
|
|
|
|
// ::Platform::Windows::Profiling::Functions::End::
|
|
|
|
|
|
|
|
// ::Platform::Windows::Async::Start::
|
|
|
|
static pThread
|
|
pThreadInit(rawptr proc, rawptr param)
|
|
{
|
|
pThread thread = {0};
|
|
CreateThread(NULL, 0, proc, param, 0, NULL);
|
|
|
|
return thread;
|
|
}
|
|
|
|
static void
|
|
pThreadSuspend(pThread *thread)
|
|
{
|
|
SuspendThread(thread->handle);
|
|
}
|
|
|
|
static void
|
|
pThreadWake(pThread *thread)
|
|
{
|
|
ResumeThread(thread->handle);
|
|
}
|
|
|
|
static void
|
|
pThreadKill()
|
|
{
|
|
ExitThread(0);
|
|
}
|
|
|
|
// ::Platform::Windows::Async::End::
|
|
|
|
|
|
|
|
// ::Platform::Windows::Atomics::Start::
|
|
|
|
|
|
static inline void
|
|
pAtomicSignalFenceSeqCst()
|
|
{
|
|
_ReadWriteBarrier();
|
|
}
|
|
|
|
static inline u32
|
|
pAtomicFetchSubU32(u32 volatile *ptr, u32 count)
|
|
{
|
|
LONG decrement = (LONG)count;
|
|
return (u32)InterlockedAddAcquire((LONG volatile *)ptr, -decrement) + decrement;
|
|
}
|
|
|
|
static inline u32
|
|
pAtomicFetchIncrU32(u32 volatile *ptr)
|
|
{
|
|
return (u32)InterlockedIncrementAcquire((LONG volatile *)ptr) - 1;
|
|
}
|
|
|
|
static inline void
|
|
pAtomicIncrU32(u32 volatile *ptr)
|
|
{
|
|
InterlockedIncrementRelease((LONG volatile *)ptr);
|
|
}
|
|
|
|
static inline u32
|
|
pAtomicLoadU32(u32 volatile *ptr)
|
|
{
|
|
return (u32)InterlockedOrAcquire((LONG volatile *)ptr, 0);
|
|
}
|
|
|
|
static inline void
|
|
pAtomicStoreB32(b32 volatile *ptr, b32 value)
|
|
{
|
|
_InterlockedExchange_HLERelease((LONG volatile *)ptr, (LONG)value);
|
|
}
|
|
|
|
static inline b32
|
|
pAtomicCompareExchangeB32(b32 volatile *ptr, b32 *expect, b32 desired)
|
|
{
|
|
return (b32)InterlockedCompareExchangeAcquire((LONG volatile *)ptr, (LONG)desired, (LONG)*expect);
|
|
}
|
|
|
|
// ::Platform::Windows::Atomics::End::
|
|
|
|
|
|
|
|
// ::Platform::Windows::Files::Start::
|
|
|
|
static b8
|
|
pDirIsVisible(c8 *dir_name)
|
|
{
|
|
WIN32_FIND_DATA find_data;
|
|
HANDLE handle;
|
|
return (handle = FindFirstFile(dir_name, &find_data)) != INVALID_HANDLE_VALUE;
|
|
}
|
|
|
|
// ::Platform::Windows::Files::End::
|