25 #ifndef CRYPTO3_PASSHASH_GENERATE_HPP
26 #define CRYPTO3_PASSHASH_GENERATE_HPP
51 template<
typename Hasher,
typename InputIterator,
typename OutputIterator>
52 OutputIterator
generate(InputIterator first, InputIterator last, OutputIterator out) {
54 typedef detail::value_hash_impl<Passhash> PasshashImpl;
55 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
57 return HashImpl(first, last,
std::move(out), Passhash());
74 template<
typename Hasher,
typename InputIterator,
typename OutputIterator>
75 OutputIterator
generate(InputIterator first, InputIterator last, Passhash &sh) {
77 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
78 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
80 return HashImpl(first, last, sh);
95 template<
typename Hasher,
typename InputIterator>
96 detail::range_hash_impl<Hasher, detail::value_hash_impl<Passhash>>
generate(InputIterator first,
98 typedef detail::value_hash_impl<Passhash> PasshashImpl;
99 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
101 return HashImpl(first, last, Passhash());
117 template<
typename Hasher,
118 typename InputIterator,
119 typename Passhash =
typename itr_stream_hash_traits<Hasher, InputIterator>::type,
120 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
121 detail::range_hash_impl<Hasher, detail::ref_hash_impl<Passhash>>
122 generate(InputIterator first, InputIterator last, Passhash &sh) {
123 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
124 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
126 return HashImpl(first, last, sh);
142 template<
typename Hasher,
143 typename SinglePassRange,
144 typename OutputIterator,
145 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
146 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
147 OutputIterator
generate(
const SinglePassRange &rng, OutputIterator out) {
149 typedef detail::value_hash_impl<Passhash> PasshashImpl;
150 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
152 return HashImpl(rng,
std::move(out), Passhash());
169 template<
typename Hasher,
170 typename SinglePassRange,
171 typename OutputIterator,
172 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
173 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
174 OutputIterator
generate(
const SinglePassRange &rng, OutputIterator out, Passhash &sh) {
176 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
177 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
179 return HashImpl(rng,
std::move(out), sh);
193 template<
typename Hasher,
194 typename SinglePassRange,
195 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
196 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
197 detail::range_hash_impl<Hasher, detail::value_hash_impl<Passhash>>
generate(
const SinglePassRange &r) {
199 typedef detail::value_hash_impl<Passhash> PasshashImpl;
200 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
202 return HashImpl(r, Passhash());
217 template<
typename Hasher,
218 typename SinglePassRange,
219 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
220 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
221 detail::range_hash_impl<Hasher, detail::ref_hash_impl<Passhash>>
generate(
const SinglePassRange &rng,
223 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
224 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
226 return HashImpl(rng, sh);
OutputIterator generate(InputIterator first, InputIterator last, OutputIterator out)
Definition: passhash/include/nil/crypto3/passhash/algorithm/generate.hpp:52
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45