81 lines
2.3 KiB
C++
81 lines
2.3 KiB
C++
// 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_
|
|
|