blob: da2a17899c84b9ce0f9fa23c9653479c037fa6ae [file] [log] [blame] [edit]
//===-- WinAdapter.cpp - Windows Adapter for other platforms ----*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef _WIN32
#include "dxc/Support/WinAdapter.h"
#include "dxc/Support/WinFunctions.h"
//===--------------------- UUID Related Macros ----------------------------===//
#ifdef __EMULATE_UUID
size_t UuidStrHash(const char* k) {
long h = 0;
while (*k) {
h = (h << 4) + *(k++);
long g = h & 0xF0000000L;
if (g != 0)
h ^= g >> 24;
h &= ~g;
}
return h;
}
#endif // __EMULATE_UUID
DEFINE_CROSS_PLATFORM_UUIDOF(IUnknown)
DEFINE_CROSS_PLATFORM_UUIDOF(INoMarshal)
DEFINE_CROSS_PLATFORM_UUIDOF(IStream)
DEFINE_CROSS_PLATFORM_UUIDOF(ISequentialStream)
//===--------------------------- IUnknown ---------------------------------===//
ULONG IUnknown::AddRef() {
++m_count;
return m_count;
}
ULONG IUnknown::Release() {
ULONG result = --m_count;
if (m_count == 0) {
delete this;
}
return result;
}
IUnknown::~IUnknown() {}
//===--------------------------- IMalloc ----------------------------------===//
void *IMalloc::Alloc(size_t size) { return malloc(size); }
void *IMalloc::Realloc(void *ptr, size_t size) { return realloc(ptr, size); }
void IMalloc::Free(void *ptr) { free(ptr); }
HRESULT IMalloc::QueryInterface(REFIID riid, void **ppvObject) {
assert(false && "QueryInterface not implemented for IMalloc.");
return E_NOINTERFACE;
}
//===--------------------------- CAllocator -------------------------------===//
void *CAllocator::Reallocate(void *p, size_t nBytes) throw() {
return realloc(p, nBytes);
}
void *CAllocator::Allocate(size_t nBytes) throw() { return malloc(nBytes); }
void CAllocator::Free(void *p) throw() { free(p); }
//===---------------------- Char converstion ------------------------------===//
const char *CPToLocale(uint32_t CodePage) {
#ifdef __APPLE__
static const char *utf8 = "en_US.UTF-8";
static const char *iso88591 = "en_US.ISO8859-1";
#else
static const char *utf8 = "en_US.utf8";
static const char *iso88591 = "en_US.iso88591";
#endif
if (CodePage == CP_UTF8) {
return utf8;
} else if (CodePage == CP_ACP) {
// Experimentation suggests that ACP is expected to be ISO-8859-1
return iso88591;
}
return nullptr;
}
//===--------------------------- CHandle -------------------------------===//
CHandle::CHandle(HANDLE h) { m_h = h; }
CHandle::~CHandle() { CloseHandle(m_h); }
CHandle::operator HANDLE() const throw() { return m_h; }
#endif