mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-30 11:10:06 -05:00
cmFileTimeComparison: Replace anonymous private class with std::map
After the switch to `cmFileTime`, the anonymous private class of `cmFileTimeComparison` held only a `std::map`. This moves the `std::map` to the `cmFileTimeComparison` class itself and removes the instantiation of an anonymous private class.
This commit is contained in:
@@ -6,71 +6,32 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
class cmFileTimeComparisonInternal
|
cmFileTimeComparison::cmFileTimeComparison() = default;
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline bool Load(std::string const& fname, cmFileTime& ftm);
|
|
||||||
inline bool FileTimeCompare(std::string const& f1, std::string const& f2,
|
|
||||||
int* result);
|
|
||||||
|
|
||||||
bool FileTimesDiffer(std::string const& f1, std::string const& f2);
|
cmFileTimeComparison::~cmFileTimeComparison() = default;
|
||||||
|
|
||||||
private:
|
|
||||||
typedef std::unordered_map<std::string, cmFileTime> FileStatsMap;
|
|
||||||
FileStatsMap Files;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool cmFileTimeComparisonInternal::Load(std::string const& fname,
|
|
||||||
cmFileTime& ftm)
|
|
||||||
{
|
|
||||||
// Use the stored time if available.
|
|
||||||
{
|
|
||||||
auto fit = this->Files.find(fname);
|
|
||||||
if (fit != this->Files.end()) {
|
|
||||||
ftm = fit->second;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Read file time from OS
|
|
||||||
if (!ftm.Load(fname)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Store file time in cache
|
|
||||||
this->Files[fname] = ftm;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmFileTimeComparison::cmFileTimeComparison()
|
|
||||||
{
|
|
||||||
this->Internals = new cmFileTimeComparisonInternal;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmFileTimeComparison::~cmFileTimeComparison()
|
|
||||||
{
|
|
||||||
delete this->Internals;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cmFileTimeComparison::Load(std::string const& fileName,
|
bool cmFileTimeComparison::Load(std::string const& fileName,
|
||||||
cmFileTime& fileTime)
|
cmFileTime& fileTime)
|
||||||
{
|
{
|
||||||
return this->Internals->Load(fileName, fileTime);
|
// Use the stored time if available.
|
||||||
|
{
|
||||||
|
auto fit = this->FileTimes.find(fileName);
|
||||||
|
if (fit != this->FileTimes.end()) {
|
||||||
|
fileTime = fit->second;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Read file time from OS
|
||||||
|
if (!fileTime.Load(fileName)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Store file time in cache
|
||||||
|
this->FileTimes[fileName] = fileTime;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmFileTimeComparison::FileTimeCompare(std::string const& f1,
|
bool cmFileTimeComparison::FileTimeCompare(std::string const& f1,
|
||||||
std::string const& f2, int* result)
|
std::string const& f2, int* result)
|
||||||
{
|
|
||||||
return this->Internals->FileTimeCompare(f1, f2, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cmFileTimeComparison::FileTimesDiffer(std::string const& f1,
|
|
||||||
std::string const& f2)
|
|
||||||
{
|
|
||||||
return this->Internals->FileTimesDiffer(f1, f2);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cmFileTimeComparisonInternal::FileTimeCompare(std::string const& f1,
|
|
||||||
std::string const& f2,
|
|
||||||
int* result)
|
|
||||||
{
|
{
|
||||||
// Get the modification time for each file.
|
// Get the modification time for each file.
|
||||||
cmFileTime ft1, ft2;
|
cmFileTime ft1, ft2;
|
||||||
@@ -84,8 +45,8 @@ bool cmFileTimeComparisonInternal::FileTimeCompare(std::string const& f1,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmFileTimeComparisonInternal::FileTimesDiffer(std::string const& f1,
|
bool cmFileTimeComparison::FileTimesDiffer(std::string const& f1,
|
||||||
std::string const& f2)
|
std::string const& f2)
|
||||||
{
|
{
|
||||||
// Get the modification time for each file.
|
// Get the modification time for each file.
|
||||||
cmFileTime ft1, ft2;
|
cmFileTime ft1, ft2;
|
||||||
|
|||||||
@@ -7,8 +7,7 @@
|
|||||||
|
|
||||||
#include "cmFileTime.h"
|
#include "cmFileTime.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
class cmFileTimeComparisonInternal;
|
|
||||||
|
|
||||||
/** \class cmFileTimeComparison
|
/** \class cmFileTimeComparison
|
||||||
* \brief Caches file modification times in an internal map for fast lookups.
|
* \brief Caches file modification times in an internal map for fast lookups.
|
||||||
@@ -45,8 +44,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool FileTimesDiffer(std::string const& f1, std::string const& f2);
|
bool FileTimesDiffer(std::string const& f1, std::string const& f2);
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
cmFileTimeComparisonInternal* Internals;
|
typedef std::unordered_map<std::string, cmFileTime> FileTimeMap;
|
||||||
|
FileTimeMap FileTimes;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user