00001 #ifndef _GEMFIRE_HASHFUNCTION_HPP_
00002 #define _GEMFIRE_HASHFUNCTION_HPP_
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "gfcpp_globals.hpp"
00012 #include "SharedPtr.hpp"
00013 #include "CacheableKey.hpp"
00014
00015
00019 namespace gemfire
00020 {
00021
00023 typedef size_t (*Hasher) ( const SharedBasePtr& );
00024
00026 typedef bool (*EqualTo) ( const SharedBasePtr&, const SharedBasePtr& );
00027
00028
00029 class HashSB
00030 {
00031 private:
00032
00033 Hasher m_hashFn;
00034
00035
00036 HashSB( );
00037
00038
00039 public:
00040
00041 HashSB( const Hasher hashFn )
00042 : m_hashFn( hashFn )
00043 {
00044 }
00045
00046 size_t operator () ( const SharedBasePtr& p ) const
00047 {
00048 return m_hashFn( p );
00049 }
00050 };
00051
00052
00053 class EqualToSB
00054 {
00055 private:
00056
00057 EqualTo m_equalFn;
00058
00059
00060 EqualToSB( );
00061
00062
00063 public:
00064
00065 EqualToSB( const EqualTo equalFn)
00066 : m_equalFn( equalFn )
00067 {
00068 }
00069
00070 bool operator () ( const SharedBasePtr& x, const SharedBasePtr& y ) const
00071 {
00072 return m_equalFn( x, y );
00073 }
00074 };
00075
00076
00077 template < typename TKEY >
00078 inline size_t hashFunction( const TKEY& k )
00079 {
00080 return k->hashcode( );
00081 }
00082
00083 template < typename TKEY >
00084 inline bool equalToFunction( const TKEY& x, const TKEY& y )
00085 {
00086 return ( *x.ptr( ) == *y.ptr( ) );
00087 }
00088
00089 }
00090
00091
00092 #endif