/export/rook1/users/build/gfcppsancout64/product/include/gfcpp/HashFunction.hpp

Go to the documentation of this file.
00001 #ifndef _GEMFIRE_HASHFUNCTION_HPP_
00002 #define _GEMFIRE_HASHFUNCTION_HPP_
00003 
00004 
00005 /*=========================================================================
00006  * (c) Copyright 2002-2007, GemStone Systems, Inc. All Rights Reserved.
00007  * 1260 NW Waterhouse Ave., Suite 200,  Beaverton, OR 97006
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 int32_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       // Never defined.
00036       HashSB( );
00037 
00038 
00039     public:
00040 
00041       HashSB( const Hasher hashFn )
00042         : m_hashFn( hashFn )
00043       {
00044       }
00045 
00046       int32_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       // Never defined.
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 int32_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

GemFire C++ Cache API Documentation