OSDN Git Service

2006-10-02 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / include / ext / pb_ds / detail / hash_fn / ranged_hash_fn.hpp
index 5d52485..179e593 100644 (file)
@@ -41,8 +41,8 @@
 
 /**
  * @file ranged_hash_fn.hpp
- * Contains a unified ranged hash functor, allowing the hash tables to deal with
- *    a single class for ranged hashing.
+ * Contains a unified ranged hash functor, allowing the hash tables
+ * to deal with a single class for ranged hashing.
  */
 
 #ifndef PB_DS_RANGED_HASH_FN_HPP
@@ -56,96 +56,67 @@ namespace pb_ds
 {
   namespace detail
   {
-
-    template<typename Key,
-            class Hash_Fn,
-            class Allocator,
-            class Comb_Hash_Fn,
-            bool Store_Hash>
+    template<typename Key, typename Hash_Fn, typename Allocator, 
+            typename Comb_Hash_Fn, bool Store_Hash>
     class ranged_hash_fn;
 
-#define PB_DS_CLASS_T_DEC                                              \
-    template<                                                          \
-                                               typename Key,           \
-                                               class Hash_Fn,          \
-                                               class Allocator,        \
-                                               class Comb_Hash_Fn>
-
-#define PB_DS_CLASS_C_DEC                                      \
-    ranged_hash_fn<                                            \
-                                               Key,            \
-                                               Hash_Fn,        \
-                                               Allocator,      \
-                                               Comb_Hash_Fn,   \
-                                               false>
+#define PB_DS_CLASS_T_DEC \
+    template<typename Key, typename Hash_Fn, typename Allocator, \
+            typename Comb_Hash_Fn>
+
+#define PB_DS_CLASS_C_DEC \
+    ranged_hash_fn<Key,        Hash_Fn, Allocator, Comb_Hash_Fn, false>
 
     /**
-     * Specialization 1- The client supplies a hash function and a ranged
-     *    hash function, and requests that hash values not be stored.
+     * Specialization 1
+     * The client supplies a hash function and a ranged hash function,
+     * and requests that hash values not be stored.
      **/
-    template<typename Key,
-            class Hash_Fn,
-            class Allocator,
-            class Comb_Hash_Fn>
-    class ranged_hash_fn<
-      Key,
-      Hash_Fn,
-      Allocator,
-      Comb_Hash_Fn,
-      false> : public Hash_Fn,
-              public Comb_Hash_Fn
+    template<typename Key, typename Hash_Fn, typename Allocator, 
+            typename Comb_Hash_Fn>
+    class ranged_hash_fn< Key, Hash_Fn, Allocator, Comb_Hash_Fn, false> 
+    : public Hash_Fn, public Comb_Hash_Fn
     {
     protected:
       typedef typename Allocator::size_type size_type;
-
       typedef Hash_Fn hash_fn_base;
-
       typedef Comb_Hash_Fn comb_hash_fn_base;
-
       typedef typename Allocator::template rebind< Key>::other key_allocator;
-
       typedef typename key_allocator::const_reference const_key_reference;
 
-    protected:
-      ranged_hash_fn(size_type size);
+      ranged_hash_fn(size_type);
 
-      ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn);
+      ranged_hash_fn(size_type, const Hash_Fn&);
 
-      ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const Hash_Fn&, const Comb_Hash_Fn&);
 
       void
-      swap(PB_DS_CLASS_C_DEC& other);
+      swap(PB_DS_CLASS_C_DEC&);
 
       void
-      notify_resized(size_type size);
+      notify_resized(size_type);
 
       inline size_type
-      operator()(const_key_reference r_key) const;
+      operator()(const_key_reference) const;
     };
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
     ranged_hash_fn(size_type size)
