/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmFileTimeCache.h" #include #include #include cmFileTimeCache::cmFileTimeCache() = default; cmFileTimeCache::~cmFileTimeCache() = default; bool cmFileTimeCache::Load(std::string const& fileName, cmFileTime& fileTime) { // Use the stored time if available. { auto fit = this->Cache.find(fileName); if (fit != this->Cache.end()) { fileTime = fit->second; return true; } } // Read file time from OS if (!fileTime.Load(fileName)) { return false; } // Store file time in cache this->Cache[fileName] = fileTime; return true; } bool cmFileTimeCache::Remove(std::string const& fileName) { return (this->Cache.erase(fileName) != 0); } bool cmFileTimeCache::Compare(std::string const& f1, std::string const& f2, int* result) { // Get the modification time for each file. cmFileTime ft1; cmFileTime ft2; if (this->Load(f1, ft1) && this->Load(f2, ft2)) { // Compare the two modification times. *result = ft1.Compare(ft2); return true; } // No comparison available. Default to the same time. *result = 0; return false; } bool cmFileTimeCache::DifferS(std::string const& f1, std::string const& f2) { // Get the modification time for each file. cmFileTime ft1; cmFileTime ft2; if (this->Load(f1, ft1) && this->Load(f2, ft2)) { // Compare the two modification times. return ft1.DifferS(ft2); } // No comparison available. Default to different times. return true; }