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
13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/Compiler.h"
14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
1596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencernamespace llvm {
1696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencernamespace opt {
1796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  class Option;
1896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
1996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  /// OptSpecifier - Wrapper class for abstracting references to option IDs.
2096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  class OptSpecifier {
2196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    unsigned ID;
2296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
2396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  private:
24a39058aaed4540fc37681cad728b99546595b2e8David Blaikie    explicit OptSpecifier(bool) LLVM_DELETED_FUNCTION;
2596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
2696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  public:
2796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    OptSpecifier() : ID(0) {}
2896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    /*implicit*/ OptSpecifier(unsigned _ID) : ID(_ID) {}
2996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    /*implicit*/ OptSpecifier(const Option *Opt);
3096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool isValid() const { return ID != 0; }
3296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    unsigned getID() const { return ID; }
3496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
3596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool operator==(OptSpecifier Opt) const { return ID == Opt.getID(); }
3696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer    bool operator!=(OptSpecifier Opt) const { return !(*this == Opt); }
3796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer  };
3896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}
3996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}
4096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer
4196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#endif
42