LCOV - code coverage report
Current view: top level - src/base - iterator.h (source / functions) Hit Total Coverage
Test: app.info Lines: 2 2 100.0 %
Date: 2019-01-20 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2014 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_BASE_ITERATOR_H_
       6             : #define V8_BASE_ITERATOR_H_
       7             : 
       8             : #include <iterator>
       9             : 
      10             : namespace v8 {
      11             : namespace base {
      12             : 
      13             : template <class Category, class Type, class Diff = std::ptrdiff_t,
      14             :           class Pointer = Type*, class Reference = Type&>
      15             : struct iterator {
      16             :   typedef Category iterator_category;
      17             :   typedef Type value_type;
      18             :   typedef Diff difference_type;
      19             :   typedef Pointer pointer;
      20             :   typedef Reference reference;
      21             : };
      22             : 
      23             : // The intention of the base::iterator_range class is to encapsulate two
      24             : // iterators so that the range defined by the iterators can be used like
      25             : // a regular STL container (actually only a subset of the full container
      26             : // functionality is available usually).
      27             : template <typename ForwardIterator>
      28             : class iterator_range {
      29             :  public:
      30             :   typedef ForwardIterator iterator;
      31             :   typedef ForwardIterator const_iterator;
      32             :   typedef typename std::iterator_traits<iterator>::pointer pointer;
      33             :   typedef typename std::iterator_traits<iterator>::reference reference;
      34             :   typedef typename std::iterator_traits<iterator>::value_type value_type;
      35             :   typedef
      36             :       typename std::iterator_traits<iterator>::difference_type difference_type;
      37             : 
      38             :   iterator_range() : begin_(), end_() {}
      39             :   template <typename ForwardIterator1, typename ForwardIterator2>
      40             :   iterator_range(ForwardIterator1&& begin, ForwardIterator2&& end)
      41             :       : begin_(std::forward<ForwardIterator1>(begin)),
      42             :         end_(std::forward<ForwardIterator2>(end)) {}
      43             : 
      44             :   iterator begin() { return begin_; }
      45             :   iterator end() { return end_; }
      46             :   const_iterator begin() const { return begin_; }
      47             :   const_iterator end() const { return end_; }
      48             :   const_iterator cbegin() const { return begin_; }
      49             :   const_iterator cend() const { return end_; }
      50             : 
      51             :   bool empty() const { return cbegin() == cend(); }
      52             : 
      53             :   // Random Access iterators only.
      54          10 :   reference operator[](difference_type n) { return begin()[n]; }
      55           1 :   difference_type size() const { return cend() - cbegin(); }
      56             : 
      57             :  private:
      58             :   const_iterator const begin_;
      59             :   const_iterator const end_;
      60             : };
      61             : 
      62             : }  // namespace base
      63             : }  // namespace v8
      64             : 
      65             : #endif  // V8_BASE_ITERATOR_H_

Generated by: LCOV version 1.10