|  | //===- 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/Support/Path.h> | 
|  |  | 
|  | namespace mcld { | 
|  |  | 
|  | class MemoryArea; | 
|  | class AttributeProxy; | 
|  | class Attribute; | 
|  | class InputFactory; | 
|  | class LDContext; | 
|  |  | 
|  | /** \class Input | 
|  | *  \brief Input provides the information of a input file. | 
|  | */ | 
|  | class Input | 
|  | { | 
|  | friend class InputFactory; | 
|  | public: | 
|  | enum Type { | 
|  | Unknown, | 
|  | 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 (NULL != m_pAttr); } | 
|  |  | 
|  | 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; } | 
|  |  | 
|  | // -----  memory area  ----- // | 
|  | void setMemArea(MemoryArea* pMemArea) | 
|  | { m_pMemArea = pMemArea; } | 
|  |  | 
|  | bool hasMemArea() const | 
|  | { return (NULL != m_pMemArea); } | 
|  |  | 
|  | const MemoryArea* memArea() const { return m_pMemArea; } | 
|  | MemoryArea*       memArea()       { return m_pMemArea; } | 
|  |  | 
|  | // -----  context  ----- // | 
|  | void setContext(LDContext* pContext) | 
|  | { m_pContext = pContext; } | 
|  |  | 
|  | bool hasContext() const | 
|  | { return (NULL != m_pContext); } | 
|  |  | 
|  | 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; | 
|  | off_t m_fileOffset; | 
|  | MemoryArea* m_pMemArea; | 
|  | LDContext* m_pContext; | 
|  | }; | 
|  |  | 
|  | } // namespace of mcld | 
|  |  | 
|  | #endif | 
|  |  |