//===- MCLDInput.h --------------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Input class inherits MCLDFile, which is used to represent a input file
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_INPUT_H
#define MCLD_INPUT_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include "mcld/MC/MCLDFile.h"
namespace mcld
{
class AttributeProxy;
class Attribute;
class InputFactory;
/** \class Input
* \brief Input provides the information of a input file.
*
* @see MCLDFile
*/
class Input : public MCLDFile
{
friend class InputFactory;
public:
enum Type {
Unknown = MCLDFile::Unknown,
Object = MCLDFile::Object,
DynObj = MCLDFile::DynObj,
Archive = MCLDFile::Archive,
Script = MCLDFile::Script,
External = MCLDFile::External
};
private:
explicit Input(llvm::StringRef pName,
const AttributeProxy& pAttr);
Input(llvm::StringRef pName,
const sys::fs::Path& pPath,
const AttributeProxy& pAttr,
unsigned int pType = Unknown,
off_t pFileOffset = 0);
public:
~Input();
bool isRecognized() const
{ return (m_Type != Unknown); }
const Attribute* attribute() const
{ return m_pAttr; }
bool isNeeded() const
{ return m_bNeeded; }
void setNeeded()
{ m_bNeeded = true; }
off_t fileOffset() const
{ return m_fileOffset; }
void setFileOffset(off_t pFileOffset)
{ m_fileOffset = pFileOffset; }
private:
Attribute *m_pAttr;
bool m_bNeeded;
off_t m_fileOffset;
};
} // namespace of mcld
#endif