aboutsummaryrefslogtreecommitdiff
path: root/tools/libclang/CXString.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/CXString.h')
-rw-r--r--tools/libclang/CXString.h38
1 files changed, 25 insertions, 13 deletions
diff --git a/tools/libclang/CXString.h b/tools/libclang/CXString.h
index 73d94f6bbb..3753ed40d5 100644
--- a/tools/libclang/CXString.h
+++ b/tools/libclang/CXString.h
@@ -18,15 +18,12 @@
#include "clang/Basic/LLVM.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
+#include <vector>
namespace clang {
namespace cxstring {
-
-struct CXStringBuf {
- SmallString<128> Data;
- CXTranslationUnit TU;
- CXStringBuf(CXTranslationUnit tu) : TU(tu) {}
-};
+
+struct CXStringBuf;
/// \brief Create a CXString object from a C string.
CXString createCXString(const char *String, bool DupString = false);
@@ -37,15 +34,30 @@ CXString createCXString(StringRef String, bool DupString = true);
/// \brief Create a CXString object that is backed by a string buffer.
CXString createCXString(CXStringBuf *buf);
-/// \brief Create an opaque string pool used for fast geneneration of strings.
-void *createCXStringPool();
+/// \brief A string pool used for fast allocation/deallocation of strings.
+class CXStringPool {
+public:
+ ~CXStringPool();
+
+ CXStringBuf *getCXStringBuf(CXTranslationUnit TU);
+
+private:
+ std::vector<CXStringBuf *> Pool;
+
+ friend struct CXStringBuf;
+};
+
+struct CXStringBuf {
+ SmallString<128> Data;
+ CXTranslationUnit TU;
+
+ CXStringBuf(CXTranslationUnit TU) : TU(TU) {}
+
+ /// \brief Return this buffer to the pool.
+ void dispose();
+};
-/// \brief Dispose of a string pool.
-void disposeCXStringPool(void *pool);
-
CXStringBuf *getCXStringBuf(CXTranslationUnit TU);
-
-void disposeCXStringBuf(CXStringBuf *buf);
/// \brief Returns true if the CXString data is managed by a pool.
bool isManagedByPool(CXString str);