Iros
 
Loading...
Searching...
No Matches
counted.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::container::view {
11namespace detail {
12 struct CountedFunction;
13
14 template<typename It, typename Diff>
16
17 template<typename It, typename Diff>
19
20 template<typename It, typename Diff>
22
24 template<typename Iter, typename It = meta::Decay<Iter>,
25 concepts::ConvertibleTo<meta::IteratorSSizeType<It>> Diff>
26 constexpr auto operator()(Iter&& it, Diff&& n_in) const -> concepts::View auto {
27 using SSizeType = meta::IteratorSSizeType<It>;
28 auto n = static_cast<SSizeType>(n_in);
29 if constexpr (CustomCounted<It, Diff>) {
30 return tag_invoke(*this, it, n);
31 } else if constexpr (SpanCounted<It, Diff>) {
32 return Span { util::to_address(it), static_cast<size_t>(n) };
33 } else if constexpr (ViewCounted<It, Diff>) {
34 return View { it, it + n };
35 } else {
36 return View { CountedIterator(it, n), default_sentinel };
37 }
38 }
39 };
40}
41
42constexpr inline auto counted = detail::CountedFunction {};
43}
Definition counted_iterator.h:18
Definition view.h:35
Definition span_forward_declaration.h:10
Definition contiguous_iterator.h:9
Definition random_access_iterator.h:12
Definition tag_invoke.h:33
Definition view.h:10
Definition adjacent.h:9
Definition adjacent.h:8
constexpr auto counted
Definition counted.h:42
constexpr auto default_sentinel
Definition default_sentinel.h:6
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
constexpr auto to_address
Definition to_address.h:22
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto operator()(Iter &&it, Diff &&n_in) const -> concepts::View auto
Definition counted.h:26