Home | History | Annotate | Download | only in LD
      1 //===- MergedStringTable.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_LD_MERGEDSTRINGTABLE_H_
     10 #define MCLD_LD_MERGEDSTRINGTABLE_H_
     11 
     12 #include "mcld/Support/MemoryRegion.h"
     13 
     14 #include <llvm/ADT/StringMap.h>
     15 #include <llvm/ADT/StringRef.h>
     16 
     17 namespace mcld {
     18 
     19 /** \class MergedStringTable
     20  *  \brief MergedStringTable represents the mergeable string table. The sections
     21  *  with flag SHF_MERGED and SHF_STRING are mergeable. Every string in
     22  *  MergedStringTable is unique.
     23  */
     24 class MergedStringTable {
     25  public:
     26   typedef llvm::StringMap<size_t> StringMapTy;
     27 
     28  public:
     29   MergedStringTable() {}
     30 
     31   /// insertString - insert a string to the string table
     32   /// @return false if the string already exists in the map.
     33   bool insertString(llvm::StringRef pString);
     34 
     35   /// finalizeOffset - finalize the output offset of strings. After this
     36   /// function been called, any string should not be added to this table
     37   /// @return the section size
     38   uint64_t finalizeOffset();
     39 
     40   /// emit - emit the string table
     41   void emit(MemoryRegion& pRegion);
     42 
     43   /// ----- observers -----///
     44   /// getOutputOffset - get the output offset of the string. This should be
     45   /// called after finalizeOffset.
     46   size_t getOutputOffset(llvm::StringRef pStr);
     47 
     48  private:
     49   typedef StringMapTy::iterator string_map_iterator;
     50   typedef StringMapTy::const_iterator const_string_map_iterator;
     51 
     52  private:
     53   /// m_StringMap - the string pool of this section. It maps the string to the
     54   /// output offset. The key of this map is the string, and the value is output
     55   /// offset
     56   StringMapTy m_StringMap;
     57 };
     58 
     59 }  // namespace mcld
     60 
     61 #endif  // MCLD_LD_MERGEDSTRINGTABLE_H_
     62 
     63