//===-- ConstString.h -------------------------------------------*- 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 // //===----------------------------------------------------------------------===// #ifndef LLDB_UTILITY_CONSTSTRING_H #define LLDB_UTILITY_CONSTSTRING_H #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FormatVariadic.h" #include <cstddef> #include <string_view> namespace lldb_private { class Stream; } namespace llvm { class raw_ostream; } namespace lldb_private { /// \class ConstString ConstString.h "lldb/Utility/ConstString.h" /// A uniqued constant string class. /// /// Provides an efficient way to store strings as uniqued strings. After the /// strings are uniqued, finding strings that are equal to one another is very /// fast as just the pointers need to be compared. It also allows for many /// common strings from many different sources to be shared to keep the memory /// footprint low. /// /// No reference counting is done on strings that are added to the string /// pool, once strings are added they are in the string pool for the life of /// the program. class ConstString { … }; /// Stream the string value \a str to the stream \a s Stream &operator<<(Stream &s, ConstString str); } // namespace lldb_private namespace llvm { template <> struct format_provider<lldb_private::ConstString> { … }; /// DenseMapInfo implementation. /// \{ template <> struct DenseMapInfo<lldb_private::ConstString> { … }; /// \} inline raw_ostream &operator<<(raw_ostream &os, lldb_private::ConstString s) { … } } // namespace llvm #endif // LLDB_UTILITY_CONSTSTRING_H