LCOV - code coverage report
Current view: top level - src/base - adapters.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-02-19 Functions: 8 8 100.0 %

          Line data    Source code
       1             : // Copyright 2014 The Chromium 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             : // Slightly adapted for inclusion in V8.
       6             : // Copyright 2014 the V8 project authors. All rights reserved.
       7             : 
       8             : #ifndef V8_BASE_ADAPTERS_H_
       9             : #define V8_BASE_ADAPTERS_H_
      10             : 
      11             : #include <iterator>
      12             : 
      13             : #include "src/base/macros.h"
      14             : 
      15             : namespace v8 {
      16             : namespace base {
      17             : 
      18             : // Internal adapter class for implementing base::Reversed.
      19             : template <typename T>
      20             : class ReversedAdapter {
      21             :  public:
      22             :   using Iterator =
      23             :       std::reverse_iterator<decltype(std::begin(std::declval<T>()))>;
      24             : 
      25         112 :   explicit ReversedAdapter(T& t) : t_(t) {}
      26             :   ReversedAdapter(const ReversedAdapter& ra) V8_NOEXCEPT = default;
      27             : 
      28             :   // TODO(clemensh): Use std::rbegin/std::rend once we have C++14 support.
      29         112 :   Iterator begin() const { return Iterator(std::end(t_)); }
      30         112 :   Iterator end() const { return Iterator(std::begin(t_)); }
      31             : 
      32             :  private:
      33             :   T& t_;
      34             : 
      35             :   DISALLOW_ASSIGN(ReversedAdapter);
      36             : };
      37             : 
      38             : // Reversed returns a container adapter usable in a range-based "for" statement
      39             : // for iterating a reversible container in reverse order.
      40             : //
      41             : // Example:
      42             : //
      43             : //   std::vector<int> v = ...;
      44             : //   for (int i : base::Reversed(v)) {
      45             : //     // iterates through v from back to front
      46             : //   }
      47             : template <typename T>
      48         112 : ReversedAdapter<T> Reversed(T& t) {
      49         112 :   return ReversedAdapter<T>(t);
      50             : }
      51             : 
      52             : }  // namespace base
      53             : }  // namespace v8
      54             : 
      55             : #endif  // V8_BASE_ADAPTERS_H_

Generated by: LCOV version 1.10