-    {
-      Comb_Hash_Fn::notify_resized(size);
-    }
+    { Comb_Hash_Fn::notify_resized(size); }
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn) :
-      Hash_Fn(r_hash_fn)
-    {
-      Comb_Hash_Fn::notify_resized(size);
-    }
+    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn) 
+    : Hash_Fn(r_hash_fn)
+    { Comb_Hash_Fn::notify_resized(size); }
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn) :
-      Hash_Fn(r_hash_fn),
-      Comb_Hash_Fn(r_comb_hash_fn)
-    {
-      comb_hash_fn_base::notify_resized(size);
-    }
+    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, 
+                  const Comb_Hash_Fn& r_comb_hash_fn) 
+    : Hash_Fn(r_hash_fn), Comb_Hash_Fn(r_comb_hash_fn)
+    { comb_hash_fn_base::notify_resized(size); }
 
     PB_DS_CLASS_T_DEC
     void
@@ -153,7 +124,6 @@ namespace pb_ds
     swap(PB_DS_CLASS_C_DEC& other)
     {
       comb_hash_fn_base::swap(other);
-
       std::swap((Hash_Fn& )(*this), (Hash_Fn& )other);
     }
 
@@ -161,85 +131,59 @@ namespace pb_ds
     void
     PB_DS_CLASS_C_DEC::
     notify_resized(size_type size)
-    {
-      comb_hash_fn_base::notify_resized(size);
-    }
+    { comb_hash_fn_base::notify_resized(size); }
 
     PB_DS_CLASS_T_DEC
     inline typename PB_DS_CLASS_C_DEC::size_type
     PB_DS_CLASS_C_DEC::
     operator()(const_key_reference r_key) const
-    {
-      return (comb_hash_fn_base::operator()(
-                                           hash_fn_base::operator()(r_key)));
-    }
+    { return (comb_hash_fn_base::operator()(hash_fn_base::operator()(r_key)));}
 
 #undef PB_DS_CLASS_T_DEC
 #undef PB_DS_CLASS_C_DEC
 
-#define PB_DS_CLASS_T_DEC                                              \
-    template<                                                          \
-                                               typename Key,           \
-                                               class Hash_Fn,          \
-                                               class Allocator,        \
-                                               class Comb_Hash_Fn>
-
-#define PB_DS_CLASS_C_DEC                                      \
-    ranged_hash_fn<                                            \
-                                               Key,            \
-                                               Hash_Fn,        \
-                                               Allocator,      \
-                                               Comb_Hash_Fn,   \
-                                               true>
+#define PB_DS_CLASS_T_DEC \
+    template<typename Key, typename Hash_Fn, typename Allocator, \
+            typename Comb_Hash_Fn>
+
+#define PB_DS_CLASS_C_DEC \
+    ranged_hash_fn<Key,Hash_Fn,        Allocator, Comb_Hash_Fn, true>
 
     /**
-     * Specialization 2- The client supplies a hash function and a ranged
-     *    hash function, and requests that hash values be stored.
+     * Specialization 2
+     * The client supplies a hash function and a ranged hash function,
+     * and requests that hash values be stored.
      **/
-    template<typename Key,
-            class Hash_Fn,
-            class Allocator,
-            class Comb_Hash_Fn>
-    class ranged_hash_fn<
-      Key,
-      Hash_Fn,
-      Allocator,
-      Comb_Hash_Fn,
-      true> :
-      public Hash_Fn,
-      public Comb_Hash_Fn
+    template<typename Key, typename Hash_Fn, typename Allocator,
+            typename Comb_Hash_Fn>
+    class ranged_hash_fn<Key, Hash_Fn, Allocator, Comb_Hash_Fn, true> 
+    : public Hash_Fn, public Comb_Hash_Fn
     {
     protected:
       typedef typename Allocator::size_type size_type;
-
-      typedef typename comp_hash_< size_type>::comp_hash comp_hash;
-
+      typedef std::pair<size_type, size_type> comp_hash;
       typedef Hash_Fn hash_fn_base;
-
       typedef Comb_Hash_Fn comb_hash_fn_base;
-
-      typedef typename Allocator::template rebind< Key>::other key_allocator;
-
+      typedef typename Allocator::template rebind<Key>::other key_allocator;
       typedef typename key_allocator::const_reference const_key_reference;
 
-    protected:
-      ranged_hash_fn(size_type size);
+      ranged_hash_fn(size_type);
 
-      ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn);
+      ranged_hash_fn(size_type, const Hash_Fn&);
 
