26 #ifndef CRYPTO3_PUBKEY_AGGREGATE_HPP
27 #define CRYPTO3_PUBKEY_AGGREGATE_HPP
41 template<
typename Scheme>
44 template<
typename Scheme>
66 template<
typename Scheme,
typename InputIterator,
typename OutputIterator,
68 typename std::enable_if<!boost::accumulators::detail::is_accumulator_set<OutputIterator>::value,
70 aggregate(InputIterator first, InputIterator last, OutputIterator out) {
77 return SchemeImpl(first, last,
std::move(out), AggregationAccumulator());
96 template<
typename Scheme,
typename SinglePassRange,
typename OutputIterator,
97 typename ProcessingMode = pubkey::aggregation_processing_mode_default<Scheme>>
98 typename std::enable_if<!boost::accumulators::detail::is_accumulator_set<OutputIterator>::value,
100 aggregate(
const SinglePassRange &range, OutputIterator out) {
107 return SchemeImpl(range,
std::move(out), AggregationAccumulator());
128 template<
typename Scheme,
typename InputIterator,
129 typename ProcessingMode = pubkey::aggregation_processing_mode_default<Scheme>,
130 typename OutputAccumulator =
typename pubkey::aggregation_accumulator_set<ProcessingMode>>
131 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
132 OutputAccumulator>::type &
133 aggregate(InputIterator first, InputIterator last, OutputAccumulator &acc) {
138 return SchemeImpl(first, last, std::forward<OutputAccumulator>(acc));
158 template<
typename Scheme,
typename SinglePassRange,
159 typename ProcessingMode = pubkey::aggregation_processing_mode_default<Scheme>,
160 typename OutputAccumulator =
typename pubkey::aggregation_accumulator_set<ProcessingMode>>
161 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
162 OutputAccumulator>::type &
163 aggregate(
const SinglePassRange &range, OutputAccumulator &acc) {
168 return SchemeImpl(range, std::forward<OutputAccumulator>(acc));
190 template<
typename Scheme,
typename InputIterator,
191 typename ProcessingMode = pubkey::aggregation_processing_mode_default<Scheme>,
192 typename AggregationAccumulator =
typename pubkey::aggregation_accumulator_set<ProcessingMode>,
193 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<AggregationAccumulator>,
194 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
195 SchemeImpl
aggregate(InputIterator first, InputIterator last) {
196 return SchemeImpl(first, last, AggregationAccumulator());
217 template<
typename Scheme,
typename SinglePassRange,
218 typename ProcessingMode = pubkey::aggregation_processing_mode_default<Scheme>,
219 typename AggregationAccumulator =
typename pubkey::aggregation_accumulator_set<ProcessingMode>,
220 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<AggregationAccumulator>,
221 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
223 return SchemeImpl(range, AggregationAccumulator());
std::enable_if<!boost::accumulators::detail::is_accumulator_set< OutputIterator >::value, OutputIterator >::type aggregate(InputIterator first, InputIterator last, OutputIterator out)
Aggregation of the input signatures into one resulted signature and writing it in out.
Definition: algorithm/aggregate.hpp:70
boost::accumulators::accumulator_set< typename ProcessingMode::result_type, boost::accumulators::features< accumulators::tag::aggregate< ProcessingMode > >> aggregation_accumulator_set
Accumulator set with pre-defined aggregation accumulator params.
Definition: pubkey_state.hpp:87
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
typename pubkey::modes::isomorphic< Scheme >::aggregation_policy aggregation_policy
Definition: algorithm/aggregate.hpp:42
typename modes::isomorphic< Scheme >::template bind< aggregation_policy< Scheme > >::type aggregation_processing_mode_default
Definition: algorithm/aggregate.hpp:46
Definition: isomorphic.hpp:104
Definition: pubkey_value.hpp:167
Definition: pubkey_value.hpp:74
Definition: pubkey_value.hpp:49
Definition: pubkey_value.hpp:61
Definition: isomorphic.hpp:219