Line data Source code
1 : //===- PDBStringTableBuilder.h - PDB String Table Builder -------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // This file creates the "/names" stream.
11 : //
12 : //===----------------------------------------------------------------------===//
13 :
14 : #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
15 : #define LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
16 :
17 : #include "llvm/ADT/DenseMap.h"
18 : #include "llvm/ADT/StringRef.h"
19 : #include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
20 : #include "llvm/Support/Error.h"
21 : #include <vector>
22 :
23 : namespace llvm {
24 : class BinaryStreamWriter;
25 : class WritableBinaryStreamRef;
26 :
27 : namespace msf {
28 : struct MSFLayout;
29 : }
30 :
31 : namespace pdb {
32 :
33 : class PDBFileBuilder;
34 : class PDBStringTableBuilder;
35 :
36 : struct StringTableHashTraits {
37 : PDBStringTableBuilder *Table;
38 :
39 : explicit StringTableHashTraits(PDBStringTableBuilder &Table);
40 : uint32_t hashLookupKey(StringRef S) const;
41 : StringRef storageKeyToLookupKey(uint32_t Offset) const;
42 : uint32_t lookupKeyToStorageKey(StringRef S);
43 : };
44 :
45 440 : class PDBStringTableBuilder {
46 : public:
47 : // If string S does not exist in the string table, insert it.
48 : // Returns the ID for S.
49 : uint32_t insert(StringRef S);
50 :
51 : uint32_t getIdForString(StringRef S) const;
52 : StringRef getStringForId(uint32_t Id) const;
53 :
54 : uint32_t calculateSerializedSize() const;
55 : Error commit(BinaryStreamWriter &Writer) const;
56 :
57 : void setStrings(const codeview::DebugStringTableSubsection &Strings);
58 :
59 : private:
60 : uint32_t calculateHashTableSize() const;
61 : Error writeHeader(BinaryStreamWriter &Writer) const;
62 : Error writeStrings(BinaryStreamWriter &Writer) const;
63 : Error writeHashTable(BinaryStreamWriter &Writer) const;
64 : Error writeEpilogue(BinaryStreamWriter &Writer) const;
65 :
66 : codeview::DebugStringTableSubsection Strings;
67 : };
68 :
69 : } // end namespace pdb
70 : } // end namespace llvm
71 :
72 : #endif // LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
|