Line data Source code
1 : //===-- StringSaver.cpp ---------------------------------------------------===//
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 :
10 : #include "llvm/Support/StringSaver.h"
11 :
12 : using namespace llvm;
13 :
14 2467969 : StringRef StringSaver::save(StringRef S) {
15 2467969 : char *P = Alloc.Allocate<char>(S.size() + 1);
16 2467969 : if (!S.empty())
17 2465247 : memcpy(P, S.data(), S.size());
18 2467969 : P[S.size()] = '\0';
19 2467969 : return StringRef(P, S.size());
20 : }
21 :
22 520 : StringRef UniqueStringSaver::save(StringRef S) {
23 : auto R = Unique.insert(S);
24 520 : if (R.second) // cache miss, need to actually save the string
25 392 : *R.first = Strings.save(S); // safe replacement with equal value
26 520 : return *R.first;
27 : }
|