99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								// Boost tokenizer.hpp  -----------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// (c) Copyright Jeremy Siek and John R. Bandela 2001. 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 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/libs/tokenizer for documenation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Revision History:
							 | 
						||
| 
								 | 
							
								// 03 Jul 2003   John Bandela
							 | 
						||
| 
								 | 
							
								//      Converted to new iterator adapter
							 | 
						||
| 
								 | 
							
								// 02 Feb 2002   Jeremy Siek
							 | 
						||
| 
								 | 
							
								//      Removed tabs and a little cleanup.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_TOKENIZER_JRB070303_HPP_
							 | 
						||
| 
								 | 
							
								#define BOOST_TOKENIZER_JRB070303_HPP_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/token_iterator.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  //===========================================================================
							 | 
						||
| 
								 | 
							
								  // A container-view of a tokenized "sequence"
							 | 
						||
| 
								 | 
							
								  template <
							 | 
						||
| 
								 | 
							
								    typename TokenizerFunc = char_delimiters_separator<char>, 
							 | 
						||
| 
								 | 
							
								    typename Iterator = std::string::const_iterator,
							 | 
						||
| 
								 | 
							
								    typename Type = std::string
							 | 
						||
| 
								 | 
							
								  >
							 | 
						||
| 
								 | 
							
								  class tokenizer {
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    typedef token_iterator_generator<TokenizerFunc,Iterator,Type> TGen;
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    // It seems that MSVC does not like the unqualified use of iterator,
							 | 
						||
| 
								 | 
							
								    // Thus we use iter internally when it is used unqualified and
							 | 
						||
| 
								 | 
							
								    // the users of this class will always qualify iterator.     
							 | 
						||
| 
								 | 
							
								    typedef typename TGen::type iter;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    typedef iter iterator;
							 | 
						||
| 
								 | 
							
								    typedef iter const_iterator;
							 | 
						||
| 
								 | 
							
								    typedef Type value_type;
							 | 
						||
| 
								 | 
							
								    typedef value_type& reference;
							 | 
						||
| 
								 | 
							
								    typedef const value_type& const_reference;
							 | 
						||
| 
								 | 
							
								    typedef value_type* pointer;
							 | 
						||
| 
								 | 
							
								    typedef const pointer const_pointer;
							 | 
						||
| 
								 | 
							
								    typedef void size_type;
							 | 
						||
| 
								 | 
							
								    typedef void difference_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tokenizer(Iterator first, Iterator last,
							 | 
						||
| 
								 | 
							
								              const TokenizerFunc& f = TokenizerFunc()) 
							 | 
						||
| 
								 | 
							
								      : first_(first), last_(last), f_(f) { }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    template <typename Container>
							 | 
						||
| 
								 | 
							
								    tokenizer(const Container& c)
							 | 
						||
| 
								 | 
							
								      : first_(c.begin()), last_(c.end()), f_() { }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    template <typename Container>
							 | 
						||
| 
								 | 
							
								    tokenizer(const Container& c,const TokenizerFunc& f)
							 | 
						||
| 
								 | 
							
								      : first_(c.begin()), last_(c.end()), f_(f) { }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    void assign(Iterator first, Iterator last){
							 | 
						||
| 
								 | 
							
								      first_ = first;
							 | 
						||
| 
								 | 
							
								      last_ = last;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    void assign(Iterator first, Iterator last, const TokenizerFunc& f){
							 | 
						||
| 
								 | 
							
								      assign(first,last);
							 | 
						||
| 
								 | 
							
								      f_ = f;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    template <typename Container>
							 | 
						||
| 
								 | 
							
								    void assign(const Container& c){
							 | 
						||
| 
								 | 
							
								      assign(c.begin(),c.end());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    template <typename Container>
							 | 
						||
| 
								 | 
							
								    void assign(const Container& c, const TokenizerFunc& f){
							 | 
						||
| 
								 | 
							
								      assign(c.begin(),c.end(),f);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    iter begin() const { return iter(f_,first_,last_); }
							 | 
						||
| 
								 | 
							
								    iter end() const { return iter(f_,last_,last_); }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    Iterator first_;
							 | 
						||
| 
								 | 
							
								    Iterator last_;
							 | 
						||
| 
								 | 
							
								    TokenizerFunc f_;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |