|
10 | 10 | #include <string>
|
11 | 11 | #include <vector>
|
12 | 12 |
|
| 13 | +#include "llvm/ADT/ArrayRef.h" |
| 14 | + |
13 | 15 | namespace glow {
|
14 | 16 | /// \brief A range adaptor for a pair of iterators.
|
15 | 17 | ///
|
@@ -44,81 +46,7 @@ iterator_range<decltype(begin(std::declval<T>()))> drop_begin(T &&t, int n) {
|
44 | 46 | return make_range(std::next(begin(t), n), end(t));
|
45 | 47 | }
|
46 | 48 |
|
47 |
| -/// ArrayRef - represent a constant reference to an array. |
48 |
| -/// Derived from LLVM's ArrayRef. |
49 |
| -template <typename T> class ArrayRef { |
50 |
| -public: |
51 |
| - using iterator = const T *; |
52 |
| - using const_iterator = const T *; |
53 |
| - using size_type = size_t; |
54 |
| - using reverse_iterator = std::reverse_iterator<iterator>; |
55 |
| - |
56 |
| -private: |
57 |
| - const T *data_ = nullptr; |
58 |
| - size_type length_ = 0; |
59 |
| - |
60 |
| -public: |
61 |
| - /// Construct an empty ArrayRef. |
62 |
| - ArrayRef() = default; |
63 |
| - |
64 |
| - /// Construct an ArrayRef from a single element. |
65 |
| - ArrayRef(const T &one) : data_(&one), length_(1) {} |
66 |
| - |
67 |
| - /// Construct an ArrayRef from a pointer and length. |
68 |
| - ArrayRef(const T *data, size_t length) : data_(data), length_(length) {} |
69 |
| - |
70 |
| - /// Construct an ArrayRef from a range. |
71 |
| - ArrayRef(const T *begin, const T *end) : data_(begin), length_(end - begin) {} |
72 |
| - |
73 |
| - /// Construct an ArrayRef from a std::initializer_list. |
74 |
| - ArrayRef(const std::initializer_list<T> &vec) |
75 |
| - : data_(vec.begin() == vec.end() ? (T *)nullptr : vec.begin()), |
76 |
| - length_(vec.size()) {} |
77 |
| - |
78 |
| - /// Construct an ArrayRef from a std::vector. |
79 |
| - template <typename A> |
80 |
| - ArrayRef(const std::vector<T, A> &vec) |
81 |
| - : data_(vec.data()), length_(vec.size()) {} |
82 |
| - |
83 |
| - iterator begin() const { return data_; } |
84 |
| - iterator end() const { return data_ + length_; } |
85 |
| - |
86 |
| - reverse_iterator rbegin() const { return reverse_iterator(end()); } |
87 |
| - reverse_iterator rend() const { return reverse_iterator(begin()); } |
88 |
| - |
89 |
| - bool empty() const { return length_ == 0; } |
90 |
| - |
91 |
| - const T *data() const { return data_; } |
92 |
| - |
93 |
| - size_t size() const { return length_; } |
94 |
| - |
95 |
| - /// Drop the first element of the array. |
96 |
| - ArrayRef<T> drop_front() const { |
97 |
| - assert(size() >= 1 && "Array is empty"); |
98 |
| - return ArrayRef(data() + 1, size() - 1); |
99 |
| - } |
100 |
| - |
101 |
| - /// Drop the last element of the array. |
102 |
| - ArrayRef<T> drop_back(size_t N = 1) const { |
103 |
| - assert(size() >= 1 && "Array is empty"); |
104 |
| - return ArrayRef(data(), size() - 1); |
105 |
| - } |
106 |
| - |
107 |
| - const T &operator[](size_t Index) const { |
108 |
| - assert(Index < length_ && "Invalid index!"); |
109 |
| - return data_[Index]; |
110 |
| - } |
111 |
| - |
112 |
| - /// equals - Check for element-wise equality. |
113 |
| - bool equals(ArrayRef RHS) const { |
114 |
| - if (length_ != RHS.length_) { |
115 |
| - return false; |
116 |
| - } |
117 |
| - return std::equal(begin(), end(), RHS.begin()); |
118 |
| - } |
119 |
| - |
120 |
| - std::vector<T> vec() const { return std::vector<T>(begin(), end()); } |
121 |
| -}; |
| 49 | +using llvm::ArrayRef; |
122 | 50 |
|
123 | 51 | /// MutableArrayRef - Represent a mutable reference to an array (0 or more
|
124 | 52 | /// elements consecutively in memory), i.e. a start pointer and a length. It
|
@@ -200,14 +128,6 @@ template <typename T> class MutableArrayRef : public ArrayRef<T> {
|
200 | 128 | }
|
201 | 129 | };
|
202 | 130 |
|
203 |
| -template <typename T> inline bool operator==(ArrayRef<T> LHS, ArrayRef<T> RHS) { |
204 |
| - return LHS.equals(RHS); |
205 |
| -} |
206 |
| - |
207 |
| -template <typename T> inline bool operator!=(ArrayRef<T> LHS, ArrayRef<T> RHS) { |
208 |
| - return !(LHS == RHS); |
209 |
| -} |
210 |
| - |
211 | 131 | template <typename T>
|
212 | 132 | inline bool operator==(MutableArrayRef<T> LHS, MutableArrayRef<T> RHS) {
|
213 | 133 | return LHS.equals(RHS);
|
|
0 commit comments