[reSIProcate] removing hash<T*> from HashMap
I would like to check in a change to HashMap to fix a problem that  
has occasionally bitten me in other code (not resip itself) that uses  
rutil.  HashMap.hxx defines a generic hash<T*> function object that  
allows any code:
HashMap<foo*, bar>
to compile by using the address of the pointer itself as the hash.   
This obviously fails for any key that can exist in multiple places in  
the system.
This isn't an issue in resip itself as far as I can tell---in fact  
the only use of the hash<T*> in the code that I've been able to find  
is for a HashMap<pthread_t,> on macosx.  And in this case, it's easy  
enough to restore the previous behavior by using the HashValue  
macros.  But having that template in the header file allows some code  
to compile that I would really not allow to compile---ever.
Thoughts on whether this change would cause any problems?
Bruce
$svn diff
Index: rutil/Log.cxx
===================================================================
--- rutil/Log.cxx       (revision 7627)
+++ rutil/Log.cxx       (working copy)
@@ -39,6 +39,9 @@
 #ifdef LOG_ENABLE_THREAD_SETTING
+#ifdef __APPLE__
+HashValueImp(pthread_t, (size_t)data);
+#endif
 HashMap<pthread_t, std::pair<Log::ThreadSetting, bool> >  
Log::mThreadToLevel;
 HashMap<int, std::set<pthread_t> > Log::mServiceToThreads;
 pthread_key_t* Log::mLevelKey = (Log::mLevelKey ? Log::mLevelKey :  
new pthread_key_t);
Index: rutil/Log.hxx
===================================================================
--- rutil/Log.hxx       (revision 7627)
+++ rutil/Log.hxx       (working copy)
@@ -21,7 +21,10 @@
 // crashes in the Mac OS native API.
 #if !defined(WIN32) && !defined(TARGET_OS_MAC)
 #define LOG_ENABLE_THREAD_SETTING
+#ifdef __APPLE__
+HashValue(pthread_t);
 #endif
+#endif
 namespace resip
 {
Index: rutil/HashMap.hxx
===================================================================
--- rutil/HashMap.hxx   (revision 7627)
+++ rutil/HashMap.hxx   (working copy)
@@ -10,21 +10,6 @@
 #    define HashMap __gnu_cxx::hash_map
 #    define HashSet __gnu_cxx::hash_set
-// this allows us to hash on a pointer as the key
-namespace HASH_MAP_NAMESPACE
-{
-
-template <class T>
-struct hash<T*>
-{
-      size_t operator()(const T* t) const
-      {
-         return size_t(t);
-      }
-};
-
-}
-
 #define HashValue(type)                           \
 namespace HASH_MAP_NAMESPACE                      \
 {                                                 \