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