1d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#ifndef FAKE_HASH
2d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#define FAKE_HASH
3d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
4d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#include <hash_map>
5d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#include <hash_set>
6d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
7d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scottnamespace __gnu_cxx {
8d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scottusing std::hash_map;
9d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scottusing std::hash_set;
10d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
11d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scotttemplate <class _Key> struct hash { };
12d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
13d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#define DEFINE_HASH(_type) \
14d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott    template<> \
15d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott    struct hash<_type> { \
16d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott        std::size_t operator()(_type val) const { \
17d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott            return std::hash<_type>(val); \
18d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott        } \
19d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott    }
20d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#undef DEFINE_HASH
21d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
22d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott}
23d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott
24d9f0c9bcce7092bf92cab485981630bd74307831Patrick Scott#endif
25