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

#include <llvm/Support/DataTypes.h>

#include <mcld/LD/Fragment.h>

namespace mcld
{

class SectionData;

class FillFragment : public Fragment
{
public:
  FillFragment(int64_t pValue, unsigned int pValueSize, uint64_t pSize,
               SectionData* pSD = NULL);

  int64_t getValue() const { return m_Value; }

  unsigned getValueSize() const { return m_ValueSize; }

  uint64_t getSize() const { return m_Size; }

  static bool classof(const Fragment *F)
  { return F->getKind() == Fragment::Fillment; }

  static bool classof(const FillFragment *) { return true; }

private:
  /// m_Value - Value used for filling bytes
  int64_t m_Value;

  /// m_ValueSize - The size (in bytes) of \arg Value to use when filling, or 0
  /// if this is a virtual fill fragment.
  unsigned int m_ValueSize;

  /// m_Size - The number of bytes to insert.
  uint64_t m_Size;
};

} // namespace of mcld

#endif

