From f380544a4c4fccec74ef1238110b5c856412d773 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 12 Jun 2008 18:43:41 +0000 Subject: [PATCH] use std[::tr1]::unordered_map if available in wxUSE_STL build (#9532) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54169 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- configure | 319 +++++++++++++++++++++++++++++++++++-------- configure.in | 43 ++++++ docs/changes.txt | 1 + include/wx/hashmap.h | 28 +++- include/wx/hashset.h | 20 ++- setup.h.in | 20 +++ 6 files changed, 367 insertions(+), 64 deletions(-) diff --git a/configure b/configure index 2492896d66..cca60f8bd8 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Id: configure.in 53842 2008-05-30 13:35:30Z VZ . +# From configure.in Id: configure.in 53976 2008-06-04 10:53:02Z SN . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.0. # @@ -861,6 +861,7 @@ COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1 COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1 COND_PLATFORM_MACOSX_0_USE_SOVERSION_1 COND_PLATFORM_MACOSX_1 +COND_PLATFORM_MACOSX_1_PLATFORM_MSDOS_0 COND_PLATFORM_MACOSX_1_TOOLKIT_ COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA COND_PLATFORM_MACOSX_1_TOOLKIT_GTK @@ -869,6 +870,7 @@ COND_PLATFORM_MACOSX_1_TOOLKIT_MAC_USE_GUI_1 COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF COND_PLATFORM_MACOSX_1_TOOLKIT_X11 COND_PLATFORM_MACOSX_1_USE_GUI_1 +COND_PLATFORM_MACOSX_1_USE_OPENGL_1 COND_PLATFORM_MACOSX_1_USE_SOVERSION_1 COND_PLATFORM_MACOS_1 COND_PLATFORM_MAC_0 @@ -1719,7 +1721,6 @@ Optional Features: --enable-textfile use wxTextFile class --enable-timer use wxTimer class --enable-variant use wxVariant class - --enable-weakref make wxEvtHandler trackable with wxWeakRef<> --enable-zipstream use wxZip streams --enable-url use wxURL class --enable-protocol use wxProtocol class @@ -7816,50 +7817,6 @@ fi echo "${ECHO_T}$result" >&6; } - enablestring= - defaultval=$wxUSE_ALL_FEATURES - if test -z "$defaultval"; then - if test x"$enablestring" = xdisable; then - defaultval=yes - else - defaultval=no - fi - fi - - { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-weakref" >&5 -echo $ECHO_N "checking for --${enablestring:-enable}-weakref... $ECHO_C" >&6; } - # Check whether --enable-weakref was given. -if test "${enable_weakref+set}" = set; then - enableval=$enable_weakref; - if test "$enableval" = yes; then - wx_cv_use_weakref='wxUSE_WEAKREF=yes' - else - wx_cv_use_weakref='wxUSE_WEAKREF=no' - fi - -else - - wx_cv_use_weakref='wxUSE_WEAKREF=${'DEFAULT_wxUSE_WEAKREF":-$defaultval}" - -fi - - - eval "$wx_cv_use_weakref" - - if test x"$enablestring" = xdisable; then - if test $wxUSE_WEAKREF = yes; then - result=no - else - result=yes - fi - else - result=$wxUSE_WEAKREF - fi - - { echo "$as_me:$LINENO: result: $result" >&5 -echo "${ECHO_T}$result" >&6; } - - enablestring= defaultval=$wxUSE_ALL_FEATURES if test -z "$defaultval"; then @@ -24968,6 +24925,237 @@ _ACEOF _ACEOF fi + + { echo "$as_me:$LINENO: checking for unordered_map" >&5 +echo $ECHO_N "checking for unordered_map... $ECHO_C" >&6; } +if test "${ac_cv_header_unordered_map+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + + +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_unordered_map=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_unordered_map=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_unordered_map" >&5 +echo "${ECHO_T}$ac_cv_header_unordered_map" >&6; } +if test $ac_cv_header_unordered_map = yes; then + { echo "$as_me:$LINENO: checking for unordered_map and unordered_set in std" >&5 +echo $ECHO_N "checking for unordered_map and unordered_set in std... $ECHO_C" >&6; } +if test "${wx_cv_class_stdunorderedmapset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include +int +main () +{ +std::unordered_map test1; + std::unordered_set test2; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + wx_cv_class_stdunorderedmapset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + wx_cv_class_stdunorderedmapset=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ echo "$as_me:$LINENO: result: $wx_cv_class_stdunorderedmapset" >&5 +echo "${ECHO_T}$wx_cv_class_stdunorderedmapset" >&6; } +fi + + + + if test "$wx_cv_class_stdunorderedmapset" = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STD_UNORDERED_MAP 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define HAVE_STD_UNORDERED_SET 1 +_ACEOF + + else + { echo "$as_me:$LINENO: checking for tr1/unordered_map" >&5 +echo $ECHO_N "checking for tr1/unordered_map... $ECHO_C" >&6; } +if test "${ac_cv_header_tr1_unordered_map+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + + +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_tr1_unordered_map=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_tr1_unordered_map=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_tr1_unordered_map" >&5 +echo "${ECHO_T}$ac_cv_header_tr1_unordered_map" >&6; } +if test $ac_cv_header_tr1_unordered_map = yes; then + { echo "$as_me:$LINENO: checking for unordered_map and unordered_set in std::tr1" >&5 +echo $ECHO_N "checking for unordered_map and unordered_set in std::tr1... $ECHO_C" >&6; } +if test "${wx_cv_class_tr1unorderedmapset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include +int +main () +{ +std::tr1::unordered_map test1; + std::tr1::unordered_set test2; + #if defined(__GNUC__) && (__GNUC__==4) && (__GNUC_MINOR__<2) + #error can't use unordered_{map,set} with gcc-4.[01]: http://gcc.gnu.org/PR24389 + #endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + wx_cv_class_tr1unorderedmapset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + wx_cv_class_tr1unorderedmapset=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ echo "$as_me:$LINENO: result: $wx_cv_class_tr1unorderedmapset" >&5 +echo "${ECHO_T}$wx_cv_class_tr1unorderedmapset" >&6; } +fi + + + + if test "$wx_cv_class_tr1unorderedmapset" = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_TR1_UNORDERED_MAP 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define HAVE_TR1_UNORDERED_SET 1 +_ACEOF + + fi + fi fi @@ -27881,8 +28069,14 @@ fi + case "${host}" in + x86_64-*-mingw32* ) + LIBS="$LIBS -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lwctl3d32 -ladvapi32 -lwsock32 -lgdi32" + ;; + * ) LIBS="$LIBS -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32" - + ;; + esac if test "$wxUSE_ACCESSIBILITY" = "yes" ; then LIBS="$LIBS -loleacc" fi @@ -39941,6 +40135,8 @@ echo "$as_me: WARNING: wxMutex won't be recursive on this platform" >&2;} else if test "$wxUSE_THREADS" = "yes" ; then case "${host}" in + x86_64-*-mingw32* ) + ;; *-*-mingw32* ) { echo "$as_me:$LINENO: checking if compiler supports -mthreads" >&5 echo $ECHO_N "checking if compiler supports -mthreads... $ECHO_C" >&6; } @@ -44578,13 +44774,6 @@ _ACEOF fi -if test "$wxUSE_WEAKREF" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define wxUSE_WEAKREF 1 -_ACEOF - -fi - if test "$wxUSE_FS_INET" = "yes"; then cat >>confdefs.h <<\_ACEOF #define wxUSE_FS_INET 1 @@ -49416,6 +49605,11 @@ EOF COND_PLATFORM_MACOSX_1="" fi + COND_PLATFORM_MACOSX_1_PLATFORM_MSDOS_0="#" + if test "x$PLATFORM_MACOSX" = "x1" -a "x$PLATFORM_MSDOS" = "x0" ; then + COND_PLATFORM_MACOSX_1_PLATFORM_MSDOS_0="" + fi + COND_PLATFORM_MACOSX_1_TOOLKIT_="#" if test "x$PLATFORM_MACOSX" = "x1" -a "x$TOOLKIT" = "x" ; then COND_PLATFORM_MACOSX_1_TOOLKIT_="" @@ -49456,6 +49650,11 @@ EOF COND_PLATFORM_MACOSX_1_USE_GUI_1="" fi + COND_PLATFORM_MACOSX_1_USE_OPENGL_1="#" + if test "x$PLATFORM_MACOSX" = "x1" -a "x$USE_OPENGL" = "x1" ; then + COND_PLATFORM_MACOSX_1_USE_OPENGL_1="" + fi + COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="#" if test "x$PLATFORM_MACOSX" = "x1" -a "x$USE_SOVERSION" = "x1" ; then COND_PLATFORM_MACOSX_1_USE_SOVERSION_1="" @@ -51411,6 +51610,7 @@ COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1!$COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1$a COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1!$COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1$ac_delim COND_PLATFORM_MACOSX_0_USE_SOVERSION_1!$COND_PLATFORM_MACOSX_0_USE_SOVERSION_1$ac_delim COND_PLATFORM_MACOSX_1!$COND_PLATFORM_MACOSX_1$ac_delim +COND_PLATFORM_MACOSX_1_PLATFORM_MSDOS_0!$COND_PLATFORM_MACOSX_1_PLATFORM_MSDOS_0$ac_delim COND_PLATFORM_MACOSX_1_TOOLKIT_!$COND_PLATFORM_MACOSX_1_TOOLKIT_$ac_delim COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA!$COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA$ac_delim COND_PLATFORM_MACOSX_1_TOOLKIT_GTK!$COND_PLATFORM_MACOSX_1_TOOLKIT_GTK$ac_delim @@ -51419,6 +51619,7 @@ COND_PLATFORM_MACOSX_1_TOOLKIT_MAC_USE_GUI_1!$COND_PLATFORM_MACOSX_1_TOOLKIT_MAC COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF!$COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF$ac_delim COND_PLATFORM_MACOSX_1_TOOLKIT_X11!$COND_PLATFORM_MACOSX_1_TOOLKIT_X11$ac_delim COND_PLATFORM_MACOSX_1_USE_GUI_1!$COND_PLATFORM_MACOSX_1_USE_GUI_1$ac_delim +COND_PLATFORM_MACOSX_1_USE_OPENGL_1!$COND_PLATFORM_MACOSX_1_USE_OPENGL_1$ac_delim COND_PLATFORM_MACOSX_1_USE_SOVERSION_1!$COND_PLATFORM_MACOSX_1_USE_SOVERSION_1$ac_delim COND_PLATFORM_MACOS_1!$COND_PLATFORM_MACOS_1$ac_delim COND_PLATFORM_MAC_0!$COND_PLATFORM_MAC_0$ac_delim @@ -51455,8 +51656,6 @@ COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0!$COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0$ac_ COND_TOOLKIT_DFB!$COND_TOOLKIT_DFB$ac_delim COND_TOOLKIT_DFB_USE_GUI_1!$COND_TOOLKIT_DFB_USE_GUI_1$ac_delim COND_TOOLKIT_GTK!$COND_TOOLKIT_GTK$ac_delim -COND_TOOLKIT_GTK_TOOLKIT_VERSION_!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_$ac_delim -COND_TOOLKIT_GTK_TOOLKIT_VERSION_2!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -51498,6 +51697,8 @@ _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +COND_TOOLKIT_GTK_TOOLKIT_VERSION_!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_$ac_delim +COND_TOOLKIT_GTK_TOOLKIT_VERSION_2!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2$ac_delim COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1$ac_delim COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0$ac_delim COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0$ac_delim @@ -51593,8 +51794,6 @@ OPENGL_LIBS!$OPENGL_LIBS$ac_delim DMALLOC_LIBS!$DMALLOC_LIBS$ac_delim WX_VERSION_TAG!$WX_VERSION_TAG$ac_delim RESCOMP!$RESCOMP$ac_delim -RESFLAGS!$RESFLAGS$ac_delim -RESPROGRAMOBJ!$RESPROGRAMOBJ$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -51636,6 +51835,8 @@ _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +RESFLAGS!$RESFLAGS$ac_delim +RESPROGRAMOBJ!$RESPROGRAMOBJ$ac_delim WX_RESOURCES_MACOSX_ASCII!$WX_RESOURCES_MACOSX_ASCII$ac_delim WX_RESOURCES_MACOSX_DATA!$WX_RESOURCES_MACOSX_DATA$ac_delim LIBWXMACRES!$LIBWXMACRES$ac_delim @@ -51648,7 +51849,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 10; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 12; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.in b/configure.in index b0d53b34d8..105efec4a9 100644 --- a/configure.in +++ b/configure.in @@ -1954,6 +1954,49 @@ if test "$wxUSE_STL" = "yes"; then AC_DEFINE(HAVE_EXT_HASH_MAP) AC_DEFINE(HAVE_GNU_CXX_HASH_MAP) fi + + AC_CHECK_HEADER([unordered_map], + [AC_CACHE_CHECK([for unordered_map and unordered_set in std], + wx_cv_class_stdunorderedmapset, + [AC_TRY_COMPILE([#include + #include ], + [std::unordered_map test1; + std::unordered_set test2;], + wx_cv_class_stdunorderedmapset=yes, + wx_cv_class_stdunorderedmapset=no) + ] + )], + [], + [ ] + ) + + if test "$wx_cv_class_stdunorderedmapset" = yes; then + AC_DEFINE(HAVE_STD_UNORDERED_MAP) + AC_DEFINE(HAVE_STD_UNORDERED_SET) + else + AC_CHECK_HEADER([tr1/unordered_map], + [AC_CACHE_CHECK([for unordered_map and unordered_set in std::tr1], + wx_cv_class_tr1unorderedmapset, + [AC_TRY_COMPILE([#include + #include ], + [std::tr1::unordered_map test1; + std::tr1::unordered_set test2; + #if defined(__GNUC__) && (__GNUC__==4) && (__GNUC_MINOR__<2) + #error can't use unordered_{map,set} with gcc-4.[01]: http://gcc.gnu.org/PR24389 + #endif], + wx_cv_class_tr1unorderedmapset=yes, + wx_cv_class_tr1unorderedmapset=no) + ] + )], + [], + [ ] + ) + + if test "$wx_cv_class_tr1unorderedmapset" = yes; then + AC_DEFINE(HAVE_TR1_UNORDERED_MAP) + AC_DEFINE(HAVE_TR1_UNORDERED_SET) + fi + fi fi dnl check for atomic operations builtins for wx/atomic.h: diff --git a/docs/changes.txt b/docs/changes.txt index 672870f887..0420eade70 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -284,6 +284,7 @@ All: - Added wxCmdLineParser::AddUsageText() (Marcin 'Malcom' Malich). - Fix reading/writing UTF-7-encoded text streams. - Corrected bug in wxTimeSpan::IsShorterThan() for equal time spans. +- Use std::unordered_{map,set} for wxHashMap/Set if available (Jan van Dijk). All (Unix): diff --git a/include/wx/hashmap.h b/include/wx/hashmap.h index 34931c5298..148dd44de1 100644 --- a/include/wx/hashmap.h +++ b/include/wx/hashmap.h @@ -15,12 +15,34 @@ #include "wx/string.h" #include "wx/wxcrt.h" +// In wxUSE_STL build we prefer to use the standard hash map class but it can +// be either in non-standard hash_map header (old g++ and some other STL +// implementations) or in C++0x standard unordered_map which can in turn be +// available either in std::tr1 or std namespace itself +// +// To summarize: if std::unordered_map is available use it, otherwise use tr1 +// and finally fall back to non-standard hash_map + #if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \ && (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP)) #define HAVE_STL_HASH_MAP #endif -#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) +#if wxUSE_STL && \ + (defined(HAVE_STD_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP)) + +#if defined(HAVE_STD_UNORDERED_MAP) + #include + #define WX_HASH_MAP_NAMESPACE std +#elif defined(HAVE_TR1_UNORDERED_MAP) + #include + #define WX_HASH_MAP_NAMESPACE std::tr1 +#endif + +#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ + typedef WX_HASH_MAP_NAMESPACE::unordered_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME + +#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP) #include @@ -37,9 +59,7 @@ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME -#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) - - +#else // !wxUSE_STL || no std::{hash,unordered}_map class available #ifdef __WXWINCE__ typedef int ptrdiff_t; #else diff --git a/include/wx/hashset.h b/include/wx/hashset.h index 1be24e907b..542b522c44 100644 --- a/include/wx/hashset.h +++ b/include/wx/hashset.h @@ -14,7 +14,25 @@ #include "wx/hashmap.h" -#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) +// see comment in wx/hashmap.h which also applies to different standard hash +// set classes + +#if wxUSE_STL && \ + (defined(HAVE_STD_UNORDERED_SET) || defined(HAVE_TR1_UNORDERED_SET)) + +#if defined(HAVE_STD_UNORDERED_SET) + #include + #define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ + typedef std::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME +#elif defined(HAVE_TR1_UNORDERED_SET) + #include + #define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ + typedef std::tr1::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME +#else +#error Update this code: unordered_set is available, but I do not know where. +#endif + +#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP) #include diff --git a/setup.h.in b/setup.h.in index 6849432200..ebec1d786a 100644 --- a/setup.h.in +++ b/setup.h.in @@ -672,6 +672,26 @@ */ #undef HAVE_GNU_CXX_HASH_MAP +/* + * Define if your compiler has std::unordered_map + */ +#undef HAVE_STD_UNORDERED_MAP + +/* + * Define if your compiler has std::unordered_set + */ +#undef HAVE_STD_UNORDERED_SET + +/* + * Define if your compiler has std::tr1::unordered_map + */ +#undef HAVE_TR1_UNORDERED_MAP + +/* + * Define if your compiler has std::tr1::unordered_set + */ +#undef HAVE_TR1_UNORDERED_SET + /* * Define if the compiler supports simple visibility declarations. */ -- 2.45.2