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

#ifndef MCLD_LD_STUB_FACTORY_H
#define MCLD_LD_STUB_FACTORY_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif

#include <llvm/Support/DataTypes.h>
#include <vector>

namespace mcld
{

class Stub;
class Relocation;
class RelocationFactory;
class BranchIslandFactory;
class FragmentLinker;

/** \class StubFactory
 *  \brief the clone factory of Stub
 *
 */
class StubFactory
{
public:
  StubFactory();

  ~StubFactory();

  /// addPrototype - register a stub prototype
  void addPrototype(Stub* pPrototype);

  /// create - create a stub if needed, otherwise return NULL
  Stub* create(Relocation& pReloc,
               uint64_t pTargetSymValue,
               FragmentLinker& pLinker,
               RelocationFactory& pRelocFactory,
               BranchIslandFactory& pBRIslandFactory);

private:
  /// findPrototype - find if there is a registered stub prototype for the given
  ///                 relocation
  Stub* findPrototype(const Relocation& pReloc,
                      const uint64_t pSource,
                      uint64_t pTargetSymValue);

private:
 typedef std::vector<Stub*> StubPoolType;

private:
  StubPoolType m_StubPool; // stub pool
};

} // namespace of mcld

#endif
