1f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// found in the LICENSE file.
4f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
5f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// NeedsTracing is a three-point value ordered by unneeded < unknown < needed.
6f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch// Unneeded means that the point definitively does not need to be traced.
7f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
8f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#ifndef TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
9f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#define TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
10f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
11f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochclass NeedsTracing {
12f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch public:
13f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  static NeedsTracing Unneeded() { return kUnneeded; }
14f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  static NeedsTracing Unknown() { return kUnknown; }
15f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  static NeedsTracing Needed() { return kNeeded; }
16f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  bool IsUnneeded() { return value_ == kUnneeded; }
17f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  bool IsUnknown() { return value_ == kUnknown; }
18f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  bool IsNeeded() { return value_ == kNeeded; }
19f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  NeedsTracing LUB(const NeedsTracing& other) {
20f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    return value_ > other.value_ ? value_ : other.value_;
21f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  }
22f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  bool operator==(const NeedsTracing& other) {
23f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    return value_ == other.value_;
24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  }
25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch private:
26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  enum Value { kUnneeded, kUnknown, kNeeded };
27f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  NeedsTracing(Value value) : value_(value) {}
28f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  Value value_;
29f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch};
30f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
31f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#endif // TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
32