//===--- OpenCLOptions.h ----------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief Defines the clang::OpenCLOptions class.
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_BASIC_OPENCLOPTIONS_H
#define LLVM_CLANG_BASIC_OPENCLOPTIONS_H

namespace clang {

/// \brief OpenCL supported extensions and optional core features
class OpenCLOptions {
public:
#define OPENCLEXT(nm) unsigned nm : 1;
#include "clang/Basic/OpenCLExtensions.def"

  OpenCLOptions() {
#define OPENCLEXT(nm)   nm = 0;
#include "clang/Basic/OpenCLExtensions.def"
  }

  // Enable all options.
  void setAll() {
#define OPENCLEXT(nm)   nm = 1;
#include "clang/Basic/OpenCLExtensions.def"
  }

  // Is supported with OpenCL version \p OCLVer.
#define OPENCLEXT_INTERNAL(Ext, Avail, ...) \
  bool is_##Ext##_supported(unsigned OCLVer) const { \
    return Ext && OCLVer >= Avail; \
  }
#include "clang/Basic/OpenCLExtensions.def"


  // Is supported OpenCL extension with OpenCL version \p OCLVer.
  // For supported optional core feature, return false.
#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
  bool is_##Ext##_supported_extension(unsigned CLVer) const { \
    return is_##Ext##_supported(CLVer) && (Core == ~0U || CLVer < Core); \
  }
#include "clang/Basic/OpenCLExtensions.def"

  // Is supported OpenCL core features with OpenCL version \p OCLVer.
  // For supported extension, return false.
#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
  bool is_##Ext##_supported_core(unsigned CLVer) const { \
    return is_##Ext##_supported(CLVer) && Core != ~0U && CLVer >= Core; \
  }
#include "clang/Basic/OpenCLExtensions.def"

};

}  // end namespace clang

#endif
