| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | //  Boost string_algo library trim.hpp header file  ---------------------------//
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-27 10:27:37 +00:00
										 |  |  | //  Copyright Pavol Droba 2002-2003.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Distributed under the Boost Software License, Version 1.0.
 | 
					
						
							|  |  |  | //    (See accompanying file LICENSE_1_0.txt or copy at
 | 
					
						
							|  |  |  | //          http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-27 10:27:37 +00:00
										 |  |  | //  See http://www.boost.org/ for updates, documentation, and revision history.
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef BOOST_STRING_TRIM_DETAIL_HPP
 | 
					
						
							|  |  |  | #define BOOST_STRING_TRIM_DETAIL_HPP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/algorithm/string/config.hpp>
 | 
					
						
							|  |  |  | #include <boost/detail/iterator.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace boost { | 
					
						
							|  |  |  |     namespace algorithm { | 
					
						
							|  |  |  |         namespace detail { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //  trim iterator helper -----------------------------------------------//
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             template< typename ForwardIteratorT, typename PredicateT > | 
					
						
							|  |  |  |             inline ForwardIteratorT trim_end_iter_select(  | 
					
						
							|  |  |  |                 ForwardIteratorT InBegin,  | 
					
						
							|  |  |  |                 ForwardIteratorT InEnd,  | 
					
						
							|  |  |  |                 PredicateT IsSpace, | 
					
						
							|  |  |  |                 std::forward_iterator_tag ) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 ForwardIteratorT TrimIt=InBegin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 for( ForwardIteratorT It=InBegin; It!=InEnd; ++It ) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     if ( !IsSpace(*It) )  | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         TrimIt=It; | 
					
						
							|  |  |  |                         ++TrimIt; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return TrimIt; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             template< typename ForwardIteratorT, typename PredicateT > | 
					
						
							|  |  |  |             inline ForwardIteratorT trim_end_iter_select(  | 
					
						
							|  |  |  |                 ForwardIteratorT InBegin,  | 
					
						
							|  |  |  |                 ForwardIteratorT InEnd,  | 
					
						
							|  |  |  |                 PredicateT IsSpace, | 
					
						
							|  |  |  |                 std::bidirectional_iterator_tag ) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 for( ForwardIteratorT It=InEnd; It!=InBegin;  ) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     if ( !IsSpace(*(--It)) ) | 
					
						
							|  |  |  |                         return ++It; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return InBegin; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-08-06 19:52:08 +00:00
										 |  |  |    // Search for first non matching character from the beginning of the sequence
 | 
					
						
							|  |  |  |             template< typename ForwardIteratorT, typename PredicateT > | 
					
						
							|  |  |  |             inline ForwardIteratorT trim_begin(  | 
					
						
							|  |  |  |                 ForwardIteratorT InBegin,  | 
					
						
							|  |  |  |                 ForwardIteratorT InEnd,  | 
					
						
							|  |  |  |                 PredicateT IsSpace ) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 ForwardIteratorT It=InBegin; | 
					
						
							|  |  |  |                 for(; It!=InEnd; ++It ) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     if (!IsSpace(*It)) | 
					
						
							|  |  |  |                         return It; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return It; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // Search for first non matching character from the end of the sequence
 | 
					
						
							|  |  |  |             template< typename ForwardIteratorT, typename PredicateT > | 
					
						
							|  |  |  |             inline ForwardIteratorT trim_end(  | 
					
						
							|  |  |  |                 ForwardIteratorT InBegin,  | 
					
						
							|  |  |  |                 ForwardIteratorT InEnd,  | 
					
						
							|  |  |  |                 PredicateT IsSpace ) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 typedef BOOST_STRING_TYPENAME boost::detail:: | 
					
						
							|  |  |  |                     iterator_traits<ForwardIteratorT>::iterator_category category; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         } // namespace detail
 | 
					
						
							|  |  |  |     } // namespace algorithm
 | 
					
						
							|  |  |  | } // namespace boost
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // BOOST_STRING_TRIM_DETAIL_HPP
 |