SectionMap.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
1//===- SectionMap.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#ifndef MCLD_SECTION_MAP_H 10#define MCLD_SECTION_MAP_H 11#ifdef ENABLE_UNITTEST 12#include <gtest.h> 13#endif 14 15#include <vector> 16#include <string> 17 18#include <llvm/Support/DataTypes.h> 19 20namespace mcld { 21 22/** \class SectionMap 23 * \brief descirbe the mappings of input section's name (or prefix) to 24 * its associated output section's name and offset 25 */ 26class SectionMap 27{ 28public: 29 // a mapping in SectionMap is the triple of 30 // {input substr, output section's name, output section's offset} 31 struct NamePair 32 { 33 public: 34 NamePair(); 35 NamePair(const std::string& pFrom, const std::string& pTo); 36 37 bool isNull() const; 38 39 public: 40 unsigned int hash; 41 std::string from; 42 std::string to; 43 }; 44 45 typedef std::vector<NamePair> NamePairList; 46 typedef NamePairList::iterator iterator; 47 typedef NamePairList::const_iterator const_iterator; 48 49 /// NullName - the null object of NamePair 50 static NamePair NullName; 51 52public: 53 // get the possible output section name based on the mapping table 54 // return NullPair if not found 55 const NamePair& find(const std::string& pFrom) const; 56 NamePair& find(const std::string& pFrom); 57 58 const NamePair& find(const std::string& pFrom, unsigned int pHash) const; 59 NamePair& find(const std::string& pFrom, unsigned int pHash); 60 61 // add a mapping from input sub-string to output name. 62 // @param [in] pFrom the given input sub-string 63 // @param [in] pTo the mapped output string 64 // @param [out] pExist does pFrom exist? 65 NamePair& append(const std::string& pFrom, 66 const std::string& pTo, 67 bool& pExist); 68 69 const_iterator begin() const { return m_NamePairList.begin(); } 70 iterator begin() { return m_NamePairList.begin(); } 71 const_iterator end () const { return m_NamePairList.end(); } 72 iterator end () { return m_NamePairList.end(); } 73 74 bool empty() const { return m_NamePairList.empty(); } 75 size_t size () const { return m_NamePairList.size(); } 76 77 static unsigned int hash(const std::string& pString); 78 79private: 80 bool matched(const NamePair& pNamePair, 81 const std::string& pInput, 82 unsigned int pHash) const; 83private: 84 NamePairList m_NamePairList; 85}; 86 87} // namespace of mcld 88 89#endif 90 91