File indexing completed on 2026-05-03 08:13:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _LIBCPP___CXX03___ITERATOR_FRONT_INSERT_ITERATOR_H
0011 #define _LIBCPP___CXX03___ITERATOR_FRONT_INSERT_ITERATOR_H
0012
0013 #include <__cxx03/__config>
0014 #include <__cxx03/__iterator/iterator.h>
0015 #include <__cxx03/__iterator/iterator_traits.h>
0016 #include <__cxx03/__memory/addressof.h>
0017 #include <__cxx03/__utility/move.h>
0018 #include <__cxx03/cstddef>
0019
0020 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0021 # pragma GCC system_header
0022 #endif
0023
0024 _LIBCPP_PUSH_MACROS
0025 #include <__cxx03/__undef_macros>
0026
0027 _LIBCPP_BEGIN_NAMESPACE_STD
0028
0029 _LIBCPP_SUPPRESS_DEPRECATED_PUSH
0030 template <class _Container>
0031 class _LIBCPP_TEMPLATE_VIS front_insert_iterator
0032 #if _LIBCPP_STD_VER <= 14 || !defined(_LIBCPP_ABI_NO_ITERATOR_BASES)
0033 : public iterator<output_iterator_tag, void, void, void, void>
0034 #endif
0035 {
0036 _LIBCPP_SUPPRESS_DEPRECATED_POP
0037
0038 protected:
0039 _Container* container;
0040
0041 public:
0042 typedef output_iterator_tag iterator_category;
0043 typedef void value_type;
0044 #if _LIBCPP_STD_VER >= 20
0045 typedef ptrdiff_t difference_type;
0046 #else
0047 typedef void difference_type;
0048 #endif
0049 typedef void pointer;
0050 typedef void reference;
0051 typedef _Container container_type;
0052
0053 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit front_insert_iterator(_Container& __x)
0054 : container(std::addressof(__x)) {}
0055 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator&
0056 operator=(const typename _Container::value_type& __value) {
0057 container->push_front(__value);
0058 return *this;
0059 }
0060 #ifndef _LIBCPP_CXX03_LANG
0061 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator&
0062 operator=(typename _Container::value_type&& __value) {
0063 container->push_front(std::move(__value));
0064 return *this;
0065 }
0066 #endif
0067 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator& operator*() { return *this; }
0068 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator& operator++() { return *this; }
0069 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator operator++(int) { return *this; }
0070 };
0071 _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(front_insert_iterator);
0072
0073 template <class _Container>
0074 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 front_insert_iterator<_Container>
0075 front_inserter(_Container& __x) {
0076 return front_insert_iterator<_Container>(__x);
0077 }
0078
0079 _LIBCPP_END_NAMESPACE_STD
0080
0081 _LIBCPP_POP_MACROS
0082
0083 #endif