[clang] [clang] Adding an API to create a `CXStringSet` from a Vector of `StringRef`s (PR #136773)

Qiongsi Wu via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 22 14:19:42 PDT 2025


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_wu at 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 {



More information about the cfe-commits mailing list