//===-- 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/ADT/StringRef.h"
#include "llvm/Support/Allocator.h"
#include <vector>

namespace llvm {

class raw_ostream;

namespace remarks {

/// 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 {
  /// Allocator holding all the memory used by the map.
  BumpPtrAllocator Allocator;
  /// 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() : Allocator(), StrTab(Allocator) {}
  /// Add a string to the table. It returns an unique ID of the string.
  std::pair<unsigned, StringRef> add(StringRef Str);
  /// 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_REMARK_STRING_TABLE_H */
