================
@@ -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