tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
front_insert_iterator.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2#ifndef TETL_ITERATOR_FRONT_INSERT_ITERATOR_HPP
3#define TETL_ITERATOR_FRONT_INSERT_ITERATOR_HPP
4
8
9namespace etl {
10
19template <typename Container>
21protected:
22 Container* _container = nullptr;
23
24public:
26 using value_type = void;
27 using difference_type = void;
28 using pointer = void;
29 using reference = void;
30 using container_type = Container;
31
33 constexpr front_insert_iterator() noexcept = default;
34
36 constexpr explicit front_insert_iterator(Container& container)
37 : _container{etl::addressof(container)}
38 {
39 }
40
42 constexpr auto operator=(typename Container::value_type const& value) -> front_insert_iterator&
43 {
44 _container->push_front(value);
45 return *this;
46 }
47
49 constexpr auto operator=(typename Container::value_type&& value) -> front_insert_iterator&
50 {
51 _container->push_front(etl::move(value));
52 return *this;
53 }
54
59 constexpr auto operator*() -> front_insert_iterator& { return *this; }
60
65 constexpr auto operator++() -> front_insert_iterator& { return *this; }
66
71 constexpr auto operator++(int) -> front_insert_iterator { return *this; }
72};
73
77template <typename Container>
78[[nodiscard]] constexpr auto front_inserter(Container& c) -> front_insert_iterator<Container>
79{
81}
82
83} // namespace etl
84
85#endif // TETL_ITERATOR_FRONT_INSERT_ITERATOR_HPP
constexpr auto move(InputIt first, InputIt last, OutputIt destination) -> OutputIt
Moves the elements in the range [first, last), to another range beginning at destination,...
Definition move.hpp:26
Definition adjacent_find.hpp:8
constexpr auto addressof(T &arg) noexcept -> T *
Obtains the actual address of the object or function arg, even in presence of overloaded operator&.
Definition addressof.hpp:15
constexpr auto front_inserter(Container &c) -> front_insert_iterator< Container >
front_inserter is a convenience function template that constructs a front_insert_iterator for the con...
Definition front_insert_iterator.hpp:78
front_insert_iterator is an LegacyOutputIterator that prepends elements to a container for which it w...
Definition front_insert_iterator.hpp:20
constexpr front_insert_iterator() noexcept=default
Initializes the underlying pointer to container with nullptr.
void pointer
Definition front_insert_iterator.hpp:28
Container * _container
Definition front_insert_iterator.hpp:22
constexpr auto operator*() -> front_insert_iterator &
Does nothing, this member function is provided to satisfy the requirements of LegacyOutputIterator....
Definition front_insert_iterator.hpp:59
constexpr auto operator++(int) -> front_insert_iterator
Does nothing. These operator overloads are provided to satisfy the requirements of LegacyOutputIterat...
Definition front_insert_iterator.hpp:71
constexpr auto operator=(typename Container::value_type const &value) -> front_insert_iterator &
Inserts the given value value to the container.
Definition front_insert_iterator.hpp:42
Container container_type
Definition front_insert_iterator.hpp:30
void reference
Definition front_insert_iterator.hpp:29
constexpr auto operator=(typename Container::value_type &&value) -> front_insert_iterator &
Inserts the given value value to the container.
Definition front_insert_iterator.hpp:49
void value_type
Definition front_insert_iterator.hpp:26
void difference_type
Definition front_insert_iterator.hpp:27
output_iterator_tag iterator_category
Definition front_insert_iterator.hpp:25
constexpr auto operator++() -> front_insert_iterator &
Does nothing. These operator overloads are provided to satisfy the requirements of LegacyOutputIterat...
Definition front_insert_iterator.hpp:65
Defines the category of an iterator. Each tag is an empty type and corresponds to one of the five (un...
Definition tags.hpp:18