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 StringRef StringSaver::save(StringRef S) { 15 char *P = Alloc.Allocate<char>(S.size() + 1); 16 if (!S.empty()) 17 memcpy(P, S.data(), S.size()); 18 P[S.size()] = '\0'; 19 return StringRef(P, S.size()); 20 } 21 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 26 return *R.first; 27 } 28