| //===- llvm/Support/StringSaver.h -------------------------------*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #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" | |
| namespace llvm { | |
| /// \brief Saves strings in the inheritor's stable storage and returns a | |
| /// StringRef with a stable character pointer. | |
| class StringSaver final { | |
| BumpPtrAllocator &Alloc; | |
| public: | |
| StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {} | |
| StringRef save(const char *S) { return save(StringRef(S)); } | |
| StringRef save(StringRef S); | |
| StringRef save(const Twine &S) { return save(StringRef(S.str())); } | |
| StringRef save(std::string &S) { return save(StringRef(S)); } | |
| }; | |
| } | |
| #endif |