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