Refactor to make include order explicit, without guards. hash
authorPeter D. Barnes, Jr. <barnes26@llnl.gov>
Tue, 13 Nov 2012 16:34:34 -0800
branchhash
changeset 9929 3e8510caf03a
parent 9928 f88602ff0540
child 9930 0268fa8576c0
Refactor to make include order explicit, without guards.
src/core/model/hash-fnv.cc
src/core/model/hash-fnv.h
src/core/model/hash-implementation.cc
src/core/model/hash-implementation.h
src/core/model/hash-murmur3.cc
src/core/model/hash-murmur3.h
src/core/model/hash.cc
src/core/model/hash.h
src/core/test/hash-test-suite.cc
src/core/wscript
src/lte/model/lte-radio-bearer-tag.cc
src/lte/model/lte-radio-bearer-tag.h
src/lte/model/lte-rlc-um.cc
src/lte/model/lte-rlc-um.h
--- a/src/core/model/hash-fnv.cc	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash-fnv.cc	Tue Nov 13 16:34:34 2012 -0800
@@ -30,18 +30,17 @@
 #include <sys/types.h>
 #include <stdlib.h>
 
-#include "ns3/hash.h"
-#include "ns3/hash-fnv.h"
-#include "ns3/log.h"
+#include "log.h"
+#include "hash-fnv.h"
 
 
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Hash-Fnv");
-  
-  namespace HashImplNS {
 
-    namespace Fnv1aNS {
+  namespace HashFunction {
+
+    namespace Fnv1aImplementation {
       
 /*************************************************
  **  class FnvHashImplementation
@@ -152,7 +151,7 @@
  *
  * Use fully qualified type so this define works outside this scope //PDB
  */
-#define FNV0_32_INIT ((HashImplNS::Fnv1aNS::Fnv32_t)0)
+#define FNV0_32_INIT ((HashFunction::Fnv1aImplementation::Fnv32_t)0)
 
 
 /*
@@ -169,7 +168,7 @@
  *
  * Use fully qualified type so this define works outside this scope //PDB
  */
-#define FNV1_32_INIT ((HashImplNS::Fnv1aNS::Fnv32_t)0x811c9dc5)
+#define FNV1_32_INIT ((HashFunction::Fnv1aImplementation::Fnv32_t)0x811c9dc5)
 #define FNV1_32A_INIT FNV1_32_INIT
 
 
@@ -202,10 +201,10 @@
  * Use fully qualified type so this define works outside this scope //PDB
  */
 #if defined(HAVE_64BIT_LONG_LONG)
-#define FNV0_64_INIT ((HashImplNS::Fnv1aNS::Fnv64_t)0)
+#define FNV0_64_INIT ((HashFunction::Fnv1aImplementation::Fnv64_t)0)
 #else /* HAVE_64BIT_LONG_LONG */
 extern const Fnv64_t fnv0_64_init;
-#define FNV0_64_INIT (HashImplNS::Fnv1aNS::fnv0_64_init)
+#define FNV0_64_INIT (HashFunction::Fnv1aImplementation::fnv0_64_init)
 #endif /* HAVE_64BIT_LONG_LONG */
 
 
@@ -222,7 +221,7 @@
  * NOTE: The FNV-1a initial basis is the same value as FNV-1 by definition.
  */
 #if defined(HAVE_64BIT_LONG_LONG)
-#define FNV1_64_INIT ((HashImplNS::Fnv1aNS::Fnv64_t)0xcbf29ce484222325ULL)
+#define FNV1_64_INIT ((HashFunction::Fnv1aImplementation::Fnv64_t)0xcbf29ce484222325ULL)
 #define FNV1A_64_INIT FNV1_64_INIT
 #else /* HAVE_64BIT_LONG_LONG */
 extern const fnv1_64_init;
@@ -338,7 +337,7 @@
 /*
  * 32 bit magic FNV-1a prime
  */
-#define FNV_32_PRIME ((HashImplNS::Fnv1aNS::Fnv32_t)0x01000193)
+#define FNV_32_PRIME ((HashFunction::Fnv1aImplementation::Fnv32_t)0x01000193)
 
 
 /*
@@ -497,7 +496,7 @@
  * 64 bit magic FNV-1a prime
  */
 #if defined(HAVE_64BIT_LONG_LONG)
-#define FNV_64_PRIME ((HashImplNS::Fnv1aNS::Fnv64_t)0x100000001b3ULL)
+#define FNV_64_PRIME ((HashFunction::Fnv1aImplementation::Fnv64_t)0x100000001b3ULL)
 #else /* HAVE_64BIT_LONG_LONG */
 #define FNV_64_PRIME_LOW ((unsigned long)0x1b3)	/* lower bits of FNV prime */
 #define FNV_64_PRIME_SHIFT (8)		/* top FNV prime shift above 2^32 */
@@ -723,24 +722,26 @@
 //-----------------------------------------------------------------------------
 
 
-}  // namespace Fnv1aNS
+    }  // namespace Fnv1aImplementation
 
 
 
-Hash::Hash32_t
+Hash32_t
 Fnv1a::GetHash32  (const char * buffer, const size_t size)
 {
-  uint32_t result = Fnv1aNS::fnv_32a_buf ((void *)buffer, size, FNV1_32A_INIT);
+  uint32_t result =
+    Fnv1aImplementation::fnv_32a_buf ((void *)buffer, size, FNV1_32A_INIT);
   return result;
 }
 
-Hash::Hash64_t
+Hash64_t
 Fnv1a::GetHash64  (const char * buffer, const size_t size)
 {
-  uint64_t result = Fnv1aNS::fnv_64a_buf ((void *)buffer, size, FNV1A_64_INIT);
+  uint64_t result =
+    Fnv1aImplementation::fnv_64a_buf ((void *)buffer, size, FNV1A_64_INIT);
   return result;
 }
       
-  }  // namespace HashImpl
+  }  // namespace HashFunction
   
 } // namespace ns3
--- a/src/core/model/hash-fnv.h	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash-fnv.h	Tue Nov 13 16:34:34 2012 -0800
@@ -21,11 +21,11 @@
 #ifndef HASH_FNV_H
 #define HASH_FNV_H
 
-#include "ns3/hash.h"
+#include "hash-implementation.h"
 
 namespace ns3 {
-  
-  namespace HashImplNS {
+
+  namespace HashFunction {
 
 /**
  *  \ingroup hash
@@ -43,7 +43,7 @@
    * \param [in] size length of the buffer, in bytes
    * \return 32-bit hash of the buffer
    */
-  Hash::Hash32_t  GetHash32  (const char * buffer, const size_t size);
+  Hash32_t  GetHash32  (const char * buffer, const size_t size);
   /**
    * Compute 64-bit hash of a byte buffer.
    *
@@ -51,14 +51,11 @@
    * \param [in] size length of the buffer, in bytes
    * \return 64-bit hash of the buffer
    */
-  Hash::Hash64_t  GetHash64  (const char * buffer, const size_t size);
+  Hash64_t  GetHash64  (const char * buffer, const size_t size);
 
 private:
   /**
    * Seed value
-   *
-   * This has to be a constant for all MPI ranks to generate
-   * the same hash from the same string.
    */
   enum seed
     {
@@ -67,7 +64,7 @@
 
 };  // class Fnv1a
 
-}  // namespace HashImplNS
+  }  // namespace HashFunction
   
 } // namespace ns3
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/model/hash-implementation.cc	Tue Nov 13 16:34:34 2012 -0800
@@ -0,0 +1,41 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "log.h"
+#include "hash-implementation.h"
+
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("HashImplementation");
+
+    
+/*************************************************
+ **  class HashImplementation
+ ************************************************/
+
+Hash64_t
+HashImplementation::GetHash64  (const char * buffer, const size_t size)
+{
+  NS_LOG_WARN("64-bit hash requested, only 32-bit implementation available");
+  return GetHash32 (buffer, size);
+}
+  
+} // namespace ns3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/model/hash-implementation.h	Tue Nov 13 16:34:34 2012 -0800
@@ -0,0 +1,123 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef HASHIMPLEMENTATION_H
+#define HASHIMPLEMENTATION_H
+
+#include "simple-ref-count.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup hash
+ *
+ * Hash value opaque types
+ */
+typedef uint32_t Hash32_t;
+typedef uint64_t Hash64_t;
+
+
+/**
+ *  \ingroup hash
+ *
+ *  \brief Hash function implementation base class
+ */
+class HashImplementation : public SimpleRefCount<HashImplementation>
+{
+public:
+  /**
+   * Compute 32-bit hash of a byte buffer
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 32-bit hash of the buffer
+   */
+  virtual Hash32_t  GetHash32  (const char * buffer, const size_t size) = 0;
+  /**
+   * Compute 64-bit hash of a byte buffer.
+   *
+   * Default implementation returns 32-bit hash, with a warning.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 64-bit hash of the buffer
+   */
+  virtual Hash64_t  GetHash64  (const char * buffer, const size_t size);
+  /*
+   * Destructor
+   */
+  virtual ~HashImplementation () {} ;
+};  // HashImplementation
+
+  
+/*--------------------------------------
+ *  Hash function implementation
+ *  by function pointers and templates
+ */
+
+/**
+ *
+ * \ingroup hash
+ *
+ * \brief Basic hash function typedefs.
+ *
+ * See Hash32Implementation<> or Hash64Implementation<>
+ */
+typedef Hash32_t (*Hash32Function_ptr) (const char *, const size_t);
+typedef Hash64_t (*Hash64Function_ptr) (const char *, const size_t);
+
+
+/**
+ * \ingroup hash
+ *
+ * \brief Template for HashImplementations from 32-bit hash functions
+ */
+template <Hash32Function_ptr hp>
+class Hash32Implementation : public HashImplementation
+{
+  Hash32_t GetHash32 (const char * buffer, const size_t size)
+  {
+    return (*hp) (buffer, size);
+  }
+};  // Hash32Implementation<HashFunction>
+
+/**
+ * \ingroup hash
+ *
+ * \brief Template for HashImplementations from 64-bit hash functions
+ */
+template <Hash64Function_ptr hp>
+class Hash64Implementation : public HashImplementation
+{
+  Hash64_t GetHash64 (const char * buffer, const size_t size)
+  {
+    return (*hp) (buffer, size);
+  }
+  Hash32_t GetHash32 (const char * buffer, const size_t size)
+  {
+    Hash64_t hash = GetHash64(buffer, size);
+    return (Hash32_t *)(&hash);
+  }
+};  // Hash32Implementation<HashFunction>
+
+}  // namespace ns3
+
+#endif /* HASHIMPLEMENTATION_H */
+
--- a/src/core/model/hash-murmur3.cc	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash-murmur3.cc	Tue Nov 13 16:34:34 2012 -0800
@@ -18,18 +18,16 @@
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
 
-#include "ns3/hash.h"
-#include "ns3/hash-murmur3.h"
-#include "ns3/log.h"
-
+#include "log.h"
+#include "hash-murmur3.h"
 
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3");
   
-  namespace HashImplNS {
+  namespace HashFunction {
 
-    namespace Murmur3NS {
+    namespace Murmur3Implementation {
       
 /*************************************************
  **  class Murmur3HashImplementation
@@ -353,29 +351,29 @@
 //-----------------------------------------------------------------------------
 
 
-}  // namespace Murmur3NS
+    }  // namespace Murmur3Implementation
 
 
 
-Hash::Hash32_t
+Hash32_t
 Murmur3::GetHash32  (const char * buffer, const size_t size)
 {
   uint32_t result;
-  Murmur3NS::MurmurHash3_x86_32 (buffer, size,
+  Murmur3Implementation::MurmurHash3_x86_32 (buffer, size,
                                  (uint32_t)SEED, (void *)(&result));
   return result;
 }
 
-Hash::Hash64_t
+Hash64_t
 Murmur3::GetHash64  (const char * buffer, const size_t size)
 {
   uint64_t result[2];
   
-  Murmur3NS::MurmurHash3_x86_128 (buffer, size,
+  Murmur3Implementation::MurmurHash3_x86_128 (buffer, size,
                                   (uint32_t)SEED, (void *)(result));
   return result[0];
 }
-      
-  }  // namespace HashImpl
+
+  }  // namespace HashFunction
   
 } // namespace ns3
--- a/src/core/model/hash-murmur3.h	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash-murmur3.h	Tue Nov 13 16:34:34 2012 -0800
@@ -21,11 +21,11 @@
 #ifndef HASH_MURMUR3_H
 #define HASH_MURMUR3_H
 
-#include "ns3/hash.h"
+#include "hash-implementation.h"
 
 namespace ns3 {
   
-  namespace HashImplNS {
+  namespace HashFunction {
 
 /**
  *  \ingroup hash
@@ -52,7 +52,7 @@
    * \param [in] size length of the buffer, in bytes
    * \return 32-bit hash of the buffer
    */
-  Hash::Hash32_t  GetHash32  (const char * buffer, const size_t size);
+  Hash32_t  GetHash32  (const char * buffer, const size_t size);
   /**
    * Compute 64-bit hash of a byte buffer.
    *
@@ -60,7 +60,7 @@
    * \param [in] size length of the buffer, in bytes
    * \return 64-bit hash of the buffer
    */
-  Hash::Hash64_t  GetHash64  (const char * buffer, const size_t size);
+  Hash64_t  GetHash64  (const char * buffer, const size_t size);
 
 private:
   /**
@@ -76,7 +76,7 @@
 
 };  // class Murmur3
 
-}  // namespace HashImplNS
+  }  // namespace HashFunction
   
 } // namespace ns3
 
--- a/src/core/model/hash.cc	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash.cc	Tue Nov 13 16:34:34 2012 -0800
@@ -18,8 +18,8 @@
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
 
-#include "ns3/hash.h"
-#include "ns3/log.h"
+#include "log.h"
+#include "hash.h"
 
 
 namespace ns3 {
@@ -32,7 +32,7 @@
 
 Hash::Hash ()
 {
-  m_impl = Create <HashImplNS::Murmur3> ();
+  m_impl = Create <HashFunction::Murmur3> ();
   NS_ASSERT (m_impl != 0);
 }
 
@@ -42,16 +42,4 @@
   NS_ASSERT (m_impl != 0);
 }
   
-  
-/*************************************************
- **  class HashImplementation
- ************************************************/
-
-Hash::Hash64_t
-HashImplementation::GetHash64  (const char * buffer, const size_t size)
-{
-  NS_LOG_WARN("64-bit hash requested, only 32-bit implementation available");
-  return GetHash32 (buffer, size);
-}
-
 } // namespace ns3
--- a/src/core/model/hash.h	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/model/hash.h	Tue Nov 13 16:34:34 2012 -0800
@@ -23,14 +23,15 @@
 
 #include <string>
 
-#include "ns3/assert.h"
-#include "ns3/ptr.h"
-#include "ns3/simple-ref-count.h"
+#include "assert.h"
+#include "ptr.h"
+
+#include "hash-implementation.h"  // typedef ns3::Hash32_t, ns3::Hash64_t
+#include "hash-murmur3.h"
+#include "hash-fnv.h"
 
 namespace ns3 {
 
-class HashImplementation;
-
 /**
  *  \ingroup hash
  *
@@ -41,7 +42,7 @@
  *  The choice of hash function can be made at construction by
  *  passing a Ptr<> to the desired HashImplementation.
  *  The available implementations are documented in group hash.
- *  The default implementation is Murmur3.  FNV is also available.
+ *  The default implementation is Murmur3.  FNV1a is also available.
  *
  *  In addition to this class interface, global functions are
  *  defined which use the default hash implementation.
@@ -109,8 +110,9 @@
   
 };  // Hash
 
+
 /*************************************************
- **  Global functions
+ **  Global functions declarations
  ************************************************/
 
 /**
@@ -122,7 +124,7 @@
  * \param [in] size length of the buffer, in bytes
  * \return 32-bit hash of the buffer
  */
-Hash::Hash32_t Hash32 (const char * buffer, const size_t size);
+Hash32_t Hash32 (const char * buffer, const size_t size);
 /**
  * \ingroup hash
  *
@@ -132,7 +134,7 @@
  * \param [in] size length of the buffer, in bytes
  * \return 64-bit hash of the buffer
  */
-Hash::Hash64_t Hash64 (const char * buffer, const size_t size);
+Hash64_t Hash64 (const char * buffer, const size_t size);
 
 /**
  * \ingroup hash
@@ -142,7 +144,7 @@
  * \param [in] s string to hash
  * \return 32-bit hash of the string
  */
-Hash::Hash32_t Hash32 (const std::string s);
+Hash32_t Hash32 (const std::string s);
 /**
  * \ingroup hash
  *
@@ -151,105 +153,11 @@
  * \param [in] s string to hash
  * \return 64-bit hash of the string
  */
-Hash::Hash64_t Hash64 (const std::string s);
-
-
-/*************************************************
- **  Hash function implementation class
- ************************************************/
-  
-/**
- *  \ingroup hash
- *
- *  \brief Hash function implementation base class
- */
-#ifndef HASHIMPLEMENTATION_C
-#define HASHIMPLEMENTATION_C
-class HashImplementation : public SimpleRefCount<HashImplementation>
-{
-public:
-  /**
-   * Compute 32-bit hash of a byte buffer
-   *
-   * \param [in] buffer pointer to the beginning of the buffer
-   * \param [in] size length of the buffer, in bytes
-   * \return 32-bit hash of the buffer
-   */
-  virtual Hash::Hash32_t  GetHash32  (const char * buffer, const size_t size) = 0;
-  /**
-   * Compute 64-bit hash of a byte buffer.
-   *
-   * Default implementation returns 32-bit hash, with a warning.
-   *
-   * \param [in] buffer pointer to the beginning of the buffer
-   * \param [in] size length of the buffer, in bytes
-   * \return 64-bit hash of the buffer
-   */
-  virtual Hash::Hash64_t  GetHash64  (const char * buffer, const size_t size);
-  /*
-   * Destructor
-   */
-  virtual ~HashImplementation () {} ;
-};  // HashImplementation
-#endif /* HASHIMPLEMENTATION_C */
-
-/**
- *
- * \ingroup hash
- *
- * \brief Basic hash function typedefs.
- *
- * See Hash32Implementation<> or Hash64Implementation<>
- */
-typedef Hash::Hash32_t (*Hash32Function_ptr) (const char *, const size_t);
-typedef Hash::Hash64_t (*Hash64Function_ptr) (const char *, const size_t);
-
-
-/**
- * \ingroup hash
- *
- * \brief Template for HashImplementations from 32-bit hash functions
- */
-template <Hash32Function_ptr hp>
-class Hash32Implementation : public HashImplementation
-{
-  Hash::Hash32_t GetHash32 (const char * buffer, const size_t size)
-  {
-    return (*hp) (buffer, size);
-  }
-};  // Hash32Implementation<HashFunction>
-
-/**
- * \ingroup hash
- *
- * \brief Template for HashImplementations from 64-bit hash functions
- */
-template <Hash64Function_ptr hp>
-class Hash64Implementation : public HashImplementation
-{
-  Hash::Hash64_t GetHash64 (const char * buffer, const size_t size)
-  {
-    return (*hp) (buffer, size);
-  }
-  Hash::Hash32_t GetHash32 (const char * buffer, const size_t size)
-  {
-    Hash::Hash64_t hash = GetHash64(buffer, size);
-    return (Hash::Hash32_t *)(&hash);
-  }
-};  // Hash32Implementation<HashFunction>
+Hash64_t Hash64 (const std::string s);
 
 }  // namespace ns3
 
 
-
-/*************************************************
- **  Real Hash function implementations
- ************************************************/
-
-#include "ns3/hash-murmur3.h"
-#include "ns3/hash-fnv.h"
-
-
 /*************************************************
  **  Inline implementations for rvo
  ************************************************/
@@ -261,7 +169,7 @@
 */
 
 inline
-Hash::Hash32_t
+Hash32_t
 Hash::GetHash32  (const char * buffer, const size_t size)
 {
   NS_ASSERT (m_impl != 0);
@@ -269,7 +177,7 @@
 }
 
 inline
-Hash::Hash64_t
+Hash64_t
 Hash::GetHash64  (const char * buffer, const size_t size)
 {
   NS_ASSERT (m_impl != 0);
@@ -277,7 +185,7 @@
 }
 
 inline
-Hash::Hash32_t
+Hash32_t
 Hash::GetHash32  (const std::string s)
 {
   NS_ASSERT (m_impl != 0);
@@ -285,7 +193,7 @@
 }
 
 inline
-Hash::Hash64_t
+Hash64_t
 Hash::GetHash64  (const std::string s)
 {
   NS_ASSERT (m_impl != 0);
@@ -298,28 +206,28 @@
 */
 
 inline
-Hash::Hash32_t
+Hash32_t
 Hash32 (const char * buffer, const size_t size)
 {
   return Hash().GetHash32 (buffer, size);
 }
 
 inline
-Hash::Hash64_t
+Hash64_t
 Hash64 (const char * buffer, const size_t size)
 {
   return Hash().GetHash64 (buffer, size);
 }
 
 inline
-Hash::Hash32_t
+Hash32_t
 Hash32 (const std::string s)
 {
   return Hash().GetHash32 (s);
 }
 
 inline
-Hash::Hash64_t
+Hash64_t
 Hash64 (const std::string s)
 {
   return Hash().GetHash64 (s);
--- a/src/core/test/hash-test-suite.cc	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/test/hash-test-suite.cc	Tue Nov 13 16:34:34 2012 -0800
@@ -21,8 +21,8 @@
 #include <iomanip>
 #include <string>
 
+#include "ns3/test.h"
 #include "ns3/hash.h"
-#include "ns3/test.h"
 
 namespace ns3 {
 
@@ -95,7 +95,7 @@
 HashFnv1aTestCase::DoRun (void)
 {
   std::string key("The quick brown fnv1a.");
-  Hash hasher = Hash ( Create<HashImplNS::Fnv1a> () );
+  Hash hasher = Hash ( Create<HashFunction::Fnv1a> () );
 
   uint32_t h32r = 0x5735855b;  // FNV1A(key)
   uint32_t h32 = hasher.GetHash32 (key);
@@ -139,7 +139,7 @@
 HashMurmur3TestCase::DoRun (void)
 {
   std::string key("The quick brown murmur3.");
-  Hash hasher = Hash ( Create<HashImplNS::Murmur3> () );
+  Hash hasher = Hash ( Create<HashFunction::Murmur3> () );
 
   uint32_t h32r = 0xe8a2d100;  // Murmur3(key)
   uint32_t h32 = hasher.GetHash32 (key);
--- a/src/core/wscript	Tue Nov 13 16:32:31 2012 -0800
+++ b/src/core/wscript	Tue Nov 13 16:34:34 2012 -0800
@@ -150,6 +150,7 @@
         'helper/random-variable-stream-helper.cc',
         'helper/event-garbage-collector.cc',
         'model/hash.cc',
+        'model/hash-implementation.cc',
         'model/hash-murmur3.cc',
         'model/hash-fnv.cc',
         ]
@@ -256,6 +257,7 @@
         'helper/event-garbage-collector.h',
         'helper/random-variable-stream-helper.h',
         'model/hash.h',
+        'model/hash-implementation.h',
         'model/hash-murmur3.h',
         'model/hash-fnv.h',
         ]