https://github.com/qiongsiwu created https://github.com/llvm/llvm-project/pull/136773
The newly added API avoids converting `StringRef`s to `std::strings` when the input is a vector of `StringRef`. >From 7f39ebcc34fe3f40c2554ff7fa93baca5b4634a0 Mon Sep 17 00:00:00 2001 From: Qiongsi Wu <qiongsi...@apple.com> Date: Tue, 22 Apr 2025 14:17:15 -0700 Subject: [PATCH] Adding CXStringSet *createSet that takes a vector of StringRef as input. --- clang/tools/libclang/CXString.cpp | 10 +++++++++- clang/tools/libclang/CXString.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/clang/tools/libclang/CXString.cpp b/clang/tools/libclang/CXString.cpp index aaa8f8eeb67a1..7e46fcc3b8e69 100644 --- a/clang/tools/libclang/CXString.cpp +++ b/clang/tools/libclang/CXString.cpp @@ -107,7 +107,8 @@ CXString createCXString(CXStringBuf *buf) { return Str; } -CXStringSet *createSet(const std::vector<std::string> &Strings) { +template <typename StringTy> +static CXStringSet *createSetImpl(const std::vector<StringTy> &Strings) { CXStringSet *Set = new CXStringSet; Set->Count = Strings.size(); Set->Strings = new CXString[Set->Count]; @@ -116,6 +117,13 @@ CXStringSet *createSet(const std::vector<std::string> &Strings) { return Set; } +CXStringSet *createSet(const std::vector<std::string> &Strings) { + return createSetImpl(Strings); +} + +CXStringSet *createSet(const std::vector<StringRef> &Strings) { + return createSetImpl(Strings); +} //===----------------------------------------------------------------------===// // String pools. diff --git a/clang/tools/libclang/CXString.h b/clang/tools/libclang/CXString.h index 809bdec3d677f..24c4092a9a2c0 100644 --- a/clang/tools/libclang/CXString.h +++ b/clang/tools/libclang/CXString.h @@ -67,7 +67,10 @@ CXString createRef(std::string String) = delete; /// Create a CXString object that is backed by a string buffer. CXString createCXString(CXStringBuf *buf); +/// Create a CXStringSet object owns the strings. Such an object should be +/// disposed with clang_disposeStringSet. CXStringSet *createSet(const std::vector<std::string> &Strings); +CXStringSet *createSet(const std::vector<StringRef> &Strings); /// A string pool used for fast allocation/deallocation of strings. class CXStringPool { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits