#pragma once #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif //===-- 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_REMARK_STRING_TABLE_H #define LLVM_REMARKS_REMARK_STRING_TABLE_H #include "llvm/ADT/StringMap.h" #include "llvm/Support/Allocator.h" #include 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 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 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 serialize() const; }; } // end namespace remarks } // end namespace llvm #endif /* LLVM_REMARKS_REMARK_STRING_TABLE_H */ #ifdef __GNUC__ #pragma GCC diagnostic pop #endif