14 #ifndef LLVM_CLANG_BASIC_FILEMANAGER_H 15 #define LLVM_CLANG_BASIC_FILEMANAGER_H 19 #include "llvm/ADT/DenseMap.h" 20 #include "llvm/ADT/IntrusiveRefCntPtr.h" 21 #include "llvm/ADT/SmallVector.h" 22 #include "llvm/ADT/StringMap.h" 23 #include "llvm/ADT/StringRef.h" 24 #include "llvm/Support/Allocator.h" 25 #include "llvm/Support/ErrorOr.h" 26 #include "llvm/Support/FileSystem.h" 27 #include "llvm/Support/VirtualFileSystem.h" 41 class FileSystemStatCache;
51 StringRef
getName()
const {
return Name; }
63 std::string RealPathName;
68 llvm::sys::fs::UniqueID UniqueID;
74 mutable std::unique_ptr<llvm::vfs::File> File;
84 StringRef
getName()
const {
return Name; }
88 unsigned getUID()
const {
return UID; }
89 const llvm::sys::fs::UniqueID &
getUniqueID()
const {
return UniqueID; }
125 std::map<llvm::sys::fs::UniqueID, DirectoryEntry> UniqueRealDirs;
128 std::map<llvm::sys::fs::UniqueID, FileEntry> UniqueRealFiles;
146 llvm::StringMap<DirectoryEntry*, llvm::BumpPtrAllocator> SeenDirEntries;
152 llvm::StringMap<FileEntry*, llvm::BumpPtrAllocator> SeenFileEntries;
155 llvm::DenseMap<const DirectoryEntry *, llvm::StringRef> CanonicalDirNames;
158 llvm::BumpPtrAllocator CanonicalNameStorage;
162 unsigned NextFileUID;
165 unsigned NumDirLookups, NumFileLookups;
166 unsigned NumDirCacheMisses, NumFileCacheMisses;
169 std::unique_ptr<FileSystemStatCache> StatCache;
171 bool getStatValue(StringRef Path,
FileData &Data,
bool isFile,
172 std::unique_ptr<llvm::vfs::File> *F);
176 void addAncestorsAsVirtualDirs(StringRef Path);
179 void fillRealPathName(
FileEntry *UFE, llvm::StringRef FileName);
193 void setStatCache(std::unique_ptr<FileSystemStatCache> statCache);
196 void clearStatCache();
206 bool CacheFailure =
true);
218 bool CacheFailure =
true);
232 const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
233 time_t ModificationTime);
237 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
238 getBufferForFile(
const FileEntry *Entry,
bool isVolatile =
false,
239 bool ShouldCloseOpenFile =
true);
240 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
241 getBufferForFile(StringRef Filename,
bool isVolatile =
false);
249 bool getNoncachedStatValue(StringRef Path, llvm::vfs::Status &Result);
252 void invalidateCache(
const FileEntry *Entry);
267 void GetUniqueIDMapping(
272 static void modifyFileEntry(
FileEntry *File, off_t Size,
273 time_t ModificationTime);
282 void PrintStats()
const;
287 #endif // LLVM_CLANG_BASIC_FILEMANAGER_H StringRef tryGetRealPathName() const
Implements support for file system lookup, file system caching, and directory search management...
time_t getModificationTime() const
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterat...
const llvm::sys::fs::UniqueID & getUniqueID() const
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
const DirectoryEntry * getDir() const
Return the directory the file lives in.
StringRef getName() const
FileSystemOptions & getFileSystemOpts()
Returns the current file system options.
bool isNamedPipe() const
Check whether the file is a named pipe (and thus can't be opened by the native FileManager methods)...
bool operator<(const FileEntry &RHS) const
Cached information about one file (either on disk or in the virtual file system). ...
const FileSystemOptions & getFileSystemOpts() const
Dataflow Directional Tag Classes.
bool isOpenForTests() const
Defines the clang::FileSystemOptions interface.
Cached information about one directory (either on disk or in the virtual file system).
Keeps track of options that affect how file operations are performed.
IntrusiveRefCntPtr< llvm::vfs::FileSystem > getVirtualFileSystem() const
StringRef getName() const