OptSpecifier.h revision a39058aaed4540fc37681cad728b99546595b2e8
196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===--- OptSpecifier.h - Option Specifiers ---------------------*- C++ -*-===//
296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//
396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//                     The LLVM Compiler Infrastructure
496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//
596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// This file is distributed under the University of Illinois Open Source
696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// License. See LICENSE.TXT for details.
796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//
896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===----------------------------------------------------------------------===//
996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
10674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_OPTION_OPTSPECIFIER_H
11674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_OPTION_OPTSPECIFIER_H
1296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
1396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencernamespace llvm {
1496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencernamespace opt {
1596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  class Option;
1696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
1796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  /// OptSpecifier - Wrapper class for abstracting references to option IDs.
1896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  class OptSpecifier {
1996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    unsigned ID;
2096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
2196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  private:
22a39058aaed4540fc37681cad728b99546595b2e8David Blaikie    explicit OptSpecifier(bool) LLVM_DELETED_FUNCTION;
2396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
2496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  public:
2596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    OptSpecifier() : ID(0) {}
2696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    /*implicit*/ OptSpecifier(unsigned _ID) : ID(_ID) {}
2796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    /*implicit*/ OptSpecifier(const Option *Opt);
2896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
2996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool isValid() const { return ID != 0; }
3096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    unsigned getID() const { return ID; }
3296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool operator==(OptSpecifier Opt) const { return ID == Opt.getID(); }
3496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool operator!=(OptSpecifier Opt) const { return !(*this == Opt); }
3596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  };
3696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}
3796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}
3896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#endif
40