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