summaryrefslogtreecommitdiffstats
path: root/llvm/include/llvm/Support/StringSaver.h
blob: c7a2e8f48e866345e0c16fd2d834495bc99d8484 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//===- 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 stable
/// raw character pointer.
class StringSaver {
protected:
  ~StringSaver() {}
  virtual const char *saveImpl(StringRef S);

public:
  StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {}
  const char *save(const char *S) { return save(StringRef(S)); }
  const char *save(StringRef S) { return saveImpl(S); }
  const char *save(const Twine &S) { return save(StringRef(S.str())); }
  const char *save(std::string &S) { return save(StringRef(S)); }

private:
  BumpPtrAllocator &Alloc;
};

class BumpPtrStringSaver final : public StringSaver {
public:
  BumpPtrStringSaver(BumpPtrAllocator &Alloc) : StringSaver(Alloc) {}
};
} // namespace llvm
#endif
OpenPOWER on IntegriCloud