]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/MC/StringTableBuilder.h
Import libxo-1.0.2
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / MC / StringTableBuilder.h
1 //===- StringTableBuilder.h - String table building utility -----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_MC_STRINGTABLEBUILDER_H
11 #define LLVM_MC_STRINGTABLEBUILDER_H
12
13 #include "llvm/ADT/CachedHashString.h"
14 #include "llvm/ADT/DenseMap.h"
15 #include "llvm/ADT/StringRef.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.
24 class StringTableBuilder {
25 public:
26   enum Kind { ELF, WinCOFF, MachO, RAW, DWARF };
27
28 private:
29   DenseMap<CachedHashStringRef, size_t> StringIndexMap;
30   size_t Size = 0;
31   Kind K;
32   unsigned Alignment;
33   bool Finalized = false;
34
35   void finalizeStringTable(bool Optimize);
36   void initSize();
37
38 public:
39   StringTableBuilder(Kind K, unsigned Alignment = 1);
40   ~StringTableBuilder();
41
42   /// Add a string to the builder. Returns the position of S in the
43   /// table. The position will be changed if finalize is used.
44   /// Can only be used before the table is finalized.
45   size_t add(CachedHashStringRef S);
46   size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
47
48   /// Analyze the strings and build the final table. No more strings can
49   /// be added after this point.
50   void finalize();
51
52   /// Finalize the string table without reording it. In this mode, offsets
53   /// returned by add will still be valid.
54   void finalizeInOrder();
55
56   /// Get the offest of a string in the string table. Can only be used
57   /// after the table is finalized.
58   size_t getOffset(CachedHashStringRef S) const;
59   size_t getOffset(StringRef S) const {
60     return getOffset(CachedHashStringRef(S));
61   }
62
63   size_t getSize() const { return Size; }
64   void clear();
65
66   void write(raw_ostream &OS) const;
67   void write(uint8_t *Buf) const;
68
69 private:
70   bool isFinalized() const { return Finalized; }
71 };
72
73 } // end namespace llvm
74
75 #endif // LLVM_MC_STRINGTABLEBUILDER_H