/home/arjun/llvm-project/llvm/include/llvm/ADT/Sequence.h
Line | Count | Source (jump to first uncovered line) |
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 | 0 | : Value(std::move(Arg.Value)) {} Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIlEC2EOS2_ Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIiEC2EOS2_ Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIjEC2EOS2_ |
45 | | |
46 | | template <typename U, typename Enabler = decltype(ValueT(std::declval<U>()))> |
47 | 0 | value_sequence_iterator(U &&Value) : Value(std::forward<U>(Value)) {} Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIlEC2IRllEEOT_ Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIiEC2IRiiEEOT_ Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIjEC2IRjjEEOT_ |
48 | | |
49 | 0 | value_sequence_iterator &operator+=(difference_type N) { |
50 | 0 | Value += N; |
51 | 0 | return *this; |
52 | 0 | } Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIlEpLEl Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIiEpLEl Unexecuted instantiation: _ZN4llvm6detail23value_sequence_iteratorIjEpLEl |
53 | | value_sequence_iterator &operator-=(difference_type N) { |
54 | | Value -= N; |
55 | | return *this; |
56 | | } |
57 | | using BaseT::operator-; |
58 | 0 | difference_type operator-(const value_sequence_iterator &RHS) const { |
59 | 0 | return Value - RHS.Value; |
60 | 0 | } |
61 | | |
62 | 0 | bool operator==(const value_sequence_iterator &RHS) const { |
63 | 0 | return Value == RHS.Value; |
64 | 0 | } Unexecuted instantiation: _ZNK4llvm6detail23value_sequence_iteratorIiEeqERKS2_ Unexecuted instantiation: _ZNK4llvm6detail23value_sequence_iteratorIjEeqERKS2_ |
65 | | bool operator<(const value_sequence_iterator &RHS) const { |
66 | | return Value < RHS.Value; |
67 | | } |
68 | | |
69 | 0 | reference operator*() const { return Value; } Unexecuted instantiation: _ZNK4llvm6detail23value_sequence_iteratorIlEdeEv Unexecuted instantiation: _ZNK4llvm6detail23value_sequence_iteratorIiEdeEv Unexecuted instantiation: _ZNK4llvm6detail23value_sequence_iteratorIjEdeEv |
70 | | }; |
71 | | |
72 | | } // end namespace detail |
73 | | |
74 | | template <typename ValueT> |
75 | | iterator_range<detail::value_sequence_iterator<ValueT>> seq(ValueT Begin, |
76 | 0 | ValueT End) { |
77 | 0 | return make_range(detail::value_sequence_iterator<ValueT>(Begin), |
78 | 0 | detail::value_sequence_iterator<ValueT>(End)); |
79 | 0 | } Unexecuted instantiation: _ZN4llvm3seqIlEENS_14iterator_rangeINS_6detail23value_sequence_iteratorIT_EEEES4_S4_ Unexecuted instantiation: _ZN4llvm3seqIiEENS_14iterator_rangeINS_6detail23value_sequence_iteratorIT_EEEES4_S4_ Unexecuted instantiation: _ZN4llvm3seqIjEENS_14iterator_rangeINS_6detail23value_sequence_iteratorIT_EEEES4_S4_ |
80 | | |
81 | | } // end namespace llvm |
82 | | |
83 | | #endif // LLVM_ADT_SEQUENCE_H |