#ifndef FILE_ID_SUPPORT_HPP_INCLUDED
#define FILE_ID_SUPPORT_HPP_INCLUDED
#include <clang-c/Index.h>
#include <algorithm>
#include <functional>
#include <boost/functional/hash/hash.hpp>
namespace std {
template <>
struct hash<CXFileUniqueID> {
std::size_t operator() (CXFileUniqueID const& uid) const {
int constexpr nelems = sizeof(uid.data) / sizeof(uid.data[0]);
std::hash<unsigned long long> hasher;
std::size_t h = hasher(uid.data[0]);
for (int i = 1; i < nelems; ++i)
boost::hash_combine(h, hasher(uid.data[i]));
return h;
}
};
template <>
struct equal_to<CXFileUniqueID> {
bool operator() (CXFileUniqueID const& lhs, CXFileUniqueID const& rhs) const {
return std::equal(
std::begin(lhs.data),
std::end(lhs.data),
std::begin(rhs.data));
}
};
}
#endif