CXString.h revision dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2a
1ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek//===- CXString.h - Routines for manipulating CXStrings -------------------===// 2ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// 3ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// The LLVM Compiler Infrastructure 4ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// 5ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// This file is distributed under the University of Illinois Open Source 6ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// License. See LICENSE.TXT for details. 7ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// 8ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek//===----------------------------------------------------------------------===// 9ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// 10ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// This file defines routines for manipulating CXStrings. 11ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek// 12ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek//===----------------------------------------------------------------------===// 13ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 14ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek#ifndef LLVM_CLANG_CXSTRING_H 15ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek#define LLVM_CLANG_CXSTRING_H 16ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 17ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek#include "clang-c/Index.h" 18686775deca8b8685eb90801495880e3abdd844c2Chris Lattner#include "clang/Basic/LLVM.h" 19a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek#include "llvm/ADT/SmallString.h" 20f59edb96b2d0bfe612b732f19519ab84bb995bd4Chandler Carruth#include "llvm/ADT/StringRef.h" 219c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko#include <vector> 22ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 23ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremeneknamespace clang { 24ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremeneknamespace cxstring { 259c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 269c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenkostruct CXStringBuf; 27ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 28dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko/// \brief Create a CXString object for an NULL string. 29dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri GribenkoCXString createNull(); 30dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko 31ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek/// \brief Create a CXString object from a C string. 32ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed KremenekCXString createCXString(const char *String, bool DupString = false); 33ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 34a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek/// \brief Create a CXString object from a StringRef. 35686775deca8b8685eb90801495880e3abdd844c2Chris LattnerCXString createCXString(StringRef String, bool DupString = true); 36a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek 37a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek/// \brief Create a CXString object that is backed by a string buffer. 38a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXString createCXString(CXStringBuf *buf); 39a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek 409c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko/// \brief A string pool used for fast allocation/deallocation of strings. 419c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenkoclass CXStringPool { 429c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenkopublic: 439c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko ~CXStringPool(); 449c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 459c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko CXStringBuf *getCXStringBuf(CXTranslationUnit TU); 469c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 479c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenkoprivate: 489c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko std::vector<CXStringBuf *> Pool; 499c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 509c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko friend struct CXStringBuf; 519c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko}; 529c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 539c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenkostruct CXStringBuf { 549c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko SmallString<128> Data; 559c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko CXTranslationUnit TU; 569c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 579c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko CXStringBuf(CXTranslationUnit TU) : TU(TU) {} 589c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko 599c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko /// \brief Return this buffer to the pool. 609c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko void dispose(); 619c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko}; 62a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek 63a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXStringBuf *getCXStringBuf(CXTranslationUnit TU); 64ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 65baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenek/// \brief Returns true if the CXString data is managed by a pool. 66baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenekbool isManagedByPool(CXString str); 67baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenek 68ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek} 69ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek} 70ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 71ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek#endif 72ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek 73