00001 #ifndef ITKSTRUCTHASHFUNCTION_H
00002 #define ITKSTRUCTHASHFUNCTION_H
00003
00004 namespace itk
00005 {
00006
00019 template< class TInput >
00020 class StructHashFunction
00021 {
00022 public:
00023
00025 typedef StructHashFunction Self;
00026
00028 typedef TInput InputType;
00029
00030 unsigned int operator()( const InputType& key ) const;
00031
00032 };
00033
00034 template< class TInput >
00035 inline unsigned int
00036 StructHashFunction< TInput >
00037 ::operator()( const InputType& key ) const
00038 {
00039 int len = sizeof( InputType );
00040 const char* p = reinterpret_cast< const char* >( &key );
00041 int hash = 0;
00042 while( len-- )
00043 {
00044 hash = hash * 65 + *p++;
00045 }
00046 hash += (hash >> 5);
00047 return hash;
00048 }
00049
00050 }
00051
00052 #endif // ndef ITKSTRUCTHASHFUNCTION_H