Home | History | Annotate | Download | only in MC
      1 //===- Input.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_MC_INPUT_H_
     14 #define MCLD_MC_INPUT_H_
     15 
     16 #include "mcld/Support/Path.h"
     17 
     18 namespace mcld {
     19 
     20 class AttributeProxy;
     21 class Attribute;
     22 class InputFactory;
     23 class LDContext;
     24 class MemoryArea;
     25 
     26 /** \class Input
     27  *  \brief Input provides the information of a input file.
     28  */
     29 class Input {
     30   friend class InputFactory;
     31 
     32  public:
     33   enum Type {
     34     Unknown,
     35     Binary,
     36     Object,
     37     Exec,
     38     DynObj,
     39     CoreFile,
     40     Script,
     41     Archive,
     42     External
     43   };
     44 
     45  public:
     46   explicit Input(llvm::StringRef pName);
     47 
     48   Input(llvm::StringRef pName, const AttributeProxy& pAttr);
     49 
     50   Input(llvm::StringRef pName,
     51         const sys::fs::Path& pPath,
     52         unsigned int pType = Unknown,
     53         off_t pFileOffset = 0);
     54 
     55   Input(llvm::StringRef pName,
     56         const sys::fs::Path& pPath,
     57         const AttributeProxy& pAttr,
     58         unsigned int pType = Unknown,
     59         off_t pFileOffset = 0);
     60 
     61   ~Input();
     62 
     63   const std::string& name() const { return m_Name; }
     64 
     65   void setName(const std::string& pName) { m_Name = pName; }
     66 
     67   const sys::fs::Path& path() const { return m_Path; }
     68 
     69   void setPath(const sys::fs::Path& pPath) { m_Path = pPath; }
     70 
     71   void setType(unsigned int pType) { m_Type = pType; }
     72 
     73   unsigned int type() const { return m_Type; }
     74 
     75   bool isRecognized() const { return (m_Type != Unknown); }
     76 
     77   bool hasAttribute() const { return (m_pAttr != NULL); }
     78 
     79   const Attribute* attribute() const { return m_pAttr; }
     80 
     81   bool isNeeded() const { return m_bNeeded; }
     82 
     83   void setNeeded() { m_bNeeded = true; }
     84 
     85   bool noExport() const { return m_bNoExport; }
     86 
     87   void setNoExport() { m_bNoExport = true; }
     88 
     89   off_t fileOffset() const { return m_fileOffset; }
     90 
     91   void setFileOffset(off_t pFileOffset) { m_fileOffset = pFileOffset; }
     92 
     93   // -----  memory area  ----- //
     94   void setMemArea(MemoryArea* pMemArea) { m_pMemArea = pMemArea; }
     95 
     96   bool hasMemArea() const { return (m_pMemArea != NULL); }
     97 
     98   const MemoryArea* memArea() const { return m_pMemArea; }
     99   MemoryArea* memArea() { return m_pMemArea; }
    100 
    101   // -----  context  ----- //
    102   void setContext(LDContext* pContext) { m_pContext = pContext; }
    103 
    104   bool hasContext() const { return (m_pContext != NULL); }
    105 
    106   const LDContext* context() const { return m_pContext; }
    107   LDContext* context() { return m_pContext; }
    108 
    109  private:
    110   unsigned int m_Type;
    111   std::string m_Name;
    112   sys::fs::Path m_Path;
    113   Attribute* m_pAttr;
    114   bool m_bNeeded;
    115   bool m_bNoExport;
    116   off_t m_fileOffset;
    117   MemoryArea* m_pMemArea;
    118   LDContext* m_pContext;
    119 };
    120 
    121 }  // namespace mcld
    122 
    123 #endif  // MCLD_MC_INPUT_H_
    124