1454adf64SRafael Espindola //===-- StringSaver.cpp ---------------------------------------------------===// 2454adf64SRafael Espindola // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6454adf64SRafael Espindola // 7454adf64SRafael Espindola //===----------------------------------------------------------------------===// 8454adf64SRafael Espindola 9454adf64SRafael Espindola #include "llvm/Support/StringSaver.h" 10454adf64SRafael Espindola 11454adf64SRafael Espindola using namespace llvm; 12454adf64SRafael Espindola save(StringRef S)13ec4fb5baSMehdi AminiStringRef StringSaver::save(StringRef S) { 14454adf64SRafael Espindola char *P = Alloc.Allocate<char>(S.size() + 1); 1554829bb3SHaojian Wu if (!S.empty()) 16454adf64SRafael Espindola memcpy(P, S.data(), S.size()); 17454adf64SRafael Espindola P[S.size()] = '\0'; 18ec4fb5baSMehdi Amini return StringRef(P, S.size()); 19454adf64SRafael Espindola } 204bb7883dSSam McCall save(StringRef S)214bb7883dSSam McCallStringRef UniqueStringSaver::save(StringRef S) { 22*dad2e92eSEric Christopher auto R = Unique.insert(S); 23*dad2e92eSEric Christopher if (R.second) // cache miss, need to actually save the string 24*dad2e92eSEric Christopher *R.first = Strings.save(S); // safe replacement with equal value 25*dad2e92eSEric Christopher return *R.first; 264bb7883dSSam McCall } 27