//===-- ResourceVisitor.h ---------------------------------------*- C++-*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===---------------------------------------------------------------------===//
//
// This defines a base class visiting resource script resources.
//
//===---------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVMRC_RESOURCEVISITOR_H
#define LLVM_TOOLS_LLVMRC_RESOURCEVISITOR_H

#include "llvm/Support/Error.h"

namespace llvm {
namespace rc {

class RCResource;

class CaptionStmt;
class CharacteristicsStmt;
class FontStmt;
class LanguageResource;
class StyleStmt;
class VersionStmt;

class Visitor {
public:
  virtual Error visitNullResource(const RCResource *) = 0;
  virtual Error visitAcceleratorsResource(const RCResource *) = 0;
  virtual Error visitCursorResource(const RCResource *) = 0;
  virtual Error visitDialogResource(const RCResource *) = 0;
  virtual Error visitHTMLResource(const RCResource *) = 0;
  virtual Error visitIconResource(const RCResource *) = 0;
  virtual Error visitMenuResource(const RCResource *) = 0;
  virtual Error visitStringTableResource(const RCResource *) = 0;
  virtual Error visitUserDefinedResource(const RCResource *) = 0;
  virtual Error visitVersionInfoResource(const RCResource *) = 0;

  virtual Error visitCaptionStmt(const CaptionStmt *) = 0;
  virtual Error visitCharacteristicsStmt(const CharacteristicsStmt *) = 0;
  virtual Error visitFontStmt(const FontStmt *) = 0;
  virtual Error visitLanguageStmt(const LanguageResource *) = 0;
  virtual Error visitStyleStmt(const StyleStmt *) = 0;
  virtual Error visitVersionStmt(const VersionStmt *) = 0;

  virtual ~Visitor() {}
};

} // namespace rc
} // namespace llvm

#endif
