Iros
 
Loading...
Searching...
No Matches
iterator_swap.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/core.h"
9#include "di/util/forward.h"
10#include "di/util/move.h"
11#include "di/util/swap.h"
12
13namespace di::container {
14namespace detail {
16
17 template<typename T, typename U>
20
21 template<typename T, typename U>
24
25 template<typename T, typename U>
31
33 template<typename T, typename U, typename TT = meta::RemoveCVRef<T>, typename UU = meta::RemoveCVRef<U>>
35 constexpr void operator()(T&& a, U&& b) const {
36 if constexpr (CustomIteratorSwap<T, U>) {
37 (void) function::tag_invoke(*this, util::forward<T>(a), util::forward<U>(b));
38 } else if constexpr (DerefIteratorSwap<TT, UU>) {
39 util::swap(*a, *b);
40 } else {
42 *a = iterator_move(b);
43 *b = util::move(temp);
44 }
45 }
46 };
47}
48
50}
Definition operations.h:19
Definition language.h:253
Definition operations.h:11
Definition language.h:259
Definition iterator.h:14
Definition swap.h:34
Definition tag_invoke.h:33
Definition iterator_swap.h:18
Definition iterator_swap.h:22
Definition iterator_swap.h:26
Definition sequence.h:13
Definition sequence.h:12
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto iterator_swap
Definition iterator_swap.h:49
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
decltype(container::iterator_move(util::declval< T & >())) IteratorRValue
Definition iterator_rvalue.h:9
meta::Type< decltype(container::iterator_value(types::in_place_type< meta::RemoveCVRef< T > >))> IteratorValue
Definition iterator_value.h:8
decltype(*util::declval< T const & >()) IteratorReference
Definition iterator_reference.h:7
constexpr struct di::util::SwapFunction swap
Definition iterator_swap.h:32