1//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// tls.h: Simple cross-platform interface for thread local storage.
8
9#ifndef COMMON_TLS_H_
10#define COMMON_TLS_H_
11
12#include "common/platform.h"
13
14#ifdef ANGLE_PLATFORM_WINDOWS
15    typedef DWORD TLSIndex;
16#   define TLS_INVALID_INDEX (TLS_OUT_OF_INDEXES)
17#elif defined(ANGLE_PLATFORM_POSIX)
18#   include <pthread.h>
19#   include <semaphore.h>
20#   include <errno.h>
21    typedef pthread_key_t TLSIndex;
22#   define TLS_INVALID_INDEX (static_cast<TLSIndex>(-1))
23#else
24#   error Unsupported platform.
25#endif
26
27TLSIndex CreateTLSIndex();
28bool DestroyTLSIndex(TLSIndex index);
29
30bool SetTLSValue(TLSIndex index, void *value);
31void *GetTLSValue(TLSIndex index);
32
33#endif // COMMON_TLS_H_
34