Use std::unordered_map instead of hash_map where available.
This commit is contained in:
parent
820777af03
commit
d7923b82ad
|
@ -48,6 +48,7 @@ if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT CMake_NO_CXX_STANDARD)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx11_unordered_map.cmake)
|
||||||
|
|
||||||
# option to set the internal encoding of CMake to UTF-8
|
# option to set the internal encoding of CMake to UTF-8
|
||||||
option(CMAKE_ENCODING_UTF8 "Use UTF-8 encoding internally." ON)
|
option(CMAKE_ENCODING_UTF8 "Use UTF-8 encoding internally." ON)
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
if(CMAKE_CXX_STANDARD AND NOT DEFINED CMake_HAVE_CXX11_UNORDERED_MAP)
|
||||||
|
message(STATUS "Checking if compiler supports C++11 unordered_map")
|
||||||
|
try_compile(CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/cm_cxx11_unordered_map.cpp
|
||||||
|
CMAKE_FLAGS -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
|
||||||
|
OUTPUT_VARIABLE OUTPUT
|
||||||
|
)
|
||||||
|
if(CMake_HAVE_CXX11_UNORDERED_MAP)
|
||||||
|
message(STATUS "Checking if compiler supports C++11 unordered_map - yes")
|
||||||
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
|
"Determining if compiler supports C++11 unordered_map passed with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(STATUS "Checking if compiler supports C++11 unordered_map - no")
|
||||||
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||||
|
"Determining if compiler supports C++11 unordered_map failed with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <unordered_map>
|
||||||
|
int main() {
|
||||||
|
std::unordered_map<int, int> map;
|
||||||
|
map[0] = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -14,4 +14,5 @@
|
||||||
#cmakedefine CMAKE_USE_ELF_PARSER
|
#cmakedefine CMAKE_USE_ELF_PARSER
|
||||||
#cmakedefine CMAKE_USE_MACH_PARSER
|
#cmakedefine CMAKE_USE_MACH_PARSER
|
||||||
#cmakedefine CMAKE_ENCODING_UTF8
|
#cmakedefine CMAKE_ENCODING_UTF8
|
||||||
|
#cmakedefine CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
#define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@"
|
#define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@"
|
||||||
|
|
|
@ -14,8 +14,12 @@
|
||||||
|
|
||||||
#include "cmStandardIncludes.h"
|
#include "cmStandardIncludes.h"
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
#include <unordered_map>
|
||||||
|
#else
|
||||||
#include "cmsys/hash_map.hxx"
|
#include "cmsys/hash_map.hxx"
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
|
@ -65,9 +69,12 @@ private:
|
||||||
};
|
};
|
||||||
static Def NoDef;
|
static Def NoDef;
|
||||||
|
|
||||||
// Local definitions, set or unset.
|
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string, Def> MapType;
|
||||||
|
#else
|
||||||
typedef cmsys::hash_map<std::string, Def> MapType;
|
typedef cmsys::hash_map<std::string, Def> MapType;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
typedef std::map<std::string, Def> MapType;
|
typedef std::map<std::string, Def> MapType;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,8 +13,12 @@
|
||||||
|
|
||||||
// Use a hash table to avoid duplicate file time checks from disk.
|
// Use a hash table to avoid duplicate file time checks from disk.
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
#include <unordered_map>
|
||||||
|
#else
|
||||||
# include <cmsys/hash_map.hxx>
|
# include <cmsys/hash_map.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <cmsys/Encoding.hxx>
|
#include <cmsys/Encoding.hxx>
|
||||||
|
|
||||||
|
@ -47,9 +51,17 @@ private:
|
||||||
{
|
{
|
||||||
return h(s.c_str());
|
return h(s.c_str());
|
||||||
}
|
}
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
std::hash<const char*> h;
|
||||||
|
#else
|
||||||
cmsys::hash<const char*> h;
|
cmsys::hash<const char*> h;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string,
|
||||||
|
#else
|
||||||
typedef cmsys::hash_map<std::string,
|
typedef cmsys::hash_map<std::string,
|
||||||
|
#endif
|
||||||
cmFileTimeComparison_Type, HashString> FileStatsMap;
|
cmFileTimeComparison_Type, HashString> FileStatsMap;
|
||||||
FileStatsMap Files;
|
FileStatsMap Files;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -24,7 +24,11 @@
|
||||||
|
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
# include "cmFileLockPool.h"
|
# include "cmFileLockPool.h"
|
||||||
# include <cmsys/hash_map.hxx>
|
# ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
# include <unordered_map>
|
||||||
|
# else
|
||||||
|
# include <cmsys/hash_map.hxx>
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class cmake;
|
class cmake;
|
||||||
|
@ -429,7 +433,11 @@ protected:
|
||||||
|
|
||||||
// All targets in the entire project.
|
// All targets in the entire project.
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string, cmTarget*> TargetMap;
|
||||||
|
#else
|
||||||
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
|
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
typedef std::map<std::string,cmTarget *> TargetMap;
|
typedef std::map<std::string,cmTarget *> TargetMap;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,7 +31,11 @@
|
||||||
#include <cmsys/auto_ptr.hxx>
|
#include <cmsys/auto_ptr.hxx>
|
||||||
#include <cmsys/RegularExpression.hxx>
|
#include <cmsys/RegularExpression.hxx>
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
# include <cmsys/hash_map.hxx>
|
# ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
# include <unordered_map>
|
||||||
|
# else
|
||||||
|
# include <cmsys/hash_map.hxx>
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
|
@ -868,7 +872,11 @@ protected:
|
||||||
// libraries, classes, and executables
|
// libraries, classes, and executables
|
||||||
mutable cmTargets Targets;
|
mutable cmTargets Targets;
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string, cmTarget*> TargetMap;
|
||||||
|
#else
|
||||||
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
|
typedef cmsys::hash_map<std::string, cmTarget*> TargetMap;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
typedef std::map<std::string, cmTarget*> TargetMap;
|
typedef std::map<std::string, cmTarget*> TargetMap;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1041,7 +1049,11 @@ private:
|
||||||
|
|
||||||
// A map for fast output to input look up.
|
// A map for fast output to input look up.
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string, cmSourceFile*> OutputToSourceMap;
|
||||||
|
#else
|
||||||
typedef cmsys::hash_map<std::string, cmSourceFile*> OutputToSourceMap;
|
typedef cmsys::hash_map<std::string, cmSourceFile*> OutputToSourceMap;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
typedef std::map<std::string, cmSourceFile*> OutputToSourceMap;
|
typedef std::map<std::string, cmSourceFile*> OutputToSourceMap;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,7 +19,11 @@
|
||||||
|
|
||||||
#include <cmsys/auto_ptr.hxx>
|
#include <cmsys/auto_ptr.hxx>
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
#include <cmsys/hash_map.hxx>
|
# ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
# include <unordered_map>
|
||||||
|
# else
|
||||||
|
# include <cmsys/hash_map.hxx>
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CM_FOR_EACH_TARGET_POLICY(F) \
|
#define CM_FOR_EACH_TARGET_POLICY(F) \
|
||||||
|
@ -849,7 +853,11 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||||
typedef cmsys::hash_map<std::string,cmTarget> cmTargets;
|
#ifdef CMake_HAVE_CXX11_UNORDERED_MAP
|
||||||
|
typedef std::unordered_map<std::string, cmTarget> cmTargets;
|
||||||
|
#else
|
||||||
|
typedef cmsys::hash_map<std::string, cmTarget> cmTargets;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
typedef std::map<std::string,cmTarget> cmTargets;
|
typedef std::map<std::string,cmTarget> cmTargets;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue