Iros
Loading...
Searching...
No Matches
random_access_iterator.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/bidirectional_iterator.h
"
4
#include "
di/container/concepts/sized_sentinel_for.h
"
5
#include "
di/container/meta/iterator_ssize_type.h
"
6
#include "
di/container/meta/iterator_value.h
"
7
#include "
di/container/types/random_access_iterator_tag.h
"
8
#include "
di/meta/compare.h
"
9
10
namespace
di::concepts
{
11
template
<
typename
Iter>
12
concept
RandomAccessIterator
=
13
BidirectionalIterator<Iter>
&&
DerivedFrom<meta::IteratorCategory<Iter>
,
types::RandomAccessIteratorTag
> &&
14
TotallyOrdered<Iter>
&&
SizedSentinelFor<Iter, Iter>
&&
15
requires
(Iter iterator, Iter
const
citerator,
meta::IteratorSSizeType<Iter>
const
n) {
16
{ iterator += n } ->
SameAs<Iter&>
;
17
{ citerator + n } ->
SameAs<Iter>
;
18
{ n + citerator } ->
SameAs<Iter>
;
19
{ iterator -= n } ->
SameAs<Iter&>
;
20
{ citerator - n } ->
SameAs<Iter>
;
21
{ citerator[n] } ->
SameAs<meta::IteratorReference<Iter>
>;
22
};
23
}
bidirectional_iterator.h
di::concepts::BidirectionalIterator
Definition
bidirectional_iterator.h:8
di::concepts::DerivedFrom
Definition
operations.h:114
di::concepts::RandomAccessIterator
Definition
random_access_iterator.h:12
di::concepts::SameAs
Definition
core.h:114
di::concepts::SizedSentinelFor
Definition
sized_sentinel_for.h:9
di::concepts::TotallyOrdered
Definition
compare.h:103
compare.h
iterator_ssize_type.h
iterator_value.h
di::concepts
Definition
any_storable.h:9
di::meta::IteratorSSizeType
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition
iterator_ssize_type.h:8
random_access_iterator_tag.h
sized_sentinel_for.h
di::types::RandomAccessIteratorTag
Definition
random_access_iterator_tag.h:6
libs
di
include
di
container
concepts
random_access_iterator.h
Generated by
1.13.0