git / moonbite-core / src/libmw/include/mw/models/crypto/Hash.h · raw

#pragma once// Copyright (c) 2018-2019 David Burkett// Distributed under the MIT software license, see the accompanying// file LICENSE or http://www.opensource.org/licenses/mit-license.php.#include <mw/common/Macros.h>#include <mw/common/Traits.h>#include <mw/models/crypto/BigInteger.h>#include <boost/functional/hash.hpp>MW_NAMESPACEusing Hash = BigInt<32>;END_NAMESPACEnamespace std{    template<>    struct hash<mw::Hash>    {        size_t operator()(const mw::Hash& hash) const        {            return boost::hash_value(hash.vec());        }    };}class Hashes{public:    template <class T, typename SFINAE = typename std::enable_if_t<std::is_base_of<Traits::IHashable, T>::value>>    static std::vector<mw::Hash> From(const std::vector<T>& vec_hashable) noexcept    {        std::vector<mw::Hash> hashes;        std::transform(            vec_hashable.cbegin(), vec_hashable.cend(),            std::back_inserter(hashes),            [](const T& hashable) { return hashable.GetHash(); });        return hashes;    }};