Iros
 
Loading...
Searching...
No Matches
distance.h
Go to the documentation of this file.
1#pragma once
2
14
15namespace di::container {
16namespace detail {
18 template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent>
20 constexpr auto operator()(Iter iter, Sent sent) const -> meta::IteratorSSizeType<Iter> {
22 for (; iter != sent; ++iter) {
23 ++distance;
24 }
25 return distance;
26 }
27
28 template<concepts::Iterator Iter, concepts::SizedSentinelFor<Iter> Sent>
29 constexpr auto operator()(Iter const& iter, Sent const& sent) const {
30 return sent - iter;
31 }
32
33 template<concepts::Container Con>
34 constexpr auto operator()(Con&& container) const -> meta::ContainerSSizeType<Con> {
35 if constexpr (concepts::SizedContainer<Con>) {
37 } else {
38 return (*this)(begin(container), end(container));
39 }
40 }
41 };
42}
43
44constexpr inline auto distance = detail::DistanceFunction {};
45}
46
47namespace di {
49}
Definition sized_container.h:8
Definition sized_sentinel_for.h:9
Definition sequence.h:13
Definition sequence.h:12
constexpr auto ssize
Definition ssize.h:34
constexpr auto distance
Definition distance.h:44
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
IteratorSSizeType< ContainerIterator< T > > ContainerSSizeType
Definition container_ssize_type.h:8
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
Definition zstring_parser.h:9
constexpr auto operator()(Con &&container) const -> meta::ContainerSSizeType< Con >
Definition distance.h:34
constexpr auto operator()(Iter const &iter, Sent const &sent) const
Definition distance.h:29