//===- 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