Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===-- RemarkStringTable.h - Serializing string table ----------*- 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
// This class is used to deduplicate and serialize a string table used for
10
// generating remarks.
11
//
12
// For parsing a string table, use ParsedStringTable in RemarkParser.h
13
//
14
//===----------------------------------------------------------------------===//
15
 
16
#ifndef LLVM_REMARKS_REMARKSTRINGTABLE_H
17
#define LLVM_REMARKS_REMARKSTRINGTABLE_H
18
 
19
#include "llvm/ADT/StringMap.h"
20
#include "llvm/Support/Allocator.h"
21
#include <vector>
22
 
23
namespace llvm {
24
 
25
class raw_ostream;
26
class StringRef;
27
 
28
namespace remarks {
29
 
30
struct ParsedStringTable;
31
struct Remark;
32
 
33
/// The string table used for serializing remarks.
34
/// This table can be for example serialized in a section to be consumed after
35
/// the compilation.
36
struct StringTable {
37
  /// The string table containing all the unique strings used in the output.
38
  /// It maps a string to an unique ID.
39
  StringMap<unsigned, BumpPtrAllocator> StrTab;
40
  /// Total size of the string table when serialized.
41
  size_t SerializedSize = 0;
42
 
43
  StringTable() = default;
44
 
45
  /// Disable copy.
46
  StringTable(const StringTable &) = delete;
47
  StringTable &operator=(const StringTable &) = delete;
48
  /// Should be movable.
49
  StringTable(StringTable &&) = default;
50
  StringTable &operator=(StringTable &&) = default;
51
 
52
  /// Construct a string table from a ParsedStringTable.
53
  StringTable(const ParsedStringTable &Other);
54
 
55
  /// Add a string to the table. It returns an unique ID of the string.
56
  std::pair<unsigned, StringRef> add(StringRef Str);
57
  /// Modify \p R to use strings from this string table. If the string table
58
  /// does not contain the strings, it adds them.
59
  void internalize(Remark &R);
60
  /// Serialize the string table to a stream. It is serialized as a little
61
  /// endian uint64 (the size of the table in bytes) followed by a sequence of
62
  /// NULL-terminated strings, where the N-th string is the string with the ID N
63
  /// in the StrTab map.
64
  void serialize(raw_ostream &OS) const;
65
  /// Serialize the string table to a vector. This allows users to do the actual
66
  /// writing to file/memory/other.
67
  /// The string with the ID == N should be the N-th element in the vector.
68
  std::vector<StringRef> serialize() const;
69
};
70
 
71
} // end namespace remarks
72
} // end namespace llvm
73
 
74
#endif // LLVM_REMARKS_REMARKSTRINGTABLE_H