blob: dfd7df317563c2a9eb36450f2c0cab0f80ce09dc [file] [log] [blame]
//===- Input.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_MC_INPUT_H_
#define MCLD_MC_INPUT_H_
#include "mcld/Support/Path.h"
namespace mcld {
class AttributeProxy;
class Attribute;
class InputFactory;
class LDContext;
class MemoryArea;
/** \class Input
* \brief Input provides the information of a input file.
*/
class Input {
friend class InputFactory;
public:
enum Type {
Unknown,
Binary,
Object,
Exec,
DynObj,
CoreFile,
Script,
Archive,
External
};
public:
explicit Input(llvm::StringRef pName);
Input(llvm::StringRef pName, const AttributeProxy& pAttr);
Input(llvm::StringRef pName,
const sys::fs::Path& pPath,
unsigned int pType = Unknown,
off_t pFileOffset = 0);
Input(llvm::StringRef pName,
const sys::fs::Path& pPath,
const AttributeProxy& pAttr,
unsigned int pType = Unknown,
off_t pFileOffset = 0);
~Input();
const std::string& name() const { return m_Name; }
void setName(const std::string& pName) { m_Name = pName; }
const sys::fs::Path& path() const { return m_Path; }
void setPath(const sys::fs::Path& pPath) { m_Path = pPath; }
void setType(unsigned int pType) { m_Type = pType; }
unsigned int type() const { return m_Type; }
bool isRecognized() const { return (m_Type != Unknown); }
bool hasAttribute() const { return (m_pAttr != NULL); }
const Attribute* attribute() const { return m_pAttr; }
bool isNeeded() const { return m_bNeeded; }
void setNeeded() { m_bNeeded = true; }
bool noExport() const { return m_bNoExport; }
void setNoExport() { m_bNoExport = true; }
off_t fileOffset() const { return m_fileOffset; }
void setFileOffset(off_t pFileOffset) { m_fileOffset = pFileOffset; }
// ----- memory area ----- //
void setMemArea(MemoryArea* pMemArea) { m_pMemArea = pMemArea; }
bool hasMemArea() const { return (m_pMemArea != NULL); }
const MemoryArea* memArea() const { return m_pMemArea; }
MemoryArea* memArea() { return m_pMemArea; }
// ----- context ----- //
void setContext(LDContext* pContext) { m_pContext = pContext; }
bool hasContext() const { return (m_pContext != NULL); }
const LDContext* context() const { return m_pContext; }
LDContext* context() { return m_pContext; }
private:
unsigned int m_Type;
std::string m_Name;
sys::fs::Path m_Path;
Attribute* m_pAttr;
bool m_bNeeded;
bool m_bNoExport;
off_t m_fileOffset;
MemoryArea* m_pMemArea;
LDContext* m_pContext;
};
} // namespace mcld
#endif // MCLD_MC_INPUT_H_