Iros
 
Loading...
Searching...
No Matches
equal_range.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::container {
7namespace detail {
9 template<concepts::ForwardIterator It, concepts::SentinelFor<It> Sent, typename T,
10 typename Proj = function::Identity,
11 concepts::IndirectStrictWeakOrder<T const*, meta::Projected<It, Proj>> Comp = function::Compare>
12 constexpr auto operator()(It first, Sent last, T const& needle, Comp comp = {}, Proj proj = {}) const
13 -> View<It> {
14 auto const distance = container::distance(first, last);
15 return equal_range_with_size(util::move(first), needle, util::ref(comp), util::ref(proj), distance);
16 }
17
18 template<concepts::ForwardContainer Con, typename T, typename Proj = function::Identity,
21 constexpr auto operator()(Con&& container, T const& needle, Comp comp = {}, Proj proj = {}) const
24 return equal_range_with_size(container::begin(container), needle, util::ref(comp), util::ref(proj),
25 distance);
26 }
27
28 private:
29 template<typename It, typename T, typename Proj, typename Comp,
30 typename SSizeType = meta::IteratorSSizeType<It>>
31 constexpr static auto equal_range_with_size(It first, T const& needle, Comp comp, Proj proj,
33 return { LowerBoundFunction::lower_bound_with_size(first, needle, util::ref(comp), util::ref(proj), n),
34 UpperBoundFunction::upper_bound_with_size(first, needle, util::ref(comp), util::ref(proj), n) };
35 }
36 };
37}
38
39constexpr inline auto equal_range = detail::EqualRangeFunction {};
40}
41
42namespace di {
44}
Definition view.h:35
Definition forward_container.h:8
Definition indirect_strict_weak_order.h:12
Definition sequence.h:13
Definition sequence.h:12
constexpr auto distance
Definition distance.h:44
constexpr auto equal_range
Definition equal_range.h:39
constexpr auto begin
Definition begin.h:44
Type< TypeConstant< T > > TypeIdentity
This is a helper template to prevent C++ from deducing the type of template argument.
Definition core.h:32
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
Conditional< concepts::BorrowedContainer< Con >, container::View< ContainerIterator< Con > >, container::Dangling > BorrowedView
Definition borrowed_view.h:12
constexpr auto ref
Definition reference_wrapper.h:98
Definition zstring_parser.h:9
constexpr auto proj
Definition proj.h:59
constexpr auto operator()(It first, Sent last, T const &needle, Comp comp={}, Proj proj={}) const -> View< It >
Definition equal_range.h:12
constexpr auto operator()(Con &&container, T const &needle, Comp comp={}, Proj proj={}) const -> meta::BorrowedView< Con >
Definition equal_range.h:21
Definition compare.h:8
Definition identity.h:7