]> git.saurik.com Git - wxWidgets.git/commitdiff
use std[::tr1]::unordered_map if available in wxUSE_STL build (#9532)
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 12 Jun 2008 18:43:41 +0000 (18:43 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 12 Jun 2008 18:43:41 +0000 (18:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54169 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

configure
configure.in
docs/changes.txt
include/wx/hashmap.h
include/wx/hashset.h
setup.h.in

index 2492896d6688a772613ae309ae6c80ab508c0bda..cca60f8bd85610c4e4d590e2626b0d7d3b15e4bb 100755 (executable)
--- 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 <unordered_map>
+_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 <unordered_map>
+                #include <unordered_set>
+int
+main ()
+{
+std::unordered_map<double*, char*> test1;
+                 std::unordered_set<char*> 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 <tr1/unordered_map>
+_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 <tr1/unordered_map>
+                    #include <tr1/unordered_set>
+int
+main ()
+{
+std::tr1::unordered_map<double*, char*> test1;
+                     std::tr1::unordered_set<char*> 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
 
 
 
 
 
+            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
index b0d53b34d8c6eca6894b2a43d65110d6a37201bf..105efec4a96b2165739dd123bed0322f8730e888 100644 (file)
@@ -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 <unordered_map>
+                #include <unordered_set>],
+                [std::unordered_map<double*, char*> test1;
+                 std::unordered_set<char*> 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 <tr1/unordered_map>
+                    #include <tr1/unordered_set>],
+                    [std::tr1::unordered_map<double*, char*> test1;
+                     std::tr1::unordered_set<char*> 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:
index 672870f8872f7d49ea024ccf0e82792dba6dc9a6..0420eade70e969921afbf60d85c0ff6dbdbc6327 100644 (file)
@@ -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):
 
index 34931c5298791d954b87899c8a91e262da6cff15..148dd44de14ed1ab8592ca96570277358843d259 100644 (file)
 #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 <unordered_map>
+    #define WX_HASH_MAP_NAMESPACE std
+#elif defined(HAVE_TR1_UNORDERED_MAP)
+    #include <tr1/unordered_map>
+    #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 <ext/hash_map>
@@ -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
index 1be24e907b4f80c571029599cf1615c92e3a5284..542b522c44da0fef6cc143717216d690b93c1a41 100644 (file)
 
 #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 <unordered_set>
+    #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 <tr1/unordered_set>
+    #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 <ext/hash_set>
index 6849432200d032d66ff865a2b3806f187c1ab85f..ebec1d786a8ace62f7890ea71ebafcff43941a0a 100644 (file)
  */
 #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.
  */