xref: /llvm-project/llvm/lib/DWARFLinker/Parallel/StringEntryToDwarfStringPoolEntryMap.h (revision 32a6e9d66945c28a9cae476b6d2eb803ca2ab098)
12357e899Savl-llvm //===- StringEntryToDwarfStringPoolEntryMap.h -------------------*- C++ -*-===//
22357e899Savl-llvm //
32357e899Savl-llvm // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42357e899Savl-llvm // See https://llvm.org/LICENSE.txt for license information.
52357e899Savl-llvm // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62357e899Savl-llvm //
72357e899Savl-llvm //===----------------------------------------------------------------------===//
82357e899Savl-llvm 
92357e899Savl-llvm #ifndef LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
102357e899Savl-llvm #define LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
112357e899Savl-llvm 
122357e899Savl-llvm #include "DWARFLinkerGlobalData.h"
132357e899Savl-llvm #include "llvm/ADT/SmallVector.h"
142357e899Savl-llvm #include "llvm/DWARFLinker/StringPool.h"
152357e899Savl-llvm 
162357e899Savl-llvm namespace llvm {
172357e899Savl-llvm namespace dwarf_linker {
182357e899Savl-llvm namespace parallel {
192357e899Savl-llvm 
202357e899Savl-llvm /// This class creates a DwarfStringPoolEntry for the corresponding StringEntry.
212357e899Savl-llvm class StringEntryToDwarfStringPoolEntryMap {
222357e899Savl-llvm public:
StringEntryToDwarfStringPoolEntryMap(LinkingGlobalData & GlobalData)232357e899Savl-llvm   StringEntryToDwarfStringPoolEntryMap(LinkingGlobalData &GlobalData)
242357e899Savl-llvm       : GlobalData(GlobalData) {}
~StringEntryToDwarfStringPoolEntryMap()252357e899Savl-llvm   ~StringEntryToDwarfStringPoolEntryMap() {}
262357e899Savl-llvm 
272357e899Savl-llvm   /// Create DwarfStringPoolEntry for specified StringEntry if necessary.
282357e899Savl-llvm   /// Initialize DwarfStringPoolEntry with initial values.
add(const StringEntry * String)292357e899Savl-llvm   DwarfStringPoolEntryWithExtString *add(const StringEntry *String) {
302357e899Savl-llvm     DwarfStringPoolEntriesTy::iterator it = DwarfStringPoolEntries.find(String);
312357e899Savl-llvm 
322357e899Savl-llvm     if (it == DwarfStringPoolEntries.end()) {
332357e899Savl-llvm       DwarfStringPoolEntryWithExtString *DataPtr =
342357e899Savl-llvm           GlobalData.getAllocator()
352357e899Savl-llvm               .Allocate<DwarfStringPoolEntryWithExtString>();
36*32a6e9d6SJonas Devlieghere       DataPtr->String = String->getKey();
372357e899Savl-llvm       DataPtr->Index = DwarfStringPoolEntry::NotIndexed;
382357e899Savl-llvm       DataPtr->Offset = 0;
392357e899Savl-llvm       DataPtr->Symbol = nullptr;
402357e899Savl-llvm       it = DwarfStringPoolEntries.insert(std::make_pair(String, DataPtr)).first;
412357e899Savl-llvm     }
422357e899Savl-llvm 
432357e899Savl-llvm     assert(it->second != nullptr);
442357e899Savl-llvm     return it->second;
452357e899Savl-llvm   }
462357e899Savl-llvm 
472357e899Savl-llvm   /// Returns already existed DwarfStringPoolEntry for the specified
482357e899Savl-llvm   /// StringEntry.
492357e899Savl-llvm   DwarfStringPoolEntryWithExtString *
getExistingEntry(const StringEntry * String)502357e899Savl-llvm   getExistingEntry(const StringEntry *String) const {
512357e899Savl-llvm     DwarfStringPoolEntriesTy::const_iterator it =
522357e899Savl-llvm         DwarfStringPoolEntries.find(String);
532357e899Savl-llvm 
542357e899Savl-llvm     assert(it != DwarfStringPoolEntries.end());
552357e899Savl-llvm     assert(it->second != nullptr);
562357e899Savl-llvm     return it->second;
572357e899Savl-llvm   }
582357e899Savl-llvm 
592357e899Savl-llvm   /// Erase contents of StringsForEmission.
clear()602357e899Savl-llvm   void clear() { DwarfStringPoolEntries.clear(); }
612357e899Savl-llvm 
622357e899Savl-llvm protected:
632357e899Savl-llvm   using DwarfStringPoolEntriesTy =
642357e899Savl-llvm       DenseMap<const StringEntry *, DwarfStringPoolEntryWithExtString *>;
652357e899Savl-llvm   DwarfStringPoolEntriesTy DwarfStringPoolEntries;
662357e899Savl-llvm 
672357e899Savl-llvm   LinkingGlobalData &GlobalData;
682357e899Savl-llvm };
692357e899Savl-llvm 
702357e899Savl-llvm } // end of namespace parallel
712357e899Savl-llvm } // end of namespace dwarf_linker
722357e899Savl-llvm } // end of namespace llvm
732357e899Savl-llvm 
742357e899Savl-llvm #endif // LLVM_LIB_DWARFLINKER_PARALLEL_STRINGENTRYTODWARFSTRINGPOOLENTRYMAP_H
75