-      ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const Hash_Fn&, const Comb_Hash_Fn&);
 
       void
-      swap(PB_DS_CLASS_C_DEC& other);
+      swap(PB_DS_CLASS_C_DEC&);
 
       void
-      notify_resized(size_type size);
+      notify_resized(size_type);
 
       inline comp_hash
-      operator()(const_key_reference r_key) const;
+      operator()(const_key_reference) const;
 
       inline comp_hash
-      operator()(const_key_reference r_key, size_type hash) const;
+      operator()(const_key_reference, size_type) const;
     };
 
     PB_DS_CLASS_T_DEC
@@ -255,9 +199,9 @@ namespace pb_ds
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn) :
-      Hash_Fn(r_hash_fn),
-      Comb_Hash_Fn(r_comb_hash_fn)
+    ranged_hash_fn(size_type size, const Hash_Fn& r_hash_fn, 
+                  const Comb_Hash_Fn& r_comb_hash_fn) 
+    : Hash_Fn(r_hash_fn), Comb_Hash_Fn(r_comb_hash_fn)
     { comb_hash_fn_base::notify_resized(size); }
 
     PB_DS_CLASS_T_DEC
@@ -301,48 +245,34 @@ namespace pb_ds
 #undef PB_DS_CLASS_T_DEC
 #undef PB_DS_CLASS_C_DEC
 
-#define PB_DS_CLASS_T_DEC                                      \
-    template<typename Key, class Allocator, class Comb_Hash_Fn>
+#define PB_DS_CLASS_T_DEC \
+    template<typename Key, typename Allocator, typename Comb_Hash_Fn>
 
-#define PB_DS_CLASS_C_DEC                                      \
-    ranged_hash_fn<                                            \
-                                               Key,            \
-                                               null_hash_fn,   \
-                                               Allocator,      \
-                                               Comb_Hash_Fn,   \
-                                               false>
+#define PB_DS_CLASS_C_DEC \
+    ranged_hash_fn<Key,        null_hash_fn, Allocator, Comb_Hash_Fn, false>
 
     /**
-     * Specialization 3- The client does not supply a hash function
-     *    (by specifying null_hash_fn as the Hash_Fn parameter),
-     *    and requests that hash values not be stored.
-
-    **/
-    template<typename Key, class Allocator, class Comb_Hash_Fn>
-    class ranged_hash_fn<
-      Key,
-      null_hash_fn,
-      Allocator,
-      Comb_Hash_Fn,
-      false> :
-      public null_hash_fn,
-      public Comb_Hash_Fn
+     * Specialization 3
+     * The client does not supply a hash function (by specifying
+     * null_hash_fn as the Hash_Fn parameter), and requests that hash
+     * values not be stored.
+     **/
+    template<typename Key, typename Allocator, typename Comb_Hash_Fn>
+    class ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, false> 
+    : public null_hash_fn, public Comb_Hash_Fn
     {
     protected:
-
       typedef typename Allocator::size_type size_type;
-
       typedef Comb_Hash_Fn comb_hash_fn_base;
 
-    protected:
-      ranged_hash_fn(size_type size);
+      ranged_hash_fn(size_type);
 
-      ranged_hash_fn(size_type size, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const Comb_Hash_Fn&);
 
-      ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&);
 
       void
-      swap(PB_DS_CLASS_C_DEC& other);
+      swap(PB_DS_CLASS_C_DEC&);
     };
 
     PB_DS_CLASS_T_DEC
@@ -358,8 +288,9 @@ namespace pb_ds
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn) :
-      Comb_Hash_Fn(r_comb_hash_fn)
+    ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, 
+                  const Comb_Hash_Fn& r_comb_hash_fn) 
+    : Comb_Hash_Fn(r_comb_hash_fn)
     { }
 
     PB_DS_CLASS_T_DEC
@@ -371,47 +302,34 @@ namespace pb_ds
 #undef PB_DS_CLASS_T_DEC
 #undef PB_DS_CLASS_C_DEC
 
-#define PB_DS_CLASS_T_DEC                                      \
-    template<typename Key, class Allocator, class Comb_Hash_Fn>
+#define PB_DS_CLASS_T_DEC \
+    template<typename Key, typename Allocator, typename Comb_Hash_Fn>
 
-#define PB_DS_CLASS_C_DEC                                      \
-    ranged_hash_fn<                                            \
-                                               Key,            \
-                                               null_hash_fn,   \
-                                               Allocator,      \
-                                               Comb_Hash_Fn,   \
-                                               true>
+#define PB_DS_CLASS_C_DEC \
+    ranged_hash_fn<Key,        null_hash_fn, Allocator, Comb_Hash_Fn, true>
 
     /**
-     * Specialization 4- The client does not supply a hash function
-     *    (by specifying null_hash_fn as the Hash_Fn parameter),
-     *    and requests that hash values be stored.
-
-    **/
-    template<typename Key, class Allocator, class Comb_Hash_Fn>
-    class ranged_hash_fn<
-      Key,
-      null_hash_fn,
-      Allocator,
-      Comb_Hash_Fn,
-      true> :
-      public null_hash_fn,
-      public Comb_Hash_Fn
+     * Specialization 4
+     * The client does not supply a hash function (by specifying
+     * null_hash_fn as the Hash_Fn parameter), and requests that hash
+     * values be stored.
+     **/
+    template<typename Key, typename Allocator, typename Comb_Hash_Fn>
+    class ranged_hash_fn<Key, null_hash_fn, Allocator, Comb_Hash_Fn, true> 
+    : public null_hash_fn, public Comb_Hash_Fn
     {
     protected:
       typedef typename Allocator::size_type size_type;
-
       typedef Comb_Hash_Fn comb_hash_fn_base;
 
-    protected:
-      ranged_hash_fn(size_type size);
+      ranged_hash_fn(size_type);
 
-      ranged_hash_fn(size_type size, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const Comb_Hash_Fn&);
 
-      ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn);
+      ranged_hash_fn(size_type, const null_hash_fn&, const Comb_Hash_Fn&);
 
       void
-      swap(PB_DS_CLASS_C_DEC& other);
+      swap(PB_DS_CLASS_C_DEC&);
     };
 
     PB_DS_CLASS_T_DEC
@@ -421,14 +339,15 @@ namespace pb_ds
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const Comb_Hash_Fn& r_comb_hash_fn) :
-      Comb_Hash_Fn(r_comb_hash_fn)
+    ranged_hash_fn(size_type size, const Comb_Hash_Fn& r_comb_hash_fn) 
+    : Comb_Hash_Fn(r_comb_hash_fn)
     { }
 
     PB_DS_CLASS_T_DEC
     PB_DS_CLASS_C_DEC::
-    ranged_hash_fn(size_type size, const null_hash_fn           & r_null_hash_fn, const Comb_Hash_Fn& r_comb_hash_fn) :
-      Comb_Hash_Fn(r_comb_hash_fn)
+    ranged_hash_fn(size_type size, const null_hash_fn& r_null_hash_fn, 
+                  const Comb_Hash_Fn& r_comb_hash_fn) 
+    : Comb_Hash_Fn(r_comb_hash_fn)
     { }
 
     PB_DS_CLASS_T_DEC