// Copyright (C) 2003 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_GENERAL_HASh_ #define DLIB_GENERAL_HASh_ #include <string> #include "hash.h" 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); } // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- } #endif // DLIB_GENERAL_HASh_