LLVM  16.0.0git
StringTableBuilder.h
Go to the documentation of this file.
1 //===- StringTableBuilder.h - String table building utility -----*- 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_MC_STRINGTABLEBUILDER_H
10 #define LLVM_MC_STRINGTABLEBUILDER_H
11 
13 #include "llvm/ADT/DenseMap.h"
14 #include "llvm/ADT/StringRef.h"
15 #include "llvm/Support/Alignment.h"
16 #include <cstddef>
17 #include <cstdint>
18 
19 namespace llvm {
20 
21 class raw_ostream;
22 
23 /// Utility for building string tables with deduplicated suffixes.
25 public:
26  enum Kind {
27  ELF,
33  RAW,
36  };
37 
38 private:
40  size_t Size = 0;
41  Kind K;
42  Align Alignment;
43  bool Finalized = false;
44 
45  void finalizeStringTable(bool Optimize);
46  void initSize();
47 
48 public:
49  StringTableBuilder(Kind K, Align Alignment = Align(1));
51 
52  /// Add a string to the builder. Returns the position of S in the
53  /// table. The position will be changed if finalize is used.
54  /// Can only be used before the table is finalized.
55  size_t add(CachedHashStringRef S);
56  size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
57 
58  /// Analyze the strings and build the final table. No more strings can
59  /// be added after this point.
60  void finalize();
61 
62  /// Finalize the string table without reording it. In this mode, offsets
63  /// returned by add will still be valid.
64  void finalizeInOrder();
65 
66  /// Get the offest of a string in the string table. Can only be used
67  /// after the table is finalized.
68  size_t getOffset(CachedHashStringRef S) const;
69  size_t getOffset(StringRef S) const {
71  }
72 
73  /// Check if a string is contained in the string table. Since this class
74  /// doesn't store the string values, this function can be used to check if
75  /// storage needs to be done prior to adding the string.
76  bool contains(StringRef S) const {
78  }
80  return StringIndexMap.count(S);
81  }
82 
83  size_t getSize() const { return Size; }
84  void clear();
85 
86  void write(raw_ostream &OS) const;
87  void write(uint8_t *Buf) const;
88 
89  bool isFinalized() const { return Finalized; }
90 };
91 
92 } // end namespace llvm
93 
94 #endif // LLVM_MC_STRINGTABLEBUILDER_H
llvm::StringTableBuilder::XCOFF
@ XCOFF
Definition: StringTableBuilder.h:35
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::StringTableBuilder::StringTableBuilder
StringTableBuilder(Kind K, Align Alignment=Align(1))
Definition: StringTableBuilder.cpp:55
llvm::StringTableBuilder::contains
bool contains(StringRef S) const
Check if a string is contained in the string table.
Definition: StringTableBuilder.h:76
StringRef.h
llvm::StringTableBuilder::finalizeInOrder
void finalizeInOrder()
Finalize the string table without reording it.
Definition: StringTableBuilder.cpp:133
DenseMap.h
llvm::DenseMapBase< DenseMap< KeyT, ValueT, DenseMapInfo< KeyT >, llvm::detail::DenseMapPair< KeyT, ValueT > >, KeyT, ValueT, DenseMapInfo< KeyT >, llvm::detail::DenseMapPair< KeyT, ValueT > >::count
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition: DenseMap.h:145
llvm::StringTableBuilder::finalize
void finalize()
Analyze the strings and build the final table.
Definition: StringTableBuilder.cpp:128
llvm::StringTableBuilder::getOffset
size_t getOffset(CachedHashStringRef S) const
Get the offest of a string in the string table.
Definition: StringTableBuilder.cpp:194
CachedHashString.h
llvm::StringTableBuilder::MachO64
@ MachO64
Definition: StringTableBuilder.h:30
llvm::StringTableBuilder::WinCOFF
@ WinCOFF
Definition: StringTableBuilder.h:28
llvm::StringTableBuilder::getSize
size_t getSize() const
Definition: StringTableBuilder.h:83
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:53
llvm::StringTableBuilder::MachO64Linked
@ MachO64Linked
Definition: StringTableBuilder.h:32
Align
uint64_t Align
Definition: ELFObjHandler.cpp:82
llvm::Align
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39
llvm::StringTableBuilder::RAW
@ RAW
Definition: StringTableBuilder.h:33
llvm::CachedHashStringRef
A container which contains a StringRef plus a precomputed hash.
Definition: CachedHashString.h:29
llvm::StringTableBuilder::clear
void clear()
Definition: StringTableBuilder.cpp:189
llvm::StringTableBuilder::MachO
@ MachO
Definition: StringTableBuilder.h:29
llvm::DenseMap
Definition: DenseMap.h:714
llvm::StringTableBuilder::~StringTableBuilder
~StringTableBuilder()
llvm::StringTableBuilder::contains
bool contains(CachedHashStringRef S) const
Definition: StringTableBuilder.h:79
llvm::StringTableBuilder::write
void write(raw_ostream &OS) const
Definition: StringTableBuilder.cpp:60
llvm::StringTableBuilder::MachOLinked
@ MachOLinked
Definition: StringTableBuilder.h:31
llvm::StringTableBuilder::add
size_t add(StringRef S)
Definition: StringTableBuilder.h:56
llvm::StringTableBuilder::DWARF
@ DWARF
Definition: StringTableBuilder.h:34
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
S
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
Definition: README.txt:210
llvm::StringTableBuilder::getOffset
size_t getOffset(StringRef S) const
Definition: StringTableBuilder.h:69
Alignment.h
llvm::StringTableBuilder::add
size_t add(CachedHashStringRef S)
Add a string to the builder.
Definition: StringTableBuilder.cpp:201
llvm::StringTableBuilder
Utility for building string tables with deduplicated suffixes.
Definition: StringTableBuilder.h:24
llvm::StringTableBuilder::isFinalized
bool isFinalized() const
Definition: StringTableBuilder.h:89
llvm::StringTableBuilder::ELF
@ ELF
Definition: StringTableBuilder.h:27
llvm::StringTableBuilder::Kind
Kind
Definition: StringTableBuilder.h:26