#ifndef V8_EXECUTION_THREAD_ID_H_
#define V8_EXECUTION_THREAD_ID_H_
#include "src/base/macros.h"
namespace v8 {
namespace internal {
class ThreadId {
public:
constexpr ThreadId() noexcept : ThreadId(kInvalidId) {}
bool operator==(const ThreadId& other) const { return id_ == other.id_; }
bool operator!=(const ThreadId& other) const { return id_ != other.id_; }
bool IsValid() const { return id_ != kInvalidId; }
constexpr int ToInteger() const { return id_; }
static ThreadId TryGetCurrent();
static ThreadId Current() { return ThreadId(GetCurrentThreadId()); }
static constexpr ThreadId Invalid() { return ThreadId(kInvalidId); }
static constexpr ThreadId FromInteger(int id) { return ThreadId(id); }
private:
static constexpr int kInvalidId = -1;
explicit constexpr ThreadId(int id) noexcept : id_(id) {}
V8_EXPORT_PRIVATE static int GetCurrentThreadId();
int id_;
};
}
}
#endif