34 lines
808 B
C++
34 lines
808 B
C++
#pragma once
|
|
|
|
#include <unordered_map>
|
|
#include "../../core/Defines.h"
|
|
#include "../../core/BitHelper.h"
|
|
#include "../Material/Block.h"
|
|
#include "../Material/MaterialLibraryPointer.h"
|
|
|
|
namespace std
|
|
{
|
|
//template<>
|
|
//struct hash<Block<MaterialLibraryPointer>>
|
|
//{
|
|
// size_t operator()(const Block<MaterialLibraryPointer> &value) const
|
|
// {
|
|
// size_t res = 0;
|
|
// for (size_t i = 0; i < value.size(); i++)
|
|
// res ^= BitHelper::CircularShiftLeft<size_t>(hash<MaterialLibraryPointer>()(value.Get(i)), i);
|
|
// return res;
|
|
// }
|
|
//};
|
|
|
|
template<typename T>
|
|
struct hash<Block<T>>
|
|
{
|
|
size_t operator()(const Block<T> &value) const
|
|
{
|
|
size_t res = 0;
|
|
for (size_t i = 0; i < value.size(); i++)
|
|
res ^= BitHelper::CircularShiftLeft<size_t>(hash<T>()(value.Get(i)), i);
|
|
return res;
|
|
}
|
|
};
|
|
} |