335 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  Boost string_algo library find.hpp header file  ---------------------------//
 | |
| 
 | |
| //  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)
 | |
| 
 | |
| //  See http://www.boost.org/ for updates, documentation, and revision history.
 | |
| 
 | |
| #ifndef BOOST_STRING_FIND_HPP
 | |
| #define BOOST_STRING_FIND_HPP
 | |
| 
 | |
| #include <boost/algorithm/string/config.hpp>
 | |
| 
 | |
| #include <boost/range/iterator_range_core.hpp>
 | |
| #include <boost/range/begin.hpp>
 | |
| #include <boost/range/end.hpp>
 | |
| #include <boost/range/iterator.hpp>
 | |
| #include <boost/range/as_literal.hpp>
 | |
| 
 | |
| #include <boost/algorithm/string/finder.hpp>
 | |
| #include <boost/algorithm/string/compare.hpp>
 | |
| #include <boost/algorithm/string/constants.hpp>
 | |
| 
 | |
| /*! \file
 | |
|     Defines a set of find algorithms. The algorithms are searching
 | |
|     for a substring of the input. The result is given as an \c iterator_range
 | |
|     delimiting the substring.
 | |
| */
 | |
| 
 | |
| namespace boost {
 | |
|     namespace algorithm {
 | |
| 
 | |
| //  Generic find -----------------------------------------------//
 | |
| 
 | |
|         //! Generic find algorithm
 | |
|         /*!
 | |
|             Search the input using the given finder.
 | |
| 
 | |
|             \param Input A string which will be searched.
 | |
|             \param Finder Finder object used for searching.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c RangeT::iterator or 
 | |
|                 \c RangeT::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
|         */
 | |
|         template<typename RangeT, typename FinderT>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
 | |
|         find( 
 | |
|             RangeT& Input, 
 | |
|             const FinderT& Finder)
 | |
|         {
 | |
|             iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
 | |
| 
 | |
|             return Finder(::boost::begin(lit_input),::boost::end(lit_input));
 | |
|         }
 | |
| 
 | |
| //  find_first  -----------------------------------------------//
 | |
| 
 | |
|         //! Find first algorithm
 | |
|         /*!
 | |
|             Search for the first occurrence of the substring in the input. 
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c RangeT::iterator or 
 | |
|                 \c RangeT::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
|               \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         find_first( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search));
 | |
|         }
 | |
| 
 | |
|         //! Find first algorithm ( case insensitive )
 | |
|         /*!
 | |
|             Search for the first occurrence of the substring in the input. 
 | |
|             Searching is case insensitive.
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \param Loc A locale used for case insensitive comparison
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
|             \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         ifind_first( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search,
 | |
|             const std::locale& Loc=std::locale())
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search,is_iequal(Loc)));
 | |
|         }
 | |
| 
 | |
| //  find_last  -----------------------------------------------//
 | |
| 
 | |
|         //! Find last algorithm
 | |
|         /*!
 | |
|             Search for the last occurrence of the substring in the input. 
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
|             \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         find_last( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search));
 | |
|         }
 | |
| 
 | |
|         //! Find last algorithm ( case insensitive )
 | |
|         /*!
 | |
|             Search for the last match a string in the input. 
 | |
|             Searching is case insensitive.
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \param Loc A locale used for case insensitive comparison
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
|         
 | |
|             \note This function provides the strong exception-safety guarantee    
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         ifind_last( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search,
 | |
|             const std::locale& Loc=std::locale())
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc)));
 | |
|         }
 | |
| 
 | |
| //  find_nth ----------------------------------------------------------------------//
 | |
| 
 | |
|         //! Find n-th algorithm 
 | |
|         /*!
 | |
|             Search for the n-th (zero-indexed) occurrence of the substring in the 
 | |
|             input.         
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \param Nth An index (zero-indexed) of the match to be found.
 | |
|                 For negative N, the matches are counted from the end of string.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         find_nth( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search,
 | |
|             int Nth)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth));
 | |
|         }
 | |
| 
 | |
|         //! Find n-th algorithm ( case insensitive ).
 | |
|         /*!
 | |
|             Search for the n-th (zero-indexed) occurrence of the substring in the 
 | |
|             input. Searching is case insensitive.
 | |
|             
 | |
|             \param Input A string which will be searched.
 | |
|             \param Search A substring to be searched for.
 | |
|             \param Nth An index (zero-indexed) of the match to be found. 
 | |
|                 For negative N, the matches are counted from the end of string.
 | |
|             \param Loc A locale used for case insensitive comparison
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
| 
 | |
|             \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename Range1T, typename Range2T>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<Range1T>::type>
 | |
|         ifind_nth( 
 | |
|             Range1T& Input, 
 | |
|             const Range2T& Search,
 | |
|             int Nth,
 | |
|             const std::locale& Loc=std::locale())
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth,is_iequal(Loc)));
 | |
|         }
 | |
| 
 | |
| //  find_head ----------------------------------------------------------------------//
 | |
| 
 | |
|         //! Find head algorithm
 | |
|         /*!
 | |
|             Get the head of the input. Head is a prefix of the string of the 
 | |
|             given size. If the input is shorter then required, whole input is considered 
 | |
|             to be the head.
 | |
| 
 | |
|             \param Input An input string
 | |
|             \param N Length of the head
 | |
|                 For N>=0, at most N characters are extracted.
 | |
|                 For N<0, at most size(Input)-|N| characters are extracted.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c Range1T::iterator or 
 | |
|                 \c Range1T::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
|             \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename RangeT>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
 | |
|         find_head( 
 | |
|             RangeT& Input, 
 | |
|             int N)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::head_finder(N));
 | |
|         }
 | |
| 
 | |
| //  find_tail ----------------------------------------------------------------------//
 | |
| 
 | |
|         //! Find tail algorithm
 | |
|         /*!
 | |
|             Get the tail of the input. Tail is a suffix of the string of the 
 | |
|             given size. If the input is shorter then required, whole input is considered 
 | |
|             to be the tail.
 | |
| 
 | |
|             \param Input An input string
 | |
|             \param N Length of the tail. 
 | |
|                 For N>=0, at most N characters are extracted.
 | |
|                 For N<0, at most size(Input)-|N| characters are extracted.
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c RangeT::iterator or 
 | |
|                 \c RangeT::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
| 
 | |
| 
 | |
|             \note This function provides the strong exception-safety guarantee
 | |
|         */
 | |
|         template<typename RangeT>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
 | |
|         find_tail( 
 | |
|             RangeT& Input, 
 | |
|             int N)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::tail_finder(N));
 | |
|         }
 | |
| 
 | |
| //  find_token --------------------------------------------------------------------//
 | |
| 
 | |
|         //! Find token algorithm
 | |
|         /*!
 | |
|             Look for a given token in the string. Token is a character that matches the
 | |
|             given predicate.
 | |
|             If the "token compress mode" is enabled, adjacent tokens are considered to be one match.
 | |
|             
 | |
|             \param Input A input string.
 | |
|             \param Pred A unary predicate to identify a token
 | |
|             \param eCompress Enable/Disable compressing of adjacent tokens
 | |
|             \return 
 | |
|                 An \c iterator_range delimiting the match. 
 | |
|                 Returned iterator is either \c RangeT::iterator or 
 | |
|                 \c RangeT::const_iterator, depending on the constness of 
 | |
|                 the input parameter.
 | |
|         
 | |
|             \note This function provides the strong exception-safety guarantee    
 | |
|         */
 | |
|         template<typename RangeT, typename PredicateT>
 | |
|         inline iterator_range< 
 | |
|             BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
 | |
|         find_token( 
 | |
|             RangeT& Input,
 | |
|             PredicateT Pred,
 | |
|             token_compress_mode_type eCompress=token_compress_off)
 | |
|         {
 | |
|             return ::boost::algorithm::find(Input, ::boost::algorithm::token_finder(Pred, eCompress));
 | |
|         }
 | |
| 
 | |
|     } // namespace algorithm
 | |
| 
 | |
|     // pull names to the boost namespace
 | |
|     using algorithm::find;
 | |
|     using algorithm::find_first;
 | |
|     using algorithm::ifind_first;
 | |
|     using algorithm::find_last;
 | |
|     using algorithm::ifind_last;
 | |
|     using algorithm::find_nth;
 | |
|     using algorithm::ifind_nth;
 | |
|     using algorithm::find_head;
 | |
|     using algorithm::find_tail;
 | |
|     using algorithm::find_token;
 | |
| 
 | |
| } // namespace boost
 | |
| 
 | |
| 
 | |
| #endif  // BOOST_STRING_FIND_HPP
 | 
