michael@0: // michael@0: // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: #ifndef __OSINCLUDE_H michael@0: #define __OSINCLUDE_H michael@0: michael@0: // michael@0: // This file contains contains os-specific datatypes and michael@0: // declares any os-specific functions. michael@0: // michael@0: michael@0: #if defined(_WIN32) || defined(_WIN64) michael@0: #define ANGLE_OS_WIN michael@0: #elif defined(__APPLE__) || defined(__linux__) || \ michael@0: defined(__FreeBSD__) || defined(__OpenBSD__) || \ michael@0: defined(__sun) || defined(ANDROID) || \ michael@0: defined(__GLIBC__) || defined(__GNU__) || \ michael@0: defined(__QNX__) michael@0: #define ANGLE_OS_POSIX michael@0: #else michael@0: #error Unsupported platform. michael@0: #endif michael@0: michael@0: #if defined(ANGLE_OS_WIN) michael@0: #define STRICT michael@0: #define VC_EXTRALEAN 1 michael@0: #include michael@0: #elif defined(ANGLE_OS_POSIX) michael@0: #include michael@0: #include michael@0: #include michael@0: #endif // ANGLE_OS_WIN michael@0: michael@0: michael@0: #include "compiler/compiler_debug.h" michael@0: michael@0: // michael@0: // Thread Local Storage Operations michael@0: // michael@0: #if defined(ANGLE_OS_WIN) michael@0: typedef DWORD OS_TLSIndex; michael@0: #define OS_INVALID_TLS_INDEX (TLS_OUT_OF_INDEXES) michael@0: #elif defined(ANGLE_OS_POSIX) michael@0: typedef pthread_key_t OS_TLSIndex; michael@0: #define OS_INVALID_TLS_INDEX (static_cast(-1)) michael@0: #endif // ANGLE_OS_WIN michael@0: michael@0: OS_TLSIndex OS_AllocTLSIndex(); michael@0: bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue); michael@0: bool OS_FreeTLSIndex(OS_TLSIndex nIndex); michael@0: michael@0: inline void* OS_GetTLSValue(OS_TLSIndex nIndex) michael@0: { michael@0: ASSERT(nIndex != OS_INVALID_TLS_INDEX); michael@0: #if defined(ANGLE_OS_WIN) michael@0: return TlsGetValue(nIndex); michael@0: #elif defined(ANGLE_OS_POSIX) michael@0: return pthread_getspecific(nIndex); michael@0: #endif // ANGLE_OS_WIN michael@0: } michael@0: michael@0: #endif // __OSINCLUDE_H