clang 19.0.0git
FileSystemStatCache.h
Go to the documentation of this file.
1//===- FileSystemStatCache.h - Caching for 'stat' calls ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9/// \file
10/// Defines the FileSystemStatCache interface.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
15#define LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
16
17#include "clang/Basic/LLVM.h"
18#include "llvm/ADT/StringMap.h"
19#include "llvm/ADT/StringRef.h"
20#include "llvm/Support/Allocator.h"
21#include "llvm/Support/FileSystem.h"
22#include "llvm/Support/VirtualFileSystem.h"
23#include <cstdint>
24#include <ctime>
25#include <memory>
26#include <optional>
27#include <string>
28#include <utility>
29
30namespace clang {
31
32/// Abstract interface for introducing a FileManager cache for 'stat'
33/// system calls, which is used by precompiled and pretokenized headers to
34/// improve performance.
36 virtual void anchor();
37
38public:
39 virtual ~FileSystemStatCache() = default;
40
41 /// Get the 'stat' information for the specified path, using the cache
42 /// to accelerate it if possible.
43 ///
44 /// \returns \c true if the path does not exist or \c false if it exists.
45 ///
46 /// If isFile is true, then this lookup should only return success for files
47 /// (not directories). If it is false this lookup should only return
48 /// success for directories (not files). On a successful file lookup, the
49 /// implementation can optionally fill in \p F with a valid \p File object and
50 /// the client guarantees that it will close it.
51 static std::error_code
52 get(StringRef Path, llvm::vfs::Status &Status, bool isFile,
53 std::unique_ptr<llvm::vfs::File> *F,
54 FileSystemStatCache *Cache, llvm::vfs::FileSystem &FS);
55
56protected:
57 // FIXME: The pointer here is a non-owning/optional reference to the
58 // unique_ptr. std::optional<unique_ptr<vfs::File>&> might be nicer, but
59 // Optional needs some work to support references so this isn't possible yet.
60 virtual std::error_code getStat(StringRef Path, llvm::vfs::Status &Status,
61 bool isFile,
62 std::unique_ptr<llvm::vfs::File> *F,
63 llvm::vfs::FileSystem &FS) = 0;
64};
65
66/// A stat "cache" that can be used by FileManager to keep
67/// track of the results of stat() calls that occur throughout the
68/// execution of the front end.
70public:
71 /// The set of stat() calls that have been seen.
72 llvm::StringMap<llvm::vfs::Status, llvm::BumpPtrAllocator> StatCalls;
73
74 using iterator =
75 llvm::StringMap<llvm::vfs::Status,
76 llvm::BumpPtrAllocator>::const_iterator;
77
78 iterator begin() const { return StatCalls.begin(); }
79 iterator end() const { return StatCalls.end(); }
80
81 std::error_code getStat(StringRef Path, llvm::vfs::Status &Status,
82 bool isFile,
83 std::unique_ptr<llvm::vfs::File> *F,
84 llvm::vfs::FileSystem &FS) override;
85};
86
87} // namespace clang
88
89#endif // LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
TypePropertyCache< Private > Cache
Definition: Type.cpp:4307
Abstract interface for introducing a FileManager cache for 'stat' system calls, which is used by prec...
virtual ~FileSystemStatCache()=default
static std::error_code get(StringRef Path, llvm::vfs::Status &Status, bool isFile, std::unique_ptr< llvm::vfs::File > *F, FileSystemStatCache *Cache, llvm::vfs::FileSystem &FS)
Get the 'stat' information for the specified path, using the cache to accelerate it if possible.
virtual std::error_code getStat(StringRef Path, llvm::vfs::Status &Status, bool isFile, std::unique_ptr< llvm::vfs::File > *F, llvm::vfs::FileSystem &FS)=0
A stat "cache" that can be used by FileManager to keep track of the results of stat() calls that occu...
llvm::StringMap< llvm::vfs::Status, llvm::BumpPtrAllocator > StatCalls
The set of stat() calls that have been seen.
std::error_code getStat(StringRef Path, llvm::vfs::Status &Status, bool isFile, std::unique_ptr< llvm::vfs::File > *F, llvm::vfs::FileSystem &FS) override
llvm::StringMap< llvm::vfs::Status, llvm::BumpPtrAllocator >::const_iterator iterator
The JSON file list parser is used to communicate input to InstallAPI.