//===- OpClass.h - Implementation of an Op Class --------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef MLIR_TOOLS_MLIRTBLGEN_OPCLASS_H_
#define MLIR_TOOLS_MLIRTBLGEN_OPCLASS_H_

#include "mlir/TableGen/Class.h"

namespace mlir {
namespace tblgen {

/// Class for holding an op for C++ code emission. The class is specialized to
/// add Op-specific declarations to the class.
class OpClass : public Class {
public:
  /// Create an operation class with extra class declarations, whose default
  /// visibility is public. Also declares at the top of the class:
  ///
  /// - inheritance of constructors from `Op`
  /// - inheritance of `print`
  /// - a type alias for the associated adaptor class
  ///
  OpClass(StringRef name, StringRef extraClassDeclaration);

  /// Add an op trait.
  void addTrait(Twine trait) { parent.addTemplateParam(trait.str()); }

  /// The operation class is finalized by calling `Class::finalize` to delcare
  /// all pending private and public methods (ops don't have custom constructors
  /// or fields). Then, the extra class declarations are appended to the end of
  /// the class declaration.
  void finalize() override;

private:
  /// Hand-written extra class declarations.
  StringRef extraClassDeclaration;
  /// The parent class, which also contains the traits to be inherited.
  ParentClass &parent;
};

} // end namespace tblgen
} // end namespace mlir

#endif // MLIR_TOOLS_MLIRTBLGEN_OPCLASS_H_
