| //===- SectionMap.h -------------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_SECTION_MAP_H |
| #define MCLD_SECTION_MAP_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| |
| #include <vector> |
| #include <string> |
| |
| #include <llvm/Support/DataTypes.h> |
| |
| namespace mcld { |
| |
| /** \class SectionMap |
| * \brief descirbe the mappings of input section's name (or prefix) to |
| * its associated output section's name and offset |
| */ |
| class SectionMap |
| { |
| public: |
| // a mapping in SectionMap is the triple of |
| // {input substr, output section's name, output section's offset} |
| struct NamePair |
| { |
| public: |
| NamePair(); |
| NamePair(const std::string& pFrom, const std::string& pTo); |
| |
| bool isNull() const; |
| |
| public: |
| unsigned int hash; |
| std::string from; |
| std::string to; |
| }; |
| |
| typedef std::vector<NamePair> NamePairList; |
| typedef NamePairList::iterator iterator; |
| typedef NamePairList::const_iterator const_iterator; |
| |
| /// NullName - the null object of NamePair |
| static NamePair NullName; |
| |
| public: |
| // get the possible output section name based on the mapping table |
| // return NullPair if not found |
| const NamePair& find(const std::string& pFrom) const; |
| NamePair& find(const std::string& pFrom); |
| |
| const NamePair& find(const std::string& pFrom, unsigned int pHash) const; |
| NamePair& find(const std::string& pFrom, unsigned int pHash); |
| |
| // add a mapping from input sub-string to output name. |
| // @param [in] pFrom the given input sub-string |
| // @param [in] pTo the mapped output string |
| // @param [out] pExist does pFrom exist? |
| NamePair& append(const std::string& pFrom, |
| const std::string& pTo, |
| bool& pExist); |
| |
| const_iterator begin() const { return m_NamePairList.begin(); } |
| iterator begin() { return m_NamePairList.begin(); } |
| const_iterator end () const { return m_NamePairList.end(); } |
| iterator end () { return m_NamePairList.end(); } |
| |
| bool empty() const { return m_NamePairList.empty(); } |
| size_t size () const { return m_NamePairList.size(); } |
| |
| static unsigned int hash(const std::string& pString); |
| |
| private: |
| bool matched(const NamePair& pNamePair, |
| const std::string& pInput, |
| unsigned int pHash) const; |
| private: |
| NamePairList m_NamePairList; |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |
| |