Merge topic 'cm_unordered_map'

1a74e719 Introduce CM_UNORDERED_MAP
This commit is contained in:
Brad King
2016-10-24 10:16:33 -04:00
committed by CMake Topic Stage
7 changed files with 41 additions and 121 deletions

View File

@@ -6,20 +6,11 @@
#include <cmConfigure.h>
#include "cmLinkedTree.h"
#include "cm_unordered_map.hxx"
#include <string>
#include <vector>
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
#include <unordered_map>
#else
#include "cmsys/hash_map.hxx"
#endif
#else
#include <map>
#endif
/** \class cmDefinitions
* \brief Store a scope of variable definitions for CMake language.
*
@@ -85,15 +76,7 @@ private:
};
static Def NoDef;
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, Def> MapType;
#else
typedef cmsys::hash_map<std::string, Def> MapType;
#endif
#else
typedef std::map<std::string, Def> MapType;
#endif
typedef CM_UNORDERED_MAP<std::string, Def> MapType;
MapType Map;
static Def const& GetInternal(const std::string& key, StackIter begin,

View File

@@ -7,14 +7,7 @@
#include <time.h>
#include <utility>
// Use a hash table to avoid duplicate file time checks from disk.
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
#include <unordered_map>
#else
#include <cmsys/hash_map.hxx>
#endif
#endif
#include "cm_unordered_map.hxx"
// Use a platform-specific API to get file times efficiently.
#if !defined(_WIN32) || defined(__CYGWIN__)
@@ -35,27 +28,9 @@ public:
bool FileTimesDiffer(const char* f1, const char* f2);
private:
#if defined(CMAKE_BUILD_WITH_CMAKE)
// Use a hash table to efficiently map from file name to modification time.
class HashString
{
public:
size_t operator()(const std::string& s) const { return h(s.c_str()); }
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
std::hash<const char*> h;
#else
cmsys::hash<const char*> h;
#endif
};
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string,
#else
typedef cmsys::hash_map<std::string,
#endif
cmFileTimeComparison_Type, HashString>
typedef CM_UNORDERED_MAP<std::string, cmFileTimeComparison_Type>
FileStatsMap;
FileStatsMap Files;
#endif
// Internal methods to lookup and compare modification times.
inline bool Stat(const char* fname, cmFileTimeComparison_Type* st);
@@ -68,7 +43,6 @@ private:
bool cmFileTimeComparisonInternal::Stat(const char* fname,
cmFileTimeComparison_Type* st)
{
#if defined(CMAKE_BUILD_WITH_CMAKE)
// Use the stored time if available.
cmFileTimeComparisonInternal::FileStatsMap::iterator fit =
this->Files.find(fname);
@@ -76,7 +50,6 @@ bool cmFileTimeComparisonInternal::Stat(const char* fname,
*st = fit->second;
return true;
}
#endif
#if !defined(_WIN32) || defined(__CYGWIN__)
// POSIX version. Use the stat function.
@@ -97,11 +70,8 @@ bool cmFileTimeComparisonInternal::Stat(const char* fname,
*st = fdata.ftLastWriteTime;
#endif
#if defined(CMAKE_BUILD_WITH_CMAKE)
// Store the time for future use.
this->Files[fname] = *st;
#endif
return true;
}

View File

@@ -12,6 +12,7 @@
#include "cmTarget.h"
#include "cmTargetDepend.h"
#include "cm_codecvt.hxx"
#include "cm_unordered_map.hxx"
#include <iosfwd>
#include <map>
@@ -22,11 +23,6 @@
#if defined(CMAKE_BUILD_WITH_CMAKE)
#include "cmFileLockPool.h"
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
#include <unordered_map>
#else
#include <cmsys/hash_map.hxx>
#endif
#endif
class cmCustomCommandLines;
@@ -468,22 +464,9 @@ protected:
const char* GetPredefinedTargetsFolder();
private:
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, cmTarget*> TargetMap;
typedef std::unordered_map<std::string, cmGeneratorTarget*>
GeneratorTargetMap;
typedef std::unordered_map<std::string, cmMakefile*> MakefileMap;
#else
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
typedef cmsys::hash_map<std::string, cmGeneratorTarget*> GeneratorTargetMap;
typedef cmsys::hash_map<std::string, cmMakefile*> MakefileMap;
#endif
#else
typedef std::map<std::string, cmTarget*> TargetMap;
typedef std::map<std::string, cmGeneratorTarget*> GeneratorTargetMap;
typedef std::map<std::string, cmMakefile*> MakefileMap;
#endif
typedef CM_UNORDERED_MAP<std::string, cmTarget*> TargetMap;
typedef CM_UNORDERED_MAP<std::string, cmGeneratorTarget*> GeneratorTargetMap;
typedef CM_UNORDERED_MAP<std::string, cmMakefile*> MakefileMap;
// Map efficiently from target name to cmTarget instance.
// Do not use this structure for looping over all targets.
// It contains both normal and globally visible imported targets.

View File

@@ -12,6 +12,7 @@
#include "cmStateSnapshot.h"
#include "cmTarget.h"
#include "cmTargetLinkLibraryType.h"
#include "cm_unordered_map.hxx"
#include "cmake.h"
#if defined(CMAKE_BUILD_WITH_CMAKE)
@@ -27,14 +28,6 @@
#include <string>
#include <vector>
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
#include <unordered_map>
#else
#include <cmsys/hash_map.hxx>
#endif
#endif
class cmCommand;
class cmCompiledGeneratorExpression;
class cmCustomCommandLines;
@@ -783,15 +776,6 @@ protected:
// libraries, classes, and executables
mutable cmTargets Targets;
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, cmTarget*> TargetMap;
#else
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
#endif
#else
typedef std::map<std::string, cmTarget*> TargetMap;
#endif
std::map<std::string, std::string> AliasTargets;
std::vector<cmSourceFile*> SourceFiles;
@@ -863,6 +847,7 @@ private:
friend class cmParseFileScope;
std::vector<cmTarget*> ImportedTargetsOwned;
typedef CM_UNORDERED_MAP<std::string, cmTarget*> TargetMap;
TargetMap ImportedTargets;
// Internal policy stack management.
@@ -899,16 +884,8 @@ private:
*/
cmSourceFile* LinearGetSourceFileWithOutput(const std::string& cname) const;
// A map for fast output to input look up.
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, cmSourceFile*> OutputToSourceMap;
#else
typedef cmsys::hash_map<std::string, cmSourceFile*> OutputToSourceMap;
#endif
#else
typedef std::map<std::string, cmSourceFile*> OutputToSourceMap;
#endif
// A map for fast output to input look up.
typedef CM_UNORDERED_MAP<std::string, cmSourceFile*> OutputToSourceMap;
OutputToSourceMap OutputToSource;
void UpdateOutputToSourceMap(std::vector<std::string> const& outputs,

View File

@@ -12,6 +12,7 @@
#include "cmPropertyMap.h"
#include "cmStateTypes.h"
#include "cmTargetLinkLibraryType.h"
#include "cm_unordered_map.hxx"
#include <iosfwd>
#include <map>
@@ -20,14 +21,6 @@
#include <utility>
#include <vector>
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
#include <unordered_map>
#else
#include <cmsys/hash_map.hxx>
#endif
#endif
class cmMakefile;
class cmSourceFile;
class cmGlobalGenerator;
@@ -324,15 +317,7 @@ private:
cmListFileBacktrace Backtrace;
};
#ifdef CMAKE_BUILD_WITH_CMAKE
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, cmTarget> cmTargets;
#else
typedef cmsys::hash_map<std::string, cmTarget> cmTargets;
#endif
#else
typedef std::map<std::string, cmTarget> cmTargets;
#endif
typedef CM_UNORDERED_MAP<std::string, cmTarget> cmTargets;
class cmTargetSet : public std::set<std::string>
{

View File

@@ -0,0 +1,25 @@
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#ifndef CM_UNORDERED_MAP_HXX
#define CM_UNORDERED_MAP_HXX
#include <cmConfigure.h>
#if defined(CMake_HAVE_CXX_UNORDERED_MAP)
#include <unordered_map>
#define CM_UNORDERED_MAP std::unordered_map
#elif defined(CMAKE_BUILD_WITH_CMAKE)
#include <cmsys/hash_map.hxx>
#define CM_UNORDERED_MAP cmsys::hash_map
#else
#include <map>
#define CM_UNORDERED_MAP std::map
#endif
#endif

View File

@@ -27,6 +27,7 @@
#if defined(CMAKE_BUILD_WITH_CMAKE)
#include "cmGraphVizWriter.h"
#include "cmVariableWatch.h"
#include "cm_unordered_map.hxx"
#include <cm_jsoncpp_writer.h>
#endif
@@ -122,11 +123,7 @@ class cmCommand;
namespace {
#if defined(CMAKE_BUILD_WITH_CMAKE)
#ifdef CMake_HAVE_CXX_UNORDERED_MAP
typedef std::unordered_map<std::string, Json::Value> JsonValueMapType;
#else
typedef cmsys::hash_map<std::string, Json::Value> JsonValueMapType;
#endif
typedef CM_UNORDERED_MAP<std::string, Json::Value> JsonValueMapType;
#endif
} // namespace