| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <string> | |
| #include <unordered_map> | |
| #include "cmFileTime.h" // IWYU pragma: keep | |
| /** \class cmFileTimeCache | |
| * \brief Caches file modification times in an internal map for fast lookups. | |
| */ | |
| class cmFileTimeCache | |
| { | |
| public: | |
| cmFileTimeCache(); | |
| ~cmFileTimeCache(); | |
| cmFileTimeCache(cmFileTimeCache const&) = delete; | |
| cmFileTimeCache& operator=(cmFileTimeCache const&) = delete; | |
| /** | |
| * @brief Loads the file time from the cache or the file system. | |
| * @return true on success | |
| */ | |
| bool Load(std::string const& fileName, cmFileTime& fileTime); | |
| /** | |
| * @brief Removes a file time from the cache | |
| * @return true if the file was found in the cache and removed | |
| */ | |
| bool Remove(std::string const& fileName); | |
| /** | |
| * @brief Compare file modification times. | |
| * @return true for successful comparison and false for error. | |
| * | |
| * When true is returned, result has -1, 0, +1 for | |
| * f1 older, same, or newer than f2. | |
| */ | |
| bool Compare(std::string const& f1, std::string const& f2, int* result); | |
| /** | |
| * @brief Compare file modification times. | |
| * @return true unless both files exist and have modification times less | |
| * than 1 second apart. | |
| */ | |
| bool DifferS(std::string const& f1, std::string const& f2); | |
| private: | |
| std::unordered_map<std::string, cmFileTime> Cache; | |
| }; |