di 0.1.0
Loading...
Searching...
No Matches
product.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container {
8namespace detail {
9 struct ProductFunction : function::pipeline::EnablePipeline {
10 template<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent, typename T = meta::IteratorValue<Iter>>
11 requires(concepts::IndirectlyBinaryLeftFoldable<function::Multiplies, T, Iter> && requires { T(1); })
12 constexpr auto operator()(Iter first, Sent last) const {
13 return container::fold_left(util::move(first), util::move(last), T(1), function::multiplies);
14 }
15
16 template<concepts::InputContainer Con, typename T = meta::ContainerValue<Con>>
17 requires(concepts::IndirectlyBinaryLeftFoldable<function::Multiplies, T, meta::ContainerIterator<Con>> &&
18 requires { T(1); })
19 constexpr auto operator()(Con&& container) const {
20 return (*this)(container::begin(container), container::end(container));
21 }
22 };
23}
24
25constexpr inline auto product = detail::ProductFunction {};
26}
27
28namespace di {
30}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition sequence.h:12
constexpr auto product
Definition product.h:25
constexpr auto fold_left
Definition fold_left.h:24
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
constexpr auto multiplies
Definition multiplies.h:15
Definition any_storable.h:9