================
@@ -37,10 +40,93 @@ using Id = uint64_t;
 /// the current session.
 static constexpr Id kCalculateSeq = UINT64_MAX;
 
+/// A wrapper around a 'std::string' to ensure the contents are valid utf8
+/// during serialization.
+class String {
+public:
+  String() = default;
+  String(const std::string &str) : m_str(str) {}
+  String(llvm::StringRef str) : m_str(str.str()) {}
+  String(const char *str) : m_str(str) {}
+  String(const llvm::formatv_object_base &payload) : m_str(payload.str()) {}
+  String(const String &) = default;
+  String(String &&str) : m_str(std::move(str.m_str)) {}
+  String(std::string &&str) : m_str(std::move(str)) {}
+
+  ~String() = default;
+
+  String &operator=(const String &) = default;
+  String &operator=(String &&Other) {
+    m_str = std::move(Other.m_str);
+    return *this;
+  }
+
+  /// Conversion Operators
+  /// @{
+  operator llvm::Twine() const { return m_str; }
+  operator std::string() const { return m_str; }
+  operator llvm::StringRef() const { return {m_str}; }
+  /// @}
+
+  void clear() { m_str.clear(); }
+  bool empty() const { return m_str.empty(); }
+  const char *c_str() const { return m_str.c_str(); }
+  const char *data() const { return m_str.data(); }
+  std::string str() const { return m_str; }
----------------
DrSergei wrote:

I think we can mark these methods `nodiscard`, but it's not necessary 

https://github.com/llvm/llvm-project/pull/182056
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to