StringSaver.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //===- llvm/Support/StringSaver.h -------------------------------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLVM_SUPPORT_STRINGSAVER_H
  10. #define LLVM_SUPPORT_STRINGSAVER_H
  11. #include "llvm/ADT/StringRef.h"
  12. #include "llvm/ADT/Twine.h"
  13. #include "llvm/Support/Allocator.h"
  14. namespace llvm {
  15. /// \brief Saves strings in the inheritor's stable storage and returns a stable
  16. /// raw character pointer.
  17. class StringSaver {
  18. protected:
  19. ~StringSaver() {}
  20. virtual const char *saveImpl(StringRef S);
  21. public:
  22. StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {}
  23. const char *save(const char *S) { return save(StringRef(S)); }
  24. const char *save(StringRef S) { return saveImpl(S); }
  25. const char *save(const Twine &S) { return save(StringRef(S.str())); }
  26. const char *save(std::string &S) { return save(StringRef(S)); }
  27. private:
  28. BumpPtrAllocator &Alloc;
  29. };
  30. class BumpPtrStringSaver final : public StringSaver {
  31. public:
  32. BumpPtrStringSaver(BumpPtrAllocator &Alloc) : StringSaver(Alloc) {}
  33. };
  34. }
  35. #endif