LLVM 17.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 {
35 XCOFF
36 };
37
38private:
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
48public:
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
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:151
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
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