aboutsummaryrefslogtreecommitdiff
path: root/tools/libclang/CXString.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/CXString.cpp')
-rw-r--r--tools/libclang/CXString.cpp44
1 files changed, 18 insertions, 26 deletions
diff --git a/tools/libclang/CXString.cpp b/tools/libclang/CXString.cpp
index 5866415496..739646b373 100644
--- a/tools/libclang/CXString.cpp
+++ b/tools/libclang/CXString.cpp
@@ -68,37 +68,29 @@ CXString cxstring::createCXString(CXStringBuf *buf) {
// String pools.
//===----------------------------------------------------------------------===//
-
-typedef std::vector<CXStringBuf *> CXStringPool;
-
-void *cxstring::createCXStringPool() {
- return new CXStringPool();
+cxstring::CXStringPool::~CXStringPool() {
+ for (std::vector<CXStringBuf *>::iterator I = Pool.begin(), E = Pool.end();
+ I != E; ++I) {
+ delete *I;
+ }
}
-void cxstring::disposeCXStringPool(void *p) {
- CXStringPool *pool = static_cast<CXStringPool*>(p);
- if (pool) {
- for (CXStringPool::iterator I = pool->begin(), E = pool->end();
- I != E; ++I) {
- delete *I;
- }
- delete pool;
- }
+CXStringBuf *cxstring::CXStringPool::getCXStringBuf(CXTranslationUnit TU) {
+ if (Pool.empty())
+ return new CXStringBuf(TU);
+
+ CXStringBuf *Buf = Pool.back();
+ Buf->Data.clear();
+ Pool.pop_back();
+ return Buf;
}
CXStringBuf *cxstring::getCXStringBuf(CXTranslationUnit TU) {
- CXStringPool *pool = static_cast<CXStringPool*>(TU->StringPool);
- if (pool->empty())
- return new CXStringBuf(TU);
- CXStringBuf *buf = pool->back();
- buf->Data.clear();
- pool->pop_back();
- return buf;
+ return TU->StringPool->getCXStringBuf(TU);
}
-void cxstring::disposeCXStringBuf(CXStringBuf *buf) {
- if (buf)
- static_cast<CXStringPool*>(buf->TU->StringPool)->push_back(buf);
+void cxstring::CXStringBuf::dispose() {
+ TU->StringPool->Pool.push_back(this);
}
bool cxstring::isManagedByPool(CXString str) {
@@ -126,8 +118,8 @@ void clang_disposeString(CXString string) {
free(const_cast<void *>(string.data));
break;
case CXS_StringBuf:
- disposeCXStringBuf(static_cast<CXStringBuf *>(
- const_cast<void *>(string.data)));
+ static_cast<CXStringBuf *>(
+ const_cast<void *>(string.data))->dispose();
break;
}
}