LocatorFileCache 类
Core::LocatorFileCacheLocatorFileCache 类封装了实现文件过滤器缓存所需的所有责任。 更多信息...
头文件 | #include <LocatorFileCache> |
公共函数
LocatorFileCache() | |
void | invalidate() |
Core::LocatorMatcherTask | matcher() const |
void | setFilePaths(const Utils::FilePaths &filePaths) |
void | setFilePathsGenerator(const Core::LocatorFileCache::FilePathsGenerator &generator) |
void | setGeneratorProvider(const Core::LocatorFileCache::GeneratorProvider &provider) |
静态公共成员
Core::LocatorFileCache::FilePathsGenerator | filePathsGenerator(const Utils::FilePaths &filePaths) |
Utils::FilePaths | processFilePaths(const QFuture<void> &future, const Utils::FilePaths &filePaths, bool hasPathSeparator, const QRegularExpression ®Exp, const Utils::Link &inputLink, Core::LocatorFileCache::MatchedEntries *entries) |
成员函数文档
LocatorFileCache::LocatorFileCache()
构造一个无效的缓存。
在调用 invalidate() 后,或者当调用 setFilePathsGenerator() 时传递的函数为空时,缓存被视为处于无效状态。
可以通过 setGeneratorProvider() 配置缓存的自动验证器。
另请参阅invalidate、setGeneratorProvider、setFilePathsGenerator 和 setFilePaths。
[静态]
Core::LocatorFileCache::FilePathsGenerator LocatorFileCache::filePathsGenerator(const Utils::FilePaths &filePaths)
将 filePaths 列表调整为 LocatorFileCacheGenerator。在实现 GeneratorProvider 时很有用,当无法从非主线程调用文件路径创建时。
void LocatorFileCache::invalidate()
使缓存无效。
为了验证它,请使用 setFilePathsGenerator() 或 setFilePaths()。如果通过 setGeneratorProvider() 设置了 GeneratorProvider,则缓存可能自动验证。
注意:此功能永久使缓存无效,清除所有缓存数据,并移除存储的生成器。存储生成器提供者被保留。
Core::LocatorMatcherTask LocatorFileCache::matcher() const
返回缓存的定位器匹配任务。任务成功完成后,如果需要,则更新此 LocatorFileCache 实例。
此方法应直接由 FilePaths 过滤器使用。FilePaths 过滤器应内部保持一个 LocatorFileCache 实例。确保 LocatorFileCache 实例比正在运行的匹配器存活时间更长,否则在任务完成后缓存不会更新。
在返回的 LocatorMatcherTask 正在运行时,它会检查此缓存是否有效。当缓存无效时,它使用 GeneratorProvider 来更新缓存中的 FilePathsGenerator 并验证缓存。如果失败,则任务不会启动。当缓存有效时,正在运行的任务将重用缓存数据来计算 LocatorMatcherTask 的结果。
任务成功运行后,此缓存会根据最后一次搜索进行更新。如果在此时缓存开始新的搜索,缓存已经被无效化或甚至删除,则忽略在任务成功运行后对缓存的更新。
[静态]
Utils::FilePaths LocatorFileCache::processFilePaths(const QFuture<void> &future, const Utils::FilePaths &filePaths, bool hasPathSeparator, const QRegularExpression ®Exp, const Utils::Link &inputLink, Core::LocatorFileCache::MatchedEntries *entries)
内部和 SpotlightLocatorFilter 使用的帮助函数。
应从非主线程调用。取消操作由传入的 future 控制。此函数定期检查 future 的取消状态,并在检测到取消操作时提前返回。创建按 MatcherType 分类的匹配的 LocatorFilterEntries 列表。这些列表通过 entries 参数返回。
返回所有匹配文件列表。
此函数检查 filePaths 中的每个文件是否与传入的 regExp 匹配。如果是,则使用 hasPathSeparator 和 inputLink 创建一个新的条目,并将其添加到 entries 参数和结果列表中。
void LocatorFileCache::setFilePaths(const Utils::FilePaths &filePaths)
将传入的 filePaths 包装成简单的 FilePathsGenerator,并将其设置为缓存的生成器。
注意:此函数临时使缓存无效,清除所有缓存数据,并将它设置为一个新的有效状态,新生成器用于传入的 filePaths。存储的生成器提供者被保留。
另请参阅:setGeneratorProvider。
void LocatorFileCache::setFilePathsGenerator(const Core::LocatorFileCache::FilePathsGenerator &generator)
设置文件路径生成器。
generator 服务于当相关的 LocatorMatherTask 在单独的线程中运行时返回完整的文件路径输入列表。当计算完整的文件路径列表需要相当多的时间时,这个计算可能会潜在地移动到单独的线程,前提是所有依赖的数据可以在设置此函数时安全地传递给 generator 函数。
传入的生成器始终在非主线程中调用,当运行由matcher()返回的LocatorMatcherTask时。它在不为空或由于新的搜索(无法重用之前搜索的缓存)需要重新生成缓存数据时调用。
生成新的文件路径列表可能是一项耗时任务。为了在不被取消时尽早完成任务,可以使用FilePathsGenerator的future参数。FilePathsGenerator返回用于文件过滤器处理的文件路径的完整列表。
如果可能推迟创建文件路径列表,以便可以从非主线程安全地稍后再进行,基于其他重入性强的/线程安全的数据,应使用此方法。其他相关数据应通过lambda捕获传递。传入的生成器的主体应特别注意确保通过lambda捕获传递的其他数据是重入性的,并且lambda主体是线程安全的。请参阅在CppIncludesFilter实现中生成器的示例用法。
如果不安全地推迟文件路径列表的创建,请使用主线程中准备的准备好列表的setFilePaths。
注意:此函数使缓存无效,清除所有缓存数据。如果传入的生成器非空,则缓存被设置为有效状态。存储的生成器提供商被保留。
另见:filePathsGenerator,setGeneratorProvider和setFilePaths。
void LocatorFileCache::setGeneratorProvider(const Core:: LocatorFileCache::GeneratorProvider &provider)
设置文件路径生成器提供商。
该提供商通过重新创建FilePathsGenerator来自动验证无效的缓存。当Matcher()返回的LocatorMatcherTask被启动时,在线程库缓存无效的情况下,自动验证发生。在这种情况下,存储的提供商将被调用。
传入的提供商函数始终在主线程中调用。如果需要,在开始收集位置过滤器结果的异步任务之前调用它。
当调用此函数时,缓存不会被使无效。每当缓存无效发生时,例如在invalidate,setFilePathsGenerator或setFilePaths被调用时,存储的GeneratorProvider被保留。要清除存储的GeneratorProvider,请使用一个空的函数{}调用此方法。
©2024 Qt公司有限公司。包含在此处的文档贡献是各自所有者的版权。提供的文档是根据由自由软件基金会发布的GNU自由文档许可版本1.3的条款授予的。Qt及其相关标志是Qt公司在芬兰和其他国家/地区的商标。所有其他商标都是其各自所有者的财产。