// Copyright (C) 2003 Davis E. King ([email protected]) | |
// License: Boost Software License See LICENSE.txt for the full license. | |
namespace dlib | |
{ | |
// ---------------------------------------------------------------------------------------- | |
// ---------------------------------------------------------------------------------------- | |
// ----------------------- provide a general hashing function object ---------------------- | |
// ---------------------------------------------------------------------------------------- | |
// ---------------------------------------------------------------------------------------- | |
template < | |
typename T | |
> | |
class general_hash | |
{ | |
public: | |
inline unsigned long operator() ( | |
const T& item | |
) const; | |
}; | |
/*! | |
Note that the default behavior of general hash is to attempt to cast | |
an object of type T to an unsigned long and use that as the hash. | |
REQUIREMENTS ON general_hash | |
- must have a default constructor | |
- must be a function object which overloads operator() as follows: | |
unsigned long operator()(const T& item) | |
- must take item, compute a hash number and return it | |
- must not throw | |
- must define the hash in such a way that all equivalent objects have | |
the same hash. where equivalent means the following: | |
definition of equivalent: | |
a is equivalent to b if | |
a < b == false and | |
b < a == false | |
!*/ | |
// --------------- | |
template < | |
typename T | |
> | |
unsigned long general_hash<T>:: | |
operator() ( | |
const T& item | |
) const | |
{ | |
// hash any types that have a conversion to uint64 | |
return hash(static_cast<uint64>(item)); | |
} | |
// --------------- | |
// std::string hash | |
template <> | |
inline unsigned long general_hash<std::string>:: | |
operator() ( | |
const std::string& item | |
) const | |
{ | |
return hash(item); | |
} | |
// ---------------------------------------------------------------------------------------- | |
// ---------------------------------------------------------------------------------------- | |
} | |