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

#include <mcld/Script/ScriptCommand.h>
#include <string>
#include <vector>

namespace mcld
{

class Module;

/** \class OutputFormatCmd
 *  \brief This class defines the interfaces to OutputFormat command.
 */

class OutputFormatCmd : public ScriptCommand
{
public:
  typedef std::vector<std::string> FormatList;
  typedef FormatList::const_iterator const_iterator;
  typedef FormatList::iterator iterator;

public:
  OutputFormatCmd(const std::string& pFormat);
  OutputFormatCmd(const std::string& pDefault,
                  const std::string& pBig,
                  const std::string& pLittle);
  ~OutputFormatCmd();

  const_iterator begin() const { return m_FormatList.begin(); }
  iterator       begin()       { return m_FormatList.begin(); }
  const_iterator end()   const { return m_FormatList.end(); }
  iterator       end()         { return m_FormatList.end(); }

  void dump() const;

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

  void activate(Module& pModule);

private:
  FormatList m_FormatList;
};

} // namespace of mcld

#endif