| //===-- RemarkStringTable.h - Serializing string table ----------*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This class is used to deduplicate and serialize a string table used for |
| // generating remarks. |
| // |
| // For parsing a string table, use ParsedStringTable in RemarkParser.h |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_REMARKS_REMARKSTRINGTABLE_H |
| #define LLVM_REMARKS_REMARKSTRINGTABLE_H |
| |
| #include "llvm/ADT/StringMap.h" |
| #include "llvm/Support/Allocator.h" |
| #include <vector> |
| |
| namespace llvm { |
| |
| class raw_ostream; |
| class StringRef; |
| |
| namespace remarks { |
| |
| struct ParsedStringTable; |
| struct Remark; |
| |
| /// The string table used for serializing remarks. |
| /// This table can be for example serialized in a section to be consumed after |
| /// the compilation. |
| struct StringTable { |
| /// The string table containing all the unique strings used in the output. |
| /// It maps a string to an unique ID. |
| StringMap<unsigned, BumpPtrAllocator> StrTab; |
| /// Total size of the string table when serialized. |
| size_t SerializedSize = 0; |
| |
| StringTable() = default; |
| |
| /// Disable copy. |
| StringTable(const StringTable &) = delete; |
| StringTable &operator=(const StringTable &) = delete; |
| /// Should be movable. |
| StringTable(StringTable &&) = default; |
| StringTable &operator=(StringTable &&) = default; |
| |
| /// Construct a string table from a ParsedStringTable. |
| StringTable(const ParsedStringTable &Other); |
| |
| /// Add a string to the table. It returns an unique ID of the string. |
| std::pair<unsigned, StringRef> add(StringRef Str); |
| /// Modify \p R to use strings from this string table. If the string table |
| /// does not contain the strings, it adds them. |
| void internalize(Remark &R); |
| /// Serialize the string table to a stream. It is serialized as a little |
| /// endian uint64 (the size of the table in bytes) followed by a sequence of |
| /// NULL-terminated strings, where the N-th string is the string with the ID N |
| /// in the StrTab map. |
| void serialize(raw_ostream &OS) const; |
| /// Serialize the string table to a vector. This allows users to do the actual |
| /// writing to file/memory/other. |
| /// The string with the ID == N should be the N-th element in the vector. |
| std::vector<StringRef> serialize() const; |
| }; |
| |
| } // end namespace remarks |
| } // end namespace llvm |
| |
| #endif // LLVM_REMARKS_REMARKSTRINGTABLE_H |