1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // 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
|