-//===- llvm/Support/StringSaver.h - Stable storage for strings --*- C++ -*-===//
+//===- llvm/Support/StringSaver.h -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
#ifndef LLVM_SUPPORT_STRINGSAVER_H
#define LLVM_SUPPORT_STRINGSAVER_H
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Twine.h"
#include "llvm/Support/Allocator.h"
-#include <cstring>
namespace llvm {
-/// \brief Saves strings in stable storage that it owns.
-class StringSaver {
- BumpPtrAllocator Alloc;
+/// \brief Saves strings in the inheritor's stable storage and returns a stable
+/// raw character pointer.
+class StringSaver final {
+ BumpPtrAllocator &Alloc;
public:
- const char *saveCStr(const char *CStr) {
- auto Len = std::strlen(CStr) + 1; // Don't forget the NUL!
- char *Buf = Alloc.Allocate<char>(Len);
- std::memcpy(Buf, CStr, Len);
- return Buf;
- }
+ StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {}
+ const char *save(const char *S) { return save(StringRef(S)); }
+ const char *save(StringRef S);
+ const char *save(const Twine &S) { return save(StringRef(S.str())); }
+ const char *save(std::string &S) { return save(StringRef(S)); }
};
-
-} // end namespace llvm
-
+}
#endif