15 #ifndef LLVM_CLANG_BASIC_FILEMANAGER_H 16 #define LLVM_CLANG_BASIC_FILEMANAGER_H 20 #include "llvm/ADT/DenseMap.h" 21 #include "llvm/ADT/IntrusiveRefCntPtr.h" 22 #include "llvm/ADT/SmallVector.h" 23 #include "llvm/ADT/StringMap.h" 24 #include "llvm/ADT/StringRef.h" 25 #include "llvm/Support/Allocator.h" 26 #include "llvm/Support/ErrorOr.h" 27 #include "llvm/Support/FileSystem.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<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; }
121 std::map<llvm::sys::fs::UniqueID, DirectoryEntry> UniqueRealDirs;
124 std::map<llvm::sys::fs::UniqueID, FileEntry> UniqueRealFiles;
142 llvm::StringMap<DirectoryEntry*, llvm::BumpPtrAllocator> SeenDirEntries;
148 llvm::StringMap<FileEntry*, llvm::BumpPtrAllocator> SeenFileEntries;
151 llvm::DenseMap<const DirectoryEntry *, llvm::StringRef> CanonicalDirNames;
154 llvm::BumpPtrAllocator CanonicalNameStorage;
158 unsigned NextFileUID;
161 unsigned NumDirLookups, NumFileLookups;
162 unsigned NumDirCacheMisses, NumFileCacheMisses;
165 std::unique_ptr<FileSystemStatCache> StatCache;
167 bool getStatValue(StringRef Path,
FileData &Data,
bool isFile,
168 std::unique_ptr<vfs::File> *F);
172 void addAncestorsAsVirtualDirs(StringRef Path);
190 void addStatCache(std::unique_ptr<FileSystemStatCache> statCache,
191 bool AtBeginning =
false);
197 void clearStatCaches();
207 bool CacheFailure =
true);
219 bool CacheFailure =
true);
233 const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
234 time_t ModificationTime);
238 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
239 getBufferForFile(
const FileEntry *Entry,
bool isVolatile =
false,
240 bool ShouldCloseOpenFile =
true);
241 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
242 getBufferForFile(StringRef Filename);
250 bool getNoncachedStatValue(StringRef Path,
254 void invalidateCache(
const FileEntry *Entry);
269 void GetUniqueIDMapping(
274 static void modifyFileEntry(
FileEntry *File, off_t Size,
275 time_t ModificationTime);
284 void PrintStats()
const;
289 #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
Abstract interface for introducing a FileManager cache for 'stat' system calls, which is used by prec...
The result of a status operation.
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.
Defines the virtual file system interface vfs::FileSystem.
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< vfs::FileSystem > getVirtualFileSystem() const
StringRef getName() const