Iros
 
Loading...
Searching...
No Matches
drop_while_view.h
Go to the documentation of this file.
1#pragma once
2
11#include "di/util/store_if.h"
12
13namespace di::container {
14template<concepts::View View, typename Pred>
15requires(concepts::InputContainer<View> && concepts::Object<Pred> &&
16 concepts::IndirectUnaryPredicate<Pred const, meta::ContainerIterator<View>>)
18 : public ViewInterface<DropWhileView<View, Pred>>
19 , public meta::EnableBorrowedContainer<DropWhileView<View, Pred>, concepts::BorrowedContainer<View>> {
20public:
23 = default;
24
25 constexpr explicit DropWhileView(View base, Pred predicate)
26 : m_base(util::move(base)), m_predicate(util::move(predicate)) {}
27
28 constexpr auto base() const& -> View
29 requires(concepts::CopyConstructible<View>)
30 {
31 return m_base;
32 }
33 constexpr auto base() && -> View { return util::move(m_base); }
34
35 constexpr auto pred() const -> Pred const& { return m_predicate.value(); }
36
37 constexpr auto begin() {
38 if constexpr (!concepts::ForwardContainer<View>) {
39 return container::find_if_not(m_base, util::cref(m_predicate.value()));
40 } else {
41 if (!m_cache.value.has_value()) {
42 m_cache.value = container::find_if_not(m_base, util::cref(m_predicate.value()));
43 }
44 return m_cache.value.value();
45 }
46 }
47
48 constexpr auto end() { return container::end(m_base); }
49
50private:
51 View m_base {};
52 util::RebindableBox<Pred> m_predicate;
54};
55
56template<typename Con, typename Pred>
58}
Definition drop_while_view.h:19
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition drop_while_view.h:28
constexpr DropWhileView(View base, Pred predicate)
Definition drop_while_view.h:25
constexpr auto base() &&-> View
Definition drop_while_view.h:33
constexpr auto begin()
Definition drop_while_view.h:37
constexpr auto end()
Definition drop_while_view.h:48
constexpr auto pred() const -> Pred const &
Definition drop_while_view.h:35
Definition view_interface.h:26
Definition view.h:35
Definition rebindable_box.h:42
Definition operations.h:27
Definition forward_container.h:8
Definition any_storable.h:9
Definition sequence.h:12
DropWhileView(Con &&, Pred) -> DropWhileView< meta::AsView< Con >, Pred >
constexpr auto move
Definition move.h:38
constexpr auto find_if_not
Definition find_if_not.h:31
constexpr auto end
Definition end.h:47
Definition merge_interfaces.h:6
Definition vocab.h:96
constexpr auto cref
Definition reference_wrapper.h:99
Definition enable_borrowed_container.h:9
Definition store_if.h:7