//===- InputCmd.h ---------------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_SCRIPT_INPUTCMD_H_
#define MCLD_SCRIPT_INPUTCMD_H_

#include "mcld/Script/ScriptCommand.h"

namespace mcld {

class ArchiveReader;
class DynObjReader;
class InputBuilder;
class InputTree;
class LinkerConfig;
class ObjectReader;
class StringList;

/** \class InputCmd
 *  \brief This class defines the interfaces to Input command.
 */

class InputCmd : public ScriptCommand {
 public:
  InputCmd(StringList& pStringList,
           InputTree& pInputTree,
           InputBuilder& pBuilder,
           ObjectReader& pObjectReader,
           ArchiveReader& pArchiveReader,
           DynObjReader& pDynObjReader,
           const LinkerConfig& pConfig);
  ~InputCmd();

  void dump() const;

  static bool classof(const ScriptCommand* pCmd) {
    return pCmd->getKind() == ScriptCommand::INPUT;
  }

  void activate(Module& pModule);

 private:
  StringList& m_StringList;
  InputTree& m_InputTree;
  InputBuilder& m_Builder;
  ObjectReader& m_ObjectReader;
  ArchiveReader& m_ArchiveReader;
  DynObjReader& m_DynObjReader;
  const LinkerConfig& m_Config;
};

}  // namespace mcld

#endif  // MCLD_SCRIPT_INPUTCMD_H_