llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Qiongsi Wu (qiongsiwu) <details> <summary>Changes</summary> The newly added API avoids converting `StringRef`s to `std::strings` when the input is a vector of `StringRef`. --- Full diff: https://github.com/llvm/llvm-project/pull/136773.diff 2 Files Affected: - (modified) clang/tools/libclang/CXString.cpp (+9-1) - (modified) clang/tools/libclang/CXString.h (+3) ``````````diff 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 { `````````` </details> https://github.com/llvm/llvm-project/pull/136773 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits