//===- PositionDependentOption.h ------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_POSITIONDEPENDENTOPTION_H
#define MCLD_POSITIONDEPENDENTOPTION_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif

#include <vector>

namespace mcld
{

  /** \class PositionDependentOption
   *  \brief PositionDependentOptions converts LLVM options into MCLDInfo
   */
  class PositionDependentOption
  {
  public:
    enum Type {
      BITCODE,
      NAMESPEC,
      INPUT_FILE,
      START_GROUP,
      END_GROUP,
      WHOLE_ARCHIVE,
      NO_WHOLE_ARCHIVE,
      AS_NEEDED,
      NO_AS_NEEDED,
      ADD_NEEDED,
      NO_ADD_NEEDED,
      BDYNAMIC,
      BSTATIC
    };

  protected:
    PositionDependentOption(unsigned int pPosition, Type pType)
      : m_Type(pType),
        m_Position(pPosition) {}

  public:
    Type type()
    { return m_Type; }

    Type type() const
    { return m_Type; }

    unsigned int position()
    { return m_Position; }

    unsigned int position() const
    { return m_Position; }

  private:
    Type m_Type;
    unsigned int m_Position;
  };

  typedef std::vector<PositionDependentOption*> PositionDependentOptions;
} // namespace of mcld

#endif