00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef itkStructHashFunction_h
00018 #define itkStructHashFunction_h
00019
00020 namespace itk
00021 {
00022
00035 template< class TInput >
00036 class StructHashFunction
00037 {
00038 public:
00039
00041 typedef StructHashFunction Self;
00042
00044 typedef TInput InputType;
00045
00046 unsigned int operator()( const InputType& key ) const;
00047
00048 };
00049
00050 template< class TInput >
00051 inline unsigned int
00052 StructHashFunction< TInput >
00053 ::operator()( const InputType& key ) const
00054 {
00055 int len = sizeof( InputType );
00056 const char* p = reinterpret_cast< const char* >( &key );
00057 int hash = 0;
00058 while( len-- )
00059 {
00060 hash = hash * 65 + *p++;
00061 }
00062 hash += (hash >> 5);
00063 return hash;
00064 }
00065
00066 }
00067
00068 #endif // ndef itkStructHashFunction_h
00069