1//===- MCLDInput.h --------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// Input class inherits MCLDFile, which is used to represent a input file 11// 12//===----------------------------------------------------------------------===// 13#ifndef MCLD_INPUT_H 14#define MCLD_INPUT_H 15#ifdef ENABLE_UNITTEST 16#include <gtest.h> 17#endif 18 19#include <mcld/Support/Path.h> 20 21namespace mcld { 22 23class MemoryArea; 24class AttributeProxy; 25class Attribute; 26class InputFactory; 27class LDContext; 28 29/** \class Input 30 * \brief Input provides the information of a input file. 31 */ 32class Input 33{ 34friend class InputFactory; 35public: 36 enum Type { 37 Unknown, 38 Object, 39 Exec, 40 DynObj, 41 CoreFile, 42 Script, 43 Archive, 44 External 45 }; 46 47public: 48 explicit Input(llvm::StringRef pName); 49 50 Input(llvm::StringRef pName, 51 const AttributeProxy& pAttr); 52 53 Input(llvm::StringRef pName, 54 const sys::fs::Path& pPath, 55 unsigned int pType = Unknown, 56 off_t pFileOffset = 0); 57 58 Input(llvm::StringRef pName, 59 const sys::fs::Path& pPath, 60 const AttributeProxy& pAttr, 61 unsigned int pType = Unknown, 62 off_t pFileOffset = 0); 63 64 ~Input(); 65 66 const std::string& name() const 67 { return m_Name; } 68 69 void setName(const std::string& pName) 70 { m_Name = pName; } 71 72 const sys::fs::Path& path() const 73 { return m_Path; } 74 75 void setPath(const sys::fs::Path& pPath) 76 { m_Path = pPath; } 77 78 void setType(unsigned int pType) 79 { m_Type = pType; } 80 81 unsigned int type() const 82 { return m_Type; } 83 84 bool isRecognized() const 85 { return (m_Type != Unknown); } 86 87 bool hasAttribute() const 88 { return (NULL != m_pAttr); } 89 90 const Attribute* attribute() const 91 { return m_pAttr; } 92 93 bool isNeeded() const 94 { return m_bNeeded; } 95 96 void setNeeded() 97 { m_bNeeded = true; } 98 99 off_t fileOffset() const 100 { return m_fileOffset; } 101 102 void setFileOffset(off_t pFileOffset) 103 { m_fileOffset = pFileOffset; } 104 105 // ----- memory area ----- // 106 void setMemArea(MemoryArea* pMemArea) 107 { m_pMemArea = pMemArea; } 108 109 bool hasMemArea() const 110 { return (NULL != m_pMemArea); } 111 112 const MemoryArea* memArea() const { return m_pMemArea; } 113 MemoryArea* memArea() { return m_pMemArea; } 114 115 // ----- context ----- // 116 void setContext(LDContext* pContext) 117 { m_pContext = pContext; } 118 119 bool hasContext() const 120 { return (NULL != m_pContext); } 121 122 const LDContext* context() const { return m_pContext; } 123 LDContext* context() { return m_pContext; } 124 125private: 126 unsigned int m_Type; 127 std::string m_Name; 128 sys::fs::Path m_Path; 129 Attribute *m_pAttr; 130 bool m_bNeeded; 131 off_t m_fileOffset; 132 MemoryArea* m_pMemArea; 133 LDContext* m_pContext; 134}; 135 136} // namespace of mcld 137 138#endif 139 140