// Copyright 2010 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Functions for allocating and accessing thread local values via key.

#ifndef GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_
#define GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_

#if defined(_WIN32)
#include <windows.h>
#else
#include <pthread.h>
#endif

namespace gpu {

#if defined(_WIN32)
typedef DWORD ThreadLocalKey;
#else
typedef pthread_key_t ThreadLocalKey;
#endif

inline ThreadLocalKey ThreadLocalAlloc() {
#if defined(_WIN32)
  return TlsAlloc();
#else
  ThreadLocalKey key;
  pthread_key_create(&key, nullptr);
  return key;
#endif
}

inline void ThreadLocalFree(ThreadLocalKey key) {
#if defined(_WIN32)
  TlsFree(key);
#else
  pthread_key_delete(key);
#endif
}

inline void ThreadLocalSetValue(ThreadLocalKey key, void* value) {
#if defined(_WIN32)
  TlsSetValue(key, value);
#else
  pthread_setspecific(key, value);
#endif
}

inline void* ThreadLocalGetValue(ThreadLocalKey key) {
#if defined(_WIN32)
  return TlsGetValue(key);
#else
  return pthread_getspecific(key);
#endif
}
}  // namespace gpu

#endif  // GPU_COMMAND_BUFFER_COMMON_THREAD_LOCAL_H_
