src/core/model/hash-function.h
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Tue, 13 Nov 2012 16:44:26 -0800
branchhash
changeset 9939 8d4c99660585
parent 9936 51de54536ee3
child 9945 9a867fd76097
permissions -rw-r--r--
Remove obsolete typedef.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     2
/*
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     3
 * Copyright (c) 2012 Lawrence Livermore National Laboratory
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     4
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     8
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    12
 * GNU General Public License for more details.
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    13
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    17
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    18
 * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    19
 */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    20
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    21
#ifndef HASHFUNCTION_H
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    22
#define HASHFUNCTION_H
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    23
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    24
#include "simple-ref-count.h"
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    25
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    26
namespace ns3 {
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    27
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    28
namespace Hash {
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    29
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    30
/**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    31
 *  \ingroup hash
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    32
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    33
 *  \brief Hash function implementation base class
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    34
 */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    35
class Implementation : public SimpleRefCount<Implementation>
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    36
{
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    37
public:
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    38
  /**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    39
   * Compute 32-bit hash of a byte buffer
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    40
   *
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    41
   * Call clear () between calls to GetHash32() to reset the
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    42
   * internal state and hash each buffer separately.
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    43
   *
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    44
   * If you don't call clear() between calls to GetHash32,
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    45
   * you can hash successive buffers.  The final return value
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    46
   * will be the cumulative hash across all calls.
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    47
   *
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    48
   * \param [in] buffer pointer to the beginning of the buffer
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    49
   * \param [in] size length of the buffer, in bytes
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    50
   * \return 32-bit hash of the buffer
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    51
   */
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
    52
  virtual uint32_t  GetHash32  (const char * buffer, const size_t size) = 0;
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    53
  /**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    54
   * Compute 64-bit hash of a byte buffer.
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    55
   *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    56
   * Default implementation returns 32-bit hash, with a warning.
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    57
   *
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    58
   * Call clear () between calls to GetHash64() to reset the
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    59
   * internal state and hash each buffer separately.
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    60
   *
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    61
   * If you don't call clear() between calls to GetHash64,
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    62
   * you can hash successive buffers.  The final return value
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    63
   * will be the cumulative hash across all calls.
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    64
   *
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    65
   * \param [in] buffer pointer to the beginning of the buffer
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    66
   * \param [in] size length of the buffer, in bytes
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    67
   * \return 64-bit hash of the buffer
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    68
   */
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
    69
  virtual uint64_t  GetHash64  (const char * buffer, const size_t size);
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    70
  /**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    71
   * Restore initial state
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    72
   */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    73
  virtual void clear (void) = 0;
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    74
  /**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    75
   * Constructor
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    76
   */
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    77
  Implementation () { };
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    78
  /**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    79
   * Destructor
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    80
   */
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
    81
  virtual ~Implementation () { };
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    82
};  // Hashfunction
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    83
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    84
  
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    85
/*--------------------------------------
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    86
 *  Hash function implementation
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    87
 *  by function pointers and templates
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    88
 */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    89
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    90
/**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    91
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    92
 * \ingroup hash
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    93
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    94
 * \brief Basic hash function typedefs.
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    95
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    96
 * See Hash32Implementation<> or Hash64Implementation<>
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    97
 */
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
    98
typedef uint32_t (*Hash32Function_ptr) (const char *, const size_t);
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
    99
typedef uint64_t (*Hash64Function_ptr) (const char *, const size_t);
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   100
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   101
namespace Function {
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   102
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   103
/**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   104
 * \ingroup hash
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   105
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   106
 * \brief Template for Hashfunctions from 32-bit hash functions
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   107
 */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   108
class Hash32 : public Implementation
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   109
{
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   110
public:
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   111
  Hash32 (Hash32Function_ptr hp) : m_fp (hp) { };
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
   112
  uint32_t GetHash32 (const char * buffer, const size_t size)
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   113
  {
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   114
    return (*m_fp) (buffer, size);
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   115
  }
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   116
  void clear () { };
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   117
private:
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   118
  Hash32Function_ptr m_fp;
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   119
};  // Hash32
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   120
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   121
/**
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   122
 * \ingroup hash
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   123
 *
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   124
 * \brief Template for Hashfunctions from 64-bit hash functions
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   125
 */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   126
class Hash64 : public Implementation
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   127
{
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   128
public:
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   129
  Hash64 (Hash64Function_ptr hp) : m_fp (hp) { };
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
   130
  uint64_t GetHash64 (const char * buffer, const size_t size)
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   131
  {
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   132
    return (*m_fp) (buffer, size);
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   133
  }
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
   134
  uint32_t GetHash32 (const char * buffer, const size_t size)
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   135
  {
9936
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
   136
    uint64_t hash = GetHash64 (buffer, size);
51de54536ee3 Use uint32/64/_t instead of Hash32/64_t
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9934
diff changeset
   137
    return *(uint32_t *)(void *)(&hash);
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   138
  }
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   139
  void clear () { };
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   140
private:
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   141
  Hash64Function_ptr m_fp;
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   142
};  // Hash64<Hash64Function_ptr>
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   143
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   144
9934
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   145
}  // namespace Function
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   146
0a0b86bc36c3 Incremental hashing, fix hash function ptr, additional test cases, check-style.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9932
diff changeset
   147
}  // namespace Hash
9932
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   148
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   149
}  // namespace ns3
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   150
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   151
#endif /* HASHFUNCTION_H */
0fd1bdf7671f Refactor namespaces
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   152