#pragma once #include "llvm/Support/HashBuilder.h" namespace clice::support { template struct Hash { static llvm::hash_code hash(const auto& value) { return llvm::hash_value(value); } }; template llvm::hash_code hash(const Value& value) { return Hash::hash(value); } template struct Hash> { static llvm::hash_code hash(const std::vector& value) { llvm::SmallVector hashes; hashes.reserve(value.size()); for(const auto& element: value) { hashes.emplace_back(support::hash(element)); } return llvm::hash_combine_range(hashes.begin(), hashes.end()); }; }; } // namespace clice::support