summaryrefslogtreecommitdiff
path: root/clang-r353983e/include/llvm/MC/StringTableBuilder.h
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2019-07-02 16:25:20 -0700
committerAli B <abittin@gmail.com>2019-07-05 19:33:16 +0300
commit9afee4e65dc5f9f5eb371683729ff67b8df81d03 (patch)
tree4cf241d6c9044f91ee8c06e6920174d06f8de0b6 /clang-r353983e/include/llvm/MC/StringTableBuilder.h
parent2f19bd722c4c825320d1511c1ed83161b7f95d51 (diff)
Update prebuilt Clang to r353983e.HEADq10.0
clang 9.0.5 (based on r353983e) from build 5696680. Bug: http://b/135931688 Bug: http://b/136008926 Test: N/A Change-Id: I922d17410047d2e2df4625615352c588ee71b203
Diffstat (limited to 'clang-r353983e/include/llvm/MC/StringTableBuilder.h')
-rw-r--r--clang-r353983e/include/llvm/MC/StringTableBuilder.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/clang-r353983e/include/llvm/MC/StringTableBuilder.h b/clang-r353983e/include/llvm/MC/StringTableBuilder.h
new file mode 100644
index 00000000..c83eca4e
--- /dev/null
+++ b/clang-r353983e/include/llvm/MC/StringTableBuilder.h
@@ -0,0 +1,74 @@
+//===- StringTableBuilder.h - String table building utility -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_STRINGTABLEBUILDER_H
+#define LLVM_MC_STRINGTABLEBUILDER_H
+
+#include "llvm/ADT/CachedHashString.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace llvm {
+
+class raw_ostream;
+
+/// Utility for building string tables with deduplicated suffixes.
+class StringTableBuilder {
+public:
+ enum Kind { ELF, WinCOFF, MachO, RAW, DWARF };
+
+private:
+ DenseMap<CachedHashStringRef, size_t> StringIndexMap;
+ size_t Size = 0;
+ Kind K;
+ unsigned Alignment;
+ bool Finalized = false;
+
+ void finalizeStringTable(bool Optimize);
+ void initSize();
+
+public:
+ StringTableBuilder(Kind K, unsigned Alignment = 1);
+ ~StringTableBuilder();
+
+ /// Add a string to the builder. Returns the position of S in the
+ /// table. The position will be changed if finalize is used.
+ /// Can only be used before the table is finalized.
+ size_t add(CachedHashStringRef S);
+ size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
+
+ /// Analyze the strings and build the final table. No more strings can
+ /// be added after this point.
+ void finalize();
+
+ /// Finalize the string table without reording it. In this mode, offsets
+ /// returned by add will still be valid.
+ void finalizeInOrder();
+
+ /// Get the offest of a string in the string table. Can only be used
+ /// after the table is finalized.
+ size_t getOffset(CachedHashStringRef S) const;
+ size_t getOffset(StringRef S) const {
+ return getOffset(CachedHashStringRef(S));
+ }
+
+ size_t getSize() const { return Size; }
+ void clear();
+
+ void write(raw_ostream &OS) const;
+ void write(uint8_t *Buf) const;
+
+private:
+ bool isFinalized() const { return Finalized; }
+};
+
+} // end namespace llvm
+
+#endif // LLVM_MC_STRINGTABLEBUILDER_H