hamigaki.png

前のページ 上に戻る ホーム 次のページ

Class template line_counting_iterator

hamigaki::line_counting_iterator —

反復子に行数を数える機能を追加する

Synopsis

template<typename Iterator> 
class line_counting_iterator {
public:
  // types
  typedef typename std::iterator_traits<Iterator>::value_type      value_type;       
  typedef typename std::iterator_traits<Iterator>::reference       reference;        
  typedef typename std::iterator_traits<Iterator>::pointer         pointer;          
  typedef typename std::iterator_traits<Iterator>::difference_type difference_type;  
  typedef /* see below */                                          iterator_category;

  // construct/copy/destruct
  line_counting_iterator();
  line_counting_iterator(const Iterator&);
  line_counting_iterator(const Iterator&, int);
  line_counting_iterator(const Iterator&, int, value_type);

  // operators
  reference operator*() const;
  line_counting_iterator<Iterator>& operator++();
  line_counting_iterator<Iterator>& operator--();

  // queries
  const Iterator& base() const;
  int line() const;

  private: Iterator current;
  private: int lines;
  private: value_type newline;
};

Description

iterator_categoryは、typename std::iterator_traits<Iterator>::iterator_categoryに応じて次のように決定される。

iterator_traits<Iterator>::iterator_category iterator_category
std::random_access_iterator_tag std::bidirectional_iterator_tag
std::bidirectional_iterator_tag std::bidirectional_iterator_tag
std::forward_iterator_tag std::forward_iterator_tag
std::input_iterator_tag std::input_iterator_tag

line_counting_iterator construct/copy/destruct

  1. line_counting_iterator();
    Effects:
    current = Iterator();
    lines = -1;
    newline = '\n';
    
  2. line_counting_iterator(const Iterator& it);
    Effects:
    current = it;
    lines = -1;
    newline = '\n';
    
  3. line_counting_iterator(const Iterator& it, int line);
    Effects:
    current = it;
    lines = line;
    newline = '\n';
    
  4. line_counting_iterator(const Iterator& it, int line, value_type nl);
    Effects:
    current = it;
    lines = line;
    newline = nl;
    

line_counting_iterator operators

  1. reference operator*() const;
    Returns: *current
  2. line_counting_iterator<Iterator>& operator++();
    Effects:
    if (*current == newline)
        ++lines;
    ++current;
    
    Returns: *this
  3. line_counting_iterator<Iterator>& operator--();
    Effects:
    --current;
    if (*current == newline)
        --lines;
    
    Returns: *this

line_counting_iterator queries

  1. const Iterator& base() const;
    Returns: current
  2. int line() const;
    Returns: lines
製作著作 © 2006-2008 Takeshi Mouri

前のページ 上に戻る ホーム 次のページ