LLVM  9.0.0svn
DebugStringTableSubsection.h
Go to the documentation of this file.
1 //===- DebugStringTableSubsection.h - CodeView String Table -----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H
10 #define LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H
11 
12 #include "llvm/ADT/DenseMap.h"
13 #include "llvm/ADT/StringMap.h"
14 #include "llvm/ADT/StringRef.h"
18 #include "llvm/Support/Error.h"
19 #include <cstdint>
20 
21 namespace llvm {
22 
23 class BinaryStreamReader;
24 
25 namespace codeview {
26 
27 /// Represents a read-only view of a CodeView string table. This is a very
28 /// simple flat buffer consisting of null-terminated strings, where strings
29 /// are retrieved by their offset in the buffer. DebugStringTableSubsectionRef
30 /// does not own the underlying storage for the buffer.
32 public:
34 
35  static bool classof(const DebugSubsectionRef *S) {
37  }
38 
41 
43 
44  bool valid() const { return Stream.valid(); }
45 
46  BinaryStreamRef getBuffer() const { return Stream; }
47 
48 private:
49  BinaryStreamRef Stream;
50 };
51 
52 /// Represents a read-write view of a CodeView string table.
53 /// DebugStringTableSubsection owns the underlying storage for the table, and is
54 /// capable of serializing the string table into a format understood by
55 /// DebugStringTableSubsectionRef.
57 public:
59 
60  static bool classof(const DebugSubsection *S) {
62  }
63 
64  // If string S does not exist in the string table, insert it.
65  // Returns the ID for S.
66  uint32_t insert(StringRef S);
67 
68  // Return the ID for string S. Assumes S exists in the table.
69  uint32_t getIdForString(StringRef S) const;
70 
71  StringRef getStringForId(uint32_t Id) const;
72 
73  uint32_t calculateSerializedSize() const override;
74  Error commit(BinaryStreamWriter &Writer) const override;
75 
76  uint32_t size() const;
77 
79  return StringToId.begin();
80  }
81 
82  StringMap<uint32_t>::const_iterator end() const { return StringToId.end(); }
83 
84  std::vector<uint32_t> sortedIds() const;
85 
86 private:
88  StringMap<uint32_t> StringToId;
89  uint32_t StringSize = 1;
90 };
91 
92 } // end namespace codeview
93 
94 } // end namespace llvm
95 
96 #endif // LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H
This class represents lattice values for constants.
Definition: AllocatorList.h:23
Expected< StringRef > getString(uint32_t Offset) const
StringMap< uint32_t >::const_iterator end() const
Tagged union holding either a T or a Error.
Definition: CachePruning.h:22
StringMap< uint32_t >::const_iterator begin() const
Provides write only access to a subclass of WritableBinaryStream.
auto size(R &&Range, typename std::enable_if< std::is_same< typename std::iterator_traits< decltype(Range.begin())>::iterator_category, std::random_access_iterator_tag >::value, void >::type *=nullptr) -> decltype(std::distance(Range.begin(), Range.end()))
Get the size of a range.
Definition: STLExtras.h:1173
Represents a read-write view of a CodeView string table.
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
static bool classof(const DebugSubsectionRef *S)
DebugSubsectionKind kind() const
Represents a read-only view of a CodeView string table.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings"...
Definition: StringMap.h:219
iterator begin()
Definition: StringMap.h:314
static bool classof(const DebugSubsection *S)
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
Provides read only access to a subclass of BinaryStream.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
DebugSubsectionKind kind() const
iterator end()
Definition: StringMap.h:317