Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  75.