Coverage Report

Created: 2019-02-15 18:59

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/ADT/Sequence.h
Line
Count
Source
1
//===- Sequence.h - Utility for producing sequences of values ---*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
/// This routine provides some synthesis utilities to produce sequences of
10
/// values. The names are intentionally kept very short as they tend to occur
11
/// in common and widely used contexts.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_ADT_SEQUENCE_H
16
#define LLVM_ADT_SEQUENCE_H
17
18
#include "llvm/ADT/iterator.h"
19
#include "llvm/ADT/iterator_range.h"
20
#include <algorithm>
21
#include <iterator>
22
#include <utility>
23
24
namespace llvm {
25
26
namespace detail {
27
28
template <typename ValueT>
29
class value_sequence_iterator
30
    : public iterator_facade_base<value_sequence_iterator<ValueT>,
31
                                  std::random_access_iterator_tag,
32
                                  const ValueT> {
33
  using BaseT = typename value_sequence_iterator::iterator_facade_base;
34
35
  ValueT Value;
36
37
public:
38
  using difference_type = typename BaseT::difference_type;
39
  using reference = typename BaseT::reference;
40
41
  value_sequence_iterator() = default;
42
  value_sequence_iterator(const value_sequence_iterator &) = default;
43
  value_sequence_iterator(value_sequence_iterator &&Arg)
44
13.8M
      : Value(std::move(Arg.Value)) {}
llvm::detail::value_sequence_iterator<int>::value_sequence_iterator(llvm::detail::value_sequence_iterator<int>&&)
Line
Count
Source
44
91.1k
      : Value(std::move(Arg.Value)) {}
llvm::detail::value_sequence_iterator<unsigned int>::value_sequence_iterator(llvm::detail::value_sequence_iterator<unsigned int>&&)
Line
Count
Source
44
13.7M
      : Value(std::move(Arg.Value)) {}
45
46
  template <typename U, typename Enabler = decltype(ValueT(std::declval<U>()))>
47
6.92M
  value_sequence_iterator(U &&Value) : Value(std::forward<U>(Value)) {}
llvm::detail::value_sequence_iterator<int>::value_sequence_iterator<int&, int>(int&&&)
Line
Count
Source
47
45.5k
  value_sequence_iterator(U &&Value) : Value(std::forward<U>(Value)) {}
llvm::detail::value_sequence_iterator<unsigned int>::value_sequence_iterator<unsigned int&, unsigned int>(unsigned int&&&)
Line
Count
Source
47
6.88M
  value_sequence_iterator(U &&Value) : Value(std::forward<U>(Value)) {}
48
49
7.19M
  value_sequence_iterator &operator+=(difference_type N) {
50
7.19M
    Value += N;
51
7.19M
    return *this;
52
7.19M
  }
llvm::detail::value_sequence_iterator<int>::operator+=(long)
Line
Count
Source
49
159k
  value_sequence_iterator &operator+=(difference_type N) {
50
159k
    Value += N;
51
159k
    return *this;
52
159k
  }
llvm::detail::value_sequence_iterator<unsigned int>::operator+=(long)
Line
Count
Source
49
7.03M
  value_sequence_iterator &operator+=(difference_type N) {
50
7.03M
    Value += N;
51
7.03M
    return *this;
52
7.03M
  }
53
  value_sequence_iterator &operator-=(difference_type N) {
54
    Value -= N;
55
    return *this;
56
  }
57
  using BaseT::operator-;
58
  difference_type operator-(const value_sequence_iterator &RHS) const {
59
    return Value - RHS.Value;
60
  }
61
62
10.6M
  bool operator==(const value_sequence_iterator &RHS) const {
63
10.6M
    return Value == RHS.Value;
64
10.6M
  }
llvm::detail::value_sequence_iterator<int>::operator==(llvm::detail::value_sequence_iterator<int> const&) const
Line
Count
Source
62
182k
  bool operator==(const value_sequence_iterator &RHS) const {
63
182k
    return Value == RHS.Value;
64
182k
  }
llvm::detail::value_sequence_iterator<unsigned int>::operator==(llvm::detail::value_sequence_iterator<unsigned int> const&) const
Line
Count
Source
62
10.4M
  bool operator==(const value_sequence_iterator &RHS) const {
63
10.4M
    return Value == RHS.Value;
64
10.4M
  }
65
  bool operator<(const value_sequence_iterator &RHS) const {
66
    return Value < RHS.Value;
67
  }
68
69
7.24M
  reference operator*() const { return Value; }
llvm::detail::value_sequence_iterator<int>::operator*() const
Line
Count
Source
69
159k
  reference operator*() const { return Value; }
llvm::detail::value_sequence_iterator<unsigned int>::operator*() const
Line
Count
Source
69
7.08M
  reference operator*() const { return Value; }
70
};
71
72
} // end namespace detail
73
74
template <typename ValueT>
75
iterator_range<detail::value_sequence_iterator<ValueT>> seq(ValueT Begin,
76
3.46M
                                                            ValueT End) {
77
3.46M
  return make_range(detail::value_sequence_iterator<ValueT>(Begin),
78
3.46M
                    detail::value_sequence_iterator<ValueT>(End));
79
3.46M
}
llvm::iterator_range<llvm::detail::value_sequence_iterator<int> > llvm::seq<int>(int, int)
Line
Count
Source
76
22.7k
                                                            ValueT End) {
77
22.7k
  return make_range(detail::value_sequence_iterator<ValueT>(Begin),
78
22.7k
                    detail::value_sequence_iterator<ValueT>(End));
79
22.7k
}
llvm::iterator_range<llvm::detail::value_sequence_iterator<unsigned int> > llvm::seq<unsigned int>(unsigned int, unsigned int)
Line
Count
Source
76
3.44M
                                                            ValueT End) {
77
3.44M
  return make_range(detail::value_sequence_iterator<ValueT>(Begin),
78
3.44M
                    detail::value_sequence_iterator<ValueT>(End));
79
3.44M
}
80
81
} // end namespace llvm
82
83
#endif // LLVM_ADT_SEQUENCE_H