Revert r250923 as config.h is not an installed header.
[oota-llvm.git] / include / llvm / Support / StringSaver.h
index 8d3dc129edcd2e7d12ba21358c0ef1df34b110d6..38fb7bb38339f9133bd5b5d3fe97df772e89fec9 100644 (file)
@@ -1,4 +1,4 @@
-//===- 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