xref: /freebsd-src/contrib/llvm-project/clang/include/clang-c/CXFile.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1*bdd1243dSDimitry Andric /*===-- clang-c/CXFile.h - C Index File ---------------------------*- C -*-===*\
2*bdd1243dSDimitry Andric |*                                                                            *|
3*bdd1243dSDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4*bdd1243dSDimitry Andric |* Exceptions.                                                                *|
5*bdd1243dSDimitry Andric |* See https://llvm.org/LICENSE.txt for license information.                  *|
6*bdd1243dSDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7*bdd1243dSDimitry Andric |*                                                                            *|
8*bdd1243dSDimitry Andric |*===----------------------------------------------------------------------===*|
9*bdd1243dSDimitry Andric |*                                                                            *|
10*bdd1243dSDimitry Andric |* This header provides the interface to C Index files.                       *|
11*bdd1243dSDimitry Andric |*                                                                            *|
12*bdd1243dSDimitry Andric \*===----------------------------------------------------------------------===*/
13*bdd1243dSDimitry Andric 
14*bdd1243dSDimitry Andric #ifndef LLVM_CLANG_C_CXFILE_H
15*bdd1243dSDimitry Andric #define LLVM_CLANG_C_CXFILE_H
16*bdd1243dSDimitry Andric 
17*bdd1243dSDimitry Andric #include <time.h>
18*bdd1243dSDimitry Andric 
19*bdd1243dSDimitry Andric #include "clang-c/CXString.h"
20*bdd1243dSDimitry Andric #include "clang-c/ExternC.h"
21*bdd1243dSDimitry Andric #include "clang-c/Platform.h"
22*bdd1243dSDimitry Andric 
23*bdd1243dSDimitry Andric LLVM_CLANG_C_EXTERN_C_BEGIN
24*bdd1243dSDimitry Andric 
25*bdd1243dSDimitry Andric /**
26*bdd1243dSDimitry Andric  * \defgroup CINDEX_FILES File manipulation routines
27*bdd1243dSDimitry Andric  *
28*bdd1243dSDimitry Andric  * @{
29*bdd1243dSDimitry Andric  */
30*bdd1243dSDimitry Andric 
31*bdd1243dSDimitry Andric /**
32*bdd1243dSDimitry Andric  * A particular source file that is part of a translation unit.
33*bdd1243dSDimitry Andric  */
34*bdd1243dSDimitry Andric typedef void *CXFile;
35*bdd1243dSDimitry Andric 
36*bdd1243dSDimitry Andric /**
37*bdd1243dSDimitry Andric  * Retrieve the complete file and path name of the given file.
38*bdd1243dSDimitry Andric  */
39*bdd1243dSDimitry Andric CINDEX_LINKAGE CXString clang_getFileName(CXFile SFile);
40*bdd1243dSDimitry Andric 
41*bdd1243dSDimitry Andric /**
42*bdd1243dSDimitry Andric  * Retrieve the last modification time of the given file.
43*bdd1243dSDimitry Andric  */
44*bdd1243dSDimitry Andric CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile);
45*bdd1243dSDimitry Andric 
46*bdd1243dSDimitry Andric /**
47*bdd1243dSDimitry Andric  * Uniquely identifies a CXFile, that refers to the same underlying file,
48*bdd1243dSDimitry Andric  * across an indexing session.
49*bdd1243dSDimitry Andric  */
50*bdd1243dSDimitry Andric typedef struct {
51*bdd1243dSDimitry Andric   unsigned long long data[3];
52*bdd1243dSDimitry Andric } CXFileUniqueID;
53*bdd1243dSDimitry Andric 
54*bdd1243dSDimitry Andric /**
55*bdd1243dSDimitry Andric  * Retrieve the unique ID for the given \c file.
56*bdd1243dSDimitry Andric  *
57*bdd1243dSDimitry Andric  * \param file the file to get the ID for.
58*bdd1243dSDimitry Andric  * \param outID stores the returned CXFileUniqueID.
59*bdd1243dSDimitry Andric  * \returns If there was a failure getting the unique ID, returns non-zero,
60*bdd1243dSDimitry Andric  * otherwise returns 0.
61*bdd1243dSDimitry Andric  */
62*bdd1243dSDimitry Andric CINDEX_LINKAGE int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID);
63*bdd1243dSDimitry Andric 
64*bdd1243dSDimitry Andric /**
65*bdd1243dSDimitry Andric  * Returns non-zero if the \c file1 and \c file2 point to the same file,
66*bdd1243dSDimitry Andric  * or they are both NULL.
67*bdd1243dSDimitry Andric  */
68*bdd1243dSDimitry Andric CINDEX_LINKAGE int clang_File_isEqual(CXFile file1, CXFile file2);
69*bdd1243dSDimitry Andric 
70*bdd1243dSDimitry Andric /**
71*bdd1243dSDimitry Andric  * Returns the real path name of \c file.
72*bdd1243dSDimitry Andric  *
73*bdd1243dSDimitry Andric  * An empty string may be returned. Use \c clang_getFileName() in that case.
74*bdd1243dSDimitry Andric  */
75*bdd1243dSDimitry Andric CINDEX_LINKAGE CXString clang_File_tryGetRealPathName(CXFile file);
76*bdd1243dSDimitry Andric 
77*bdd1243dSDimitry Andric /**
78*bdd1243dSDimitry Andric  * @}
79*bdd1243dSDimitry Andric  */
80*bdd1243dSDimitry Andric 
81*bdd1243dSDimitry Andric LLVM_CLANG_C_EXTERN_C_END
82*bdd1243dSDimitry Andric 
83*bdd1243dSDimitry Andric #endif
84