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

#include "mcld/Support/Compiler.h"

#include <llvm/ADT/ilist_node.h>
#include <llvm/Support/DataTypes.h>

#include <cassert>
#include <cstddef>

namespace mcld {

class SectionData;

/** \class Fragment
 *  \brief Fragment is the minimun linking unit of MCLinker.
 */
class Fragment : public llvm::ilist_node<Fragment> {
 public:
  enum Type { Alignment, Fillment, Region, Target, Stub, Null };

 public:
  Fragment();

  explicit Fragment(Type pKind, SectionData* pParent = NULL);

  virtual ~Fragment();

  Type getKind() const { return m_Kind; }

  const SectionData* getParent() const { return m_pParent; }
  SectionData* getParent() { return m_pParent; }

  void setParent(SectionData* pValue) { m_pParent = pValue; }

  uint64_t getOffset() const;

  void setOffset(uint64_t pOffset) { m_Offset = pOffset; }

  bool hasOffset() const;

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

  virtual size_t size() const {
    assert(false && "Can not call abstract Fragment::size()!");
    return 0;
  }

 private:
  Type m_Kind;

  SectionData* m_pParent;

  uint64_t m_Offset;

 private:
  DISALLOW_COPY_AND_ASSIGN(Fragment);
};

}  // namespace mcld

#endif  // MCLD_FRAGMENT_FRAGMENT_H_
