1 //===-- StringSaver.cpp ---------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/Support/StringSaver.h"
14 StringRef
StringSaver::save(StringRef S
) {
15 char *P
= Alloc
.Allocate
<char>(S
.size() + 1);
17 memcpy(P
, S
.data(), S
.size());
19 return StringRef(P
, S
.size());
22 StringRef
UniqueStringSaver::save(StringRef S
) {
23 auto R
= Unique
.insert(S
);
24 if (R
.second
) // cache miss, need to actually save the string
25 *R
.first
= Strings
.save(S
); // safe replacement with equal value