1317017Sdim//===- NamedStreamMap.h - PDB Named Stream Map ------------------*- C++ -*-===// 2317017Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317017Sdim// 7317017Sdim//===----------------------------------------------------------------------===// 8317017Sdim 9320572Sdim#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NAMEDSTREAMMAP_H 10320572Sdim#define LLVM_DEBUGINFO_PDB_NATIVE_NAMEDSTREAMMAP_H 11317017Sdim 12320572Sdim#include "llvm/ADT/Optional.h" 13317017Sdim#include "llvm/ADT/StringMap.h" 14317017Sdim#include "llvm/ADT/StringRef.h" 15320572Sdim#include "llvm/ADT/iterator_range.h" 16317017Sdim#include "llvm/DebugInfo/PDB/Native/HashTable.h" 17317017Sdim#include "llvm/Support/Error.h" 18317017Sdim#include <cstdint> 19317017Sdim 20317017Sdimnamespace llvm { 21320572Sdim 22317017Sdimclass BinaryStreamReader; 23317017Sdimclass BinaryStreamWriter; 24317017Sdim 25317017Sdimnamespace pdb { 26320572Sdim 27341825Sdimclass NamedStreamMap; 28341825Sdim 29341825Sdimstruct NamedStreamMapTraits { 30341825Sdim NamedStreamMap *NS; 31341825Sdim 32341825Sdim explicit NamedStreamMapTraits(NamedStreamMap &NS); 33341825Sdim uint16_t hashLookupKey(StringRef S) const; 34341825Sdim StringRef storageKeyToLookupKey(uint32_t Offset) const; 35341825Sdim uint32_t lookupKeyToStorageKey(StringRef S); 36341825Sdim}; 37341825Sdim 38317017Sdimclass NamedStreamMap { 39320572Sdim friend class NamedStreamMapBuilder; 40320572Sdim 41317017Sdimpublic: 42317017Sdim NamedStreamMap(); 43317017Sdim 44317017Sdim Error load(BinaryStreamReader &Stream); 45317017Sdim Error commit(BinaryStreamWriter &Writer) const; 46341825Sdim uint32_t calculateSerializedLength() const; 47317017Sdim 48317017Sdim uint32_t size() const; 49317017Sdim bool get(StringRef Stream, uint32_t &StreamNo) const; 50317017Sdim void set(StringRef Stream, uint32_t StreamNo); 51317017Sdim 52341825Sdim uint32_t appendStringData(StringRef S); 53341825Sdim StringRef getString(uint32_t Offset) const; 54341825Sdim uint32_t hashString(uint32_t Offset) const; 55341825Sdim 56341825Sdim StringMap<uint32_t> entries() const; 57341825Sdim 58317017Sdimprivate: 59341825Sdim NamedStreamMapTraits HashTraits; 60341825Sdim /// Closed hash table from Offset -> StreamNumber, where Offset is the offset 61341825Sdim /// of the stream name in NamesBuffer. 62353358Sdim HashTable<support::ulittle32_t> OffsetIndexMap; 63341825Sdim 64341825Sdim /// Buffer of string data. 65341825Sdim std::vector<char> NamesBuffer; 66317017Sdim}; 67317017Sdim 68317017Sdim} // end namespace pdb 69320572Sdim 70317017Sdim} // end namespace llvm 71317017Sdim 72320572Sdim#endif // LLVM_DEBUGINFO_PDB_NATIVE_NAMEDSTREAMMAP_H 73