Blame view

3rdparty/boost_1_81_0/boost/tokenizer.hpp 2.72 KB
dbf9e800   Hu Chunming   提交_GLIBCXX_USE_CX...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  // 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