[llvm-commits] CVS: llvm/include/llvm/ADT/hash_map.in hash_set.in

Reid Spencer reid at x10sys.com
Sat Jan 15 18:58:52 PST 2005



Changes in directory llvm/include/llvm/ADT:

hash_map.in updated: 1.4 -> 1.5
hash_set.in updated: 1.4 -> 1.5
---
Log message:

Provide support for HP/UX aCC compiler's variant of hash_map and hash_set
(RogueWave). These are implemented in rw/stdex/hash_map.h and
rw/stdex/hash_set.h on HP/UX.


---
Diffs of the changes:  (+74 -0)

Index: llvm/include/llvm/ADT/hash_map.in
diff -u llvm/include/llvm/ADT/hash_map.in:1.4 llvm/include/llvm/ADT/hash_map.in:1.5
--- llvm/include/llvm/ADT/hash_map.in:1.4	Mon Oct  4 13:10:14 2004
+++ llvm/include/llvm/ADT/hash_map.in	Sat Jan 15 20:58:39 2005
@@ -23,11 +23,13 @@
 //  2.95.x       ::        hash_map
 //  3.0.4       std      ext/hash_map
 //  3.1      __gnu_cxx   ext/hash_map
+//  HP aCC6     std      stdex/rw/hashm*ap.h
 //
 
 #undef HAVE_GNU_EXT_HASH_MAP
 #undef HAVE_STD_EXT_HASH_MAP
 #undef HAVE_GLOBAL_HASH_MAP
+#undef HAVE_RW_STDEX_HASH_MAP_H
 
 #if HAVE_GNU_EXT_HASH_MAP
 // This is for GCC-3.1+ which puts hash in ext/hash_map
@@ -51,12 +53,51 @@
 #  define HASH_NAMESPACE std
 # endif
 
+// HP aCC doesn't include an SGI-like hash_map. For this platform (or
+// any others using Rogue Wave Software's Tools.h++ library), we wrap
+// around them in std::
+#elif HAVE_RW_STDEX_HASH_MAP_H
+# include <rw/stdex/hashmap.h>
+# include <rw/stdex/hashmmap.h>
+# ifndef HASH_NAMESPACE
+#  define HASH_NAMESPACE std
+# endif
+
 // Give a warning if we couldn't find it, instead of (or in addition to)
 // randomly doing something dumb.
 #else
 # warning "Autoconfiguration failed to find the hash_map header file."
 #endif
 
+// we wrap Rogue Wave Tools.h++ rw_hashmap into something SGI-looking, here:
+#ifdef HAVE_RW_STDEX_HASH_MAP_H
+namespace HASH_NAMESPACE {
+
+template <class DataType> struct hash {
+	unsigned int operator()(const unsigned int& x) const {
+	    return x;
+	}
+};
+
+template <typename KeyType,
+	  typename ValueType,
+	  class _HashFcn = hash<KeyType>,
+	  class _EqualKey = equal_to<KeyType>,
+	  class _A = allocator <ValueType> >
+class hash_map : public rw_hashmap<KeyType, ValueType, class _HashFcn, class _EqualKey, class _A> {
+};
+
+template <typename KeyType,
+	  typename ValueType,
+	  class _HashFcn = hash<KeyType>,
+	  class _EqualKey = equal_to<KeyType>,
+	  class _A = allocator <ValueType> >
+class hash_multimap : public rw_hashmultimap<KeyType, ValueType, class _HashFcn, class _EqualKey, class _A> {
+};
+
+} // end HASH_NAMESPACE;
+#endif
+
 using HASH_NAMESPACE::hash_map;
 using HASH_NAMESPACE::hash_multimap;
 using HASH_NAMESPACE::hash;


Index: llvm/include/llvm/ADT/hash_set.in
diff -u llvm/include/llvm/ADT/hash_set.in:1.4 llvm/include/llvm/ADT/hash_set.in:1.5
--- llvm/include/llvm/ADT/hash_set.in:1.4	Mon Oct  4 13:10:14 2004
+++ llvm/include/llvm/ADT/hash_set.in	Sat Jan 15 20:58:39 2005
@@ -24,11 +24,13 @@
 //  2.95.x       ::        hash_set
 //  3.0.4       std      ext/hash_set
 //  3.1      __gnu_cxx   ext/hash_set
+//  HP aCC6     std      stdex/rw/hashset.h
 //
 
 #undef HAVE_GNU_EXT_HASH_SET
 #undef HAVE_STD_EXT_HASH_SET
 #undef HAVE_GLOBAL_HASH_SET
+#undef HAVE_RW_STDEX_HASH_SET_H
 
 // GCC versions 3.1 and later put hash_set in <ext/hash_set> and in
 // the __gnu_cxx namespace.
@@ -53,12 +55,43 @@
 #  define HASH_NAMESPACE std
 # endif
 
+// HP aCC doesn't include an SGI-like hash_set. For this platform (or
+// any others using Rogue Wave Software's Tools.h++ library), we wrap
+// around them in std::
+#elif HAVE_RW_STDEX_HASH_SET_H
+# include <rw/stdex/hashset.h>
+# ifndef HASH_NAMESPACE
+#  define HASH_NAMESPACE std
+# endif
+
 // Give a warning if we couldn't find it, instead of (or in addition to)
 // randomly doing something dumb.
 #else
 # warning "Autoconfiguration failed to find the hash_set header file."
 #endif
 
+// we wrap Rogue Wave Tools.h++ rw_hashset into something SGI-looking, here:
+#ifdef HAVE_RW_STDEX_HASH_SET_H
+namespace HASH_NAMESPACE {
+
+/*
+template <class DataType> struct hash {
+    unsigned int operator()(const unsigned int& x) const {
+	return x;
+    }
+};
+*/
+
+template <typename ValueType,
+	  class _HashFcn = hash<ValueType>,
+	  class _EqualKey = equal_to<ValueType>,
+	  class _A = allocator <ValueType> >
+class hash_set : public rw_hashset<ValueType, class _HashFcn, class _EqualKey, class _A> {
+};
+
+} // end HASH_NAMESPACE;
+#endif
+
 using HASH_NAMESPACE::hash_set;
 using HASH_NAMESPACE::hash;
 






More information about the llvm-commits mailing list