mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			stl_algobase.h (__niter_wrap): New.
2018-07-03 François Dumont <fdumont@gcc.gnu.org> * include/bits/stl_algobase.h (__niter_wrap): New. (__copy_move_a2(_II, _II, _OI)): Use latter. (__copy_move_backward_a2(_BI1, _BI1, _BI2)): Likewise. (fill_n(_OI, _Size, const _Tp&)): Likewise. (equal(_II1, _II1, _II2)): Use __glibcxx_requires_can_increment. * include/debug/stl_iterator.h (std::__niter_base(const __gnu_cxx::_Safe_iterator< __gnu_cxx::__normal_iterator<>, _Sequence>&)): New declaration. * include/debug/vector (__niter_base(const __gnu_cxx::_Safe_iterator< __gnu_cxx::__normal_iterator<>, _Sequence>&)): New. From-SVN: r262349
This commit is contained in:
		
							parent
							
								
									42a98b43bb
								
							
						
					
					
						commit
						315aadc864
					
				|  | @ -1,3 +1,16 @@ | ||||||
|  | 2018-07-03  François Dumont  <fdumont@gcc.gnu.org> | ||||||
|  | 
 | ||||||
|  | 	* include/bits/stl_algobase.h (__niter_wrap): New. | ||||||
|  | 	(__copy_move_a2(_II, _II, _OI)): Use latter. | ||||||
|  | 	(__copy_move_backward_a2(_BI1, _BI1, _BI2)): Likewise. | ||||||
|  | 	(fill_n(_OI, _Size, const _Tp&)): Likewise. | ||||||
|  | 	(equal(_II1, _II1, _II2)): Use __glibcxx_requires_can_increment. | ||||||
|  | 	* include/debug/stl_iterator.h | ||||||
|  | 	(std::__niter_base(const __gnu_cxx::_Safe_iterator< | ||||||
|  | 	__gnu_cxx::__normal_iterator<>, _Sequence>&)): New declaration. | ||||||
|  | 	* include/debug/vector (__niter_base(const __gnu_cxx::_Safe_iterator< | ||||||
|  | 	__gnu_cxx::__normal_iterator<>, _Sequence>&)): New. | ||||||
|  | 
 | ||||||
| 2018-07-02  Jonathan Wakely  <jwakely@redhat.com> | 2018-07-02  Jonathan Wakely  <jwakely@redhat.com> | ||||||
| 
 | 
 | ||||||
| 	P0758R1 Implicit conversion traits | 	P0758R1 Implicit conversion traits | ||||||
|  |  | ||||||
|  | @ -277,6 +277,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|     __niter_base(_Iterator __it) |     __niter_base(_Iterator __it) | ||||||
|     { return __it; } |     { return __it; } | ||||||
| 
 | 
 | ||||||
|  |   // Reverse the __niter_base transformation to get a
 | ||||||
|  |   // __normal_iterator back again (this assumes that __normal_iterator
 | ||||||
|  |   // is only used to wrap random access iterators, like pointers).
 | ||||||
|  |   template<typename _From, typename _To> | ||||||
|  |     inline _From | ||||||
|  |     __niter_wrap(_From __from, _To __res) | ||||||
|  |     { return __from + (__res - std::__niter_base(__from)); } | ||||||
|  | 
 | ||||||
|  |   // No need to wrap, iterator already has the right type.
 | ||||||
|  |   template<typename _Iterator> | ||||||
|  |     inline _Iterator | ||||||
|  |     __niter_wrap(_Iterator, _Iterator __res) | ||||||
|  |     { return __res; } | ||||||
|  | 
 | ||||||
|   // All of these auxiliary structs serve two purposes.  (1) Replace
 |   // All of these auxiliary structs serve two purposes.  (1) Replace
 | ||||||
|   // calls to copy with memmove whenever possible.  (Memmove, not memcpy,
 |   // calls to copy with memmove whenever possible.  (Memmove, not memcpy,
 | ||||||
|   // because the input and output ranges are permitted to overlap.)
 |   // because the input and output ranges are permitted to overlap.)
 | ||||||
|  | @ -419,9 +433,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|     inline _OI |     inline _OI | ||||||
|     __copy_move_a2(_II __first, _II __last, _OI __result) |     __copy_move_a2(_II __first, _II __last, _OI __result) | ||||||
|     { |     { | ||||||
|       return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first), |       return std::__niter_wrap(__result, | ||||||
| 					     std::__niter_base(__last), | 		std::__copy_move_a<_IsMove>(std::__niter_base(__first), | ||||||
| 					     std::__niter_base(__result))); | 					    std::__niter_base(__last), | ||||||
|  | 					    std::__niter_base(__result))); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   /**
 |   /**
 | ||||||
|  | @ -593,7 +608,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|     inline _BI2 |     inline _BI2 | ||||||
|     __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) |     __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) | ||||||
|     { |     { | ||||||
|       return _BI2(std::__copy_move_backward_a<_IsMove> |       return std::__niter_wrap(__result, | ||||||
|  | 		std::__copy_move_backward_a<_IsMove> | ||||||
| 		  (std::__niter_base(__first), std::__niter_base(__last), | 		  (std::__niter_base(__first), std::__niter_base(__last), | ||||||
| 		   std::__niter_base(__result))); | 		   std::__niter_base(__result))); | ||||||
|     } |     } | ||||||
|  | @ -785,7 +801,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|       __glibcxx_function_requires(_OutputIteratorConcept<_OI, _Tp>) |       __glibcxx_function_requires(_OutputIteratorConcept<_OI, _Tp>) | ||||||
|       __glibcxx_requires_can_increment(__first, __n); |       __glibcxx_requires_can_increment(__first, __n); | ||||||
| 
 | 
 | ||||||
|       return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value)); |       return std::__niter_wrap(__first, | ||||||
|  | 		std::__fill_n_a(std::__niter_base(__first), __n, __value)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   template<bool _BoolType> |   template<bool _BoolType> | ||||||
|  | @ -1043,7 +1060,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO | ||||||
|       __glibcxx_function_requires(_EqualOpConcept< |       __glibcxx_function_requires(_EqualOpConcept< | ||||||
| 	    typename iterator_traits<_II1>::value_type, | 	    typename iterator_traits<_II1>::value_type, | ||||||
| 	    typename iterator_traits<_II2>::value_type>) | 	    typename iterator_traits<_II2>::value_type>) | ||||||
|       __glibcxx_requires_valid_range(__first1, __last1); |       __glibcxx_requires_can_increment_range(__first1, __last1, __first2); | ||||||
| 
 | 
 | ||||||
|       return std::__equal_aux(std::__niter_base(__first1), |       return std::__equal_aux(std::__niter_base(__first1), | ||||||
| 			      std::__niter_base(__last1), | 			      std::__niter_base(__last1), | ||||||
|  |  | ||||||
|  | @ -120,4 +120,17 @@ namespace __gnu_debug | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | namespace std | ||||||
|  | { | ||||||
|  | _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|  | 
 | ||||||
|  |   template<typename _Iterator, typename _Container, typename _Sequence> | ||||||
|  |     _Iterator | ||||||
|  |     __niter_base(const __gnu_debug::_Safe_iterator< | ||||||
|  | 		 __gnu_cxx::__normal_iterator<_Iterator, _Container>, | ||||||
|  | 		 _Sequence>&); | ||||||
|  | 
 | ||||||
|  | _GLIBCXX_END_NAMESPACE_VERSION | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -785,6 +785,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|       { return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()(__b); } |       { return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()(__b); } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |  template<typename _Iterator, typename _Container, typename _Sequence> | ||||||
|  |     _Iterator | ||||||
|  |     __niter_base(const __gnu_debug::_Safe_iterator< | ||||||
|  | 		 __gnu_cxx::__normal_iterator<_Iterator, _Container>, | ||||||
|  | 		 _Sequence>& __it) | ||||||
|  |     { return std::__niter_base(__it.base()); } | ||||||
|  | 
 | ||||||
| _GLIBCXX_END_NAMESPACE_VERSION | _GLIBCXX_END_NAMESPACE_VERSION | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 François Dumont
						François Dumont