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

// WARNING: *DO NOT* use this class directly. base::PlatformThreadRef is a
// low-level platform-specific abstraction to the OS's threading interface.
// Instead, consider using a message-loop driven base::Thread, see
// base/threading/thread.h.

#ifndef BASE_THREADING_PLATFORM_THREAD_REF_H_
#define BASE_THREADING_PLATFORM_THREAD_REF_H_

#include <iosfwd>

#include "base/base_export.h"
#include "build/build_config.h"

#if defined(STARBOARD)
#include <pthread.h>
#include "starboard/thread.h"
#elif BUILDFLAG(IS_WIN)
#include "base/win/windows_types.h"
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
#include <pthread.h>
#endif

namespace base {

// Used for thread checking and debugging.
// Meant to be as fast as possible.
// These are produced by PlatformThread::CurrentRef(), and used to later
// check if we are on the same thread or not by using ==. These are safe
// to copy between threads, but can't be copied to another process as they
// have no meaning there. Also, the internal identifier can be re-used
// after a thread dies, so a PlatformThreadRef cannot be reliably used
// to distinguish a new thread from an old, dead thread.
class PlatformThreadRef {
 public:
#if defined(STARBOARD)
#if SB_API_VERSION < 16
  typedef SbThread RefType;
#else
  using RefType = pthread_t;
#endif
#elif BUILDFLAG(IS_WIN)
  using RefType = DWORD;
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
  using RefType = pthread_t;
#endif

  constexpr PlatformThreadRef() = default;
  explicit constexpr PlatformThreadRef(RefType id) : id_(id) {}

  bool operator==(PlatformThreadRef other) const { return id_ == other.id_; }
  bool operator!=(PlatformThreadRef other) const { return id_ != other.id_; }

  bool is_null() const { return id_ == 0; }

 private:
  friend BASE_EXPORT std::ostream& operator<<(std::ostream& os,
                                              const PlatformThreadRef& ref);

  RefType id_ = 0;
};

BASE_EXPORT std::ostream& operator<<(std::ostream& os,
                                     const PlatformThreadRef& ref);

}  // namespace base

#endif  // BASE_THREADING_PLATFORM_THREAD_REF_H_
