LLVM 20.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"
16#include <cstddef>
17#include <cstdint>
18
19namespace llvm {
20
21class raw_ostream;
22
23/// Utility for building string tables with deduplicated suffixes.
25public:
26 enum Kind {
37 };
38
39private:
41 size_t Size = 0;
42 Kind K;
43 Align Alignment;
44 bool Finalized = false;
45
46 void finalizeStringTable(bool Optimize);
47 void initSize();
48
49public:
50 StringTableBuilder(Kind K, Align Alignment = Align(1));
52
53 /// Add a string to the builder. Returns the position of S in the
54 /// table. The position will be changed if finalize is used.
55 /// Can only be used before the table is finalized.
56 size_t add(CachedHashStringRef S);
57 size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
58
59 /// Analyze the strings and build the final table. No more strings can
60 /// be added after this point.
61 void finalize();
62
63 /// Finalize the string table without reording it. In this mode, offsets
64 /// returned by add will still be valid.
65 void finalizeInOrder();
66
67 /// Get the offest of a string in the string table. Can only be used
68 /// after the table is finalized.
69 size_t getOffset(CachedHashStringRef S) const;
70 size_t getOffset(StringRef S) const {
72 }
73
74 /// Check if a string is contained in the string table. Since this class
75 /// doesn't store the string values, this function can be used to check if
76 /// storage needs to be done prior to adding the string.
77 bool contains(StringRef S) const { return contains(CachedHashStringRef(S)); }
78 bool contains(CachedHashStringRef S) const { return StringIndexMap.count(S); }
79
80 size_t getSize() const { return Size; }
81 void clear();
82
83 void write(raw_ostream &OS) const;
84 void write(uint8_t *Buf) const;
85
86 bool isFinalized() const { return Finalized; }
87};
88
89} // end namespace llvm
90
91#endif // LLVM_MC_STRINGTABLEBUILDER_H
This file defines CachedHashString and CachedHashStringRef.
This file defines the DenseMap class.
raw_pwrite_stream & OS
A container which contains a StringRef plus a precomputed hash.
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:152
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
Utility for building string tables with deduplicated suffixes.
size_t add(StringRef S)
void finalizeInOrder()
Finalize the string table without reording it.
size_t getOffset(CachedHashStringRef S) const
Get the offest of a string in the string table.
bool contains(StringRef S) const
Check if a string is contained in the string table.
bool contains(CachedHashStringRef S) const
size_t getOffset(StringRef S) const
void write(raw_ostream &OS) const
size_t add(CachedHashStringRef S)
Add a string to the builder.
void finalize()
Analyze the strings and build the final table.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39