CXString.h revision f59edb96b2d0bfe612b732f19519ab84bb995bd4
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"
21ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek
22ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremeneknamespace clang {
23ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremeneknamespace cxstring {
24a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek
25a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenekstruct CXStringBuf {
2636d592718ff342f762e32cbde73d1113f88cb275Dylan Noblesmith  SmallString<128> Data;
27a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek  CXTranslationUnit TU;
28a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek  CXStringBuf(CXTranslationUnit tu) : TU(tu) {}
29a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek};
30ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek
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
40a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek/// \brief Create an opaque string pool used for fast geneneration of strings.
41a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenekvoid *createCXStringPool();
42a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek
43a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek/// \brief Dispose of a string pool.
44a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenekvoid disposeCXStringPool(void *pool);
45a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek
46a60ed47da13393796d8552b9fdca12abbb3eea42Ted KremenekCXStringBuf *getCXStringBuf(CXTranslationUnit TU);
47a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek
48a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenekvoid disposeCXStringBuf(CXStringBuf *buf);
49ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek
50baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenek/// \brief Returns true if the CXString data is managed by a pool.
51baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenekbool isManagedByPool(CXString str);
52baf82b0fdf5c23dff80660add40bb92bd850bba0Ted Kremenek
53ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek}
54ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek}
55ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek
56ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek#endif
57ea834df7cd07d67a77e7dd6e48e8db27464be2fdTed Kremenek
58