Blame boost/tokenizer.hpp

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