| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | /*
 | 
					
						
							|  |  |  |    Copyright (c) T. Zachary Laine 2018. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Distributed under the Boost Software License, Version 1.0. (See accompanying | 
					
						
							|  |  |  |    file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt)
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | #ifndef BOOST_ALGORITHM_FIND_BACKWARD_HPP
 | 
					
						
							|  |  |  | #define BOOST_ALGORITHM_FIND_BACKWARD_HPP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/config.hpp>
 | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | #include <boost/range/begin.hpp>
 | 
					
						
							|  |  |  | #include <boost/range/end.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | #include <utility>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace boost { namespace algorithm { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<typename BidiIter, typename T> | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							| 
									
										
										
										
											2018-05-14 19:17:00 -05:00
										 |  |  | BidiIter find_backward(BidiIter first, BidiIter last, const T & x) | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-10 13:22:53 -05:00
										 |  |  |     BidiIter it = last; | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  |     while (it != first) { | 
					
						
							|  |  |  |         if (*--it == x) | 
					
						
							|  |  |  |             return it; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return last; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | template<typename Range, typename T> | 
					
						
							|  |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							| 
									
										
										
										
											2018-05-14 19:17:00 -05:00
										 |  |  | typename boost::range_iterator<Range>::type find_backward(Range & range, const T & x) | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | { | 
					
						
							|  |  |  |     return ::boost::algorithm::find_backward(boost::begin(range), boost::end(range), x); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | template<typename BidiIter, typename T> | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							| 
									
										
										
										
											2018-05-14 19:17:00 -05:00
										 |  |  | BidiIter find_not_backward(BidiIter first, BidiIter last, const T & x) | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-10 13:22:53 -05:00
										 |  |  |     BidiIter it = last; | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  |     while (it != first) { | 
					
						
							|  |  |  |         if (*--it != x) | 
					
						
							|  |  |  |             return it; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return last; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | template<typename Range, typename T> | 
					
						
							|  |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							| 
									
										
										
										
											2018-05-14 19:17:00 -05:00
										 |  |  | typename boost::range_iterator<Range>::type find_not_backward(Range & range, const T & x) | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | { | 
					
						
							|  |  |  |     return ::boost::algorithm::find_not_backward(boost::begin(range), boost::end(range), x); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | template<typename BidiIter, typename Pred> | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							|  |  |  | BidiIter find_if_backward(BidiIter first, BidiIter last, Pred p) | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-10 13:22:53 -05:00
										 |  |  |     BidiIter it = last; | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  |     while (it != first) { | 
					
						
							|  |  |  |         if (p(*--it)) | 
					
						
							|  |  |  |             return it; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return last; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | template<typename Range, typename Pred> | 
					
						
							|  |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							|  |  |  | typename boost::range_iterator<Range>::type find_if_backward(Range & range, Pred p) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return ::boost::algorithm::find_if_backward(boost::begin(range), boost::end(range), p); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | template<typename BidiIter, typename Pred> | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							|  |  |  | BidiIter find_if_not_backward(BidiIter first, BidiIter last, Pred p) | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-10 13:22:53 -05:00
										 |  |  |     BidiIter it = last; | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  |     while (it != first) { | 
					
						
							|  |  |  |         if (!p(*--it)) | 
					
						
							|  |  |  |             return it; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return last; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 16:03:41 -05:00
										 |  |  | template<typename Range, typename Pred> | 
					
						
							|  |  |  | BOOST_CXX14_CONSTEXPR | 
					
						
							|  |  |  | typename boost::range_iterator<Range>::type find_if_not_backward(Range & range, Pred p) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return ::boost::algorithm::find_if_not_backward(boost::begin(range), boost::end(range), p); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 16:33:25 -05:00
										 |  |  | }} // namespace boost and algorithm
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // BOOST_ALGORITHM_FIND_BACKWARD_HPP
 |