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 14#ifndef MCLD_INPUT_H 15#define MCLD_INPUT_H 16#ifdef ENABLE_UNITTEST 17#include <gtest.h> 18#endif 19 20#include "mcld/MC/MCLDFile.h" 21 22namespace mcld 23{ 24 25class AttributeProxy; 26class Attribute; 27class InputFactory; 28 29/** \class Input 30 * \brief Input provides the information of a input file. 31 * 32 * @see MCLDFile 33 */ 34class Input : public MCLDFile 35{ 36friend class InputFactory; 37public: 38 enum Type { 39 Unknown = MCLDFile::Unknown, 40 Object = MCLDFile::Object, 41 DynObj = MCLDFile::DynObj, 42 Archive = MCLDFile::Archive, 43 Script = MCLDFile::Script, 44 External = MCLDFile::External 45 }; 46 47private: 48 explicit Input(llvm::StringRef pName, 49 const AttributeProxy& pAttr); 50 51 Input(llvm::StringRef pName, 52 const sys::fs::Path& pPath, 53 const AttributeProxy& pAttr, 54 unsigned int pType = Unknown, 55 off_t pFileOffset = 0); 56 57public: 58 ~Input(); 59 60 bool isRecognized() const 61 { return (m_Type != Unknown); } 62 63 const Attribute* attribute() const 64 { return m_pAttr; } 65 66 bool isNeeded() const 67 { return m_bNeeded; } 68 69 void setNeeded() 70 { m_bNeeded = true; } 71 72 off_t fileOffset() const 73 { return m_fileOffset; } 74 75 void setFileOffset(off_t pFileOffset) 76 { m_fileOffset = pFileOffset; } 77 78private: 79 Attribute *m_pAttr; 80 bool m_bNeeded; 81 off_t m_fileOffset; 82}; 83 84} // namespace of mcld 85 86#endif 87 88