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