Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1176)

Unified Diff: src/core/model/hash-fnv.h

Issue 6357056: Generic hash function interface, with two implementations. (Closed)
Patch Set: Respond to review comments Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/model/hash-fnv.h
===================================================================
--- a/src/core/model/hash-fnv.h
+++ b/src/core/model/hash-fnv.h
@@ -25,35 +25,62 @@
namespace ns3 {
- namespace Hash {
+namespace Hash {
- namespace Function {
+namespace Function {
/**
* \ingroup hash
*
* \brief Fnv1a hash function implementation
*
+ * This is the venerable Fowler-Noll-Vo hash, version 1A. (See the
+ * <a href="http://isthe.com/chongo/tech/comp/fnv/">FNV page</a>.)
+ *
+ * The implementation here is taken directly from the published FNV
+ * <a href="http://isthe.com/chongo/tech/comp/fnv/#FNV-reference-source">
+ * reference code</a>,
+ * with minor modifications to wrap into this class. See the
+ * hash-fnv.cc file for details.
+ *
*/
class Fnv1a : public Implementation
{
public:
/**
+ * Constructor
+ */
+ Fnv1a ();
+ /**
* Compute 32-bit hash of a byte buffer
*
+ * Call clear () between calls to GetHash32() to reset the
+ * internal state and hash each buffer separately.
+ *
+ * If you don't call clear() between calls to GetHash32,
+ * you can hash successive buffers. The final return value
+ * will be the cumulative hash across all calls.
+ *
* \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
*/
- Hash32_t GetHash32 (const char * buffer, const size_t size);
+ uint32_t GetHash32 (const char * buffer, const size_t size);
/**
* Compute 64-bit hash of a byte buffer.
*
+ * Call clear () between calls to GetHash64() to reset the
+ * internal state and hash each buffer separately.
+ *
+ * If you don't call clear() between calls to GetHash64,
+ * you can hash successive buffers. The final return value
+ * will be the cumulative hash across all calls.
+ *
* \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
*/
- Hash64_t GetHash64 (const char * buffer, const size_t size);
+ uint64_t GetHash64 (const char * buffer, const size_t size);
/**
* Restore initial state
*/
@@ -64,16 +91,23 @@
* Seed value
*/
enum seed
- {
- SEED = 0x8BADF00D // Ate bad food
- };
+ {
+ SEED = 0x8BADF00D // Ate bad food
+ };
+ //@{
+ /**
+ * Cache last hash value, for incremental hashing
+ */
+ uint32_t m_hash32;
+ uint64_t m_hash64;
+ //@}
}; // class Fnv1a
- } // namespace Function
+} // namespace Function
- } // namespace Hash
-
-} // namespace ns3
+} // namespace Hash
+
+} // namespace ns3
#endif /* HASH_FNV_H */
« src/core/model/hash.h ('K') | « src/core/model/hash.cc ('k') | src/core/model/hash-fnv.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b