Skip to content

Commit 4a1aba3

Browse files
authored
Merge pull request #4 from compnerd/arrayref
Support: remove local definition of ArrayRef
2 parents e6b4f15 + cd2806a commit 4a1aba3

File tree

1 file changed

+3
-83
lines changed
  • include/glow/Support

1 file changed

+3
-83
lines changed

include/glow/Support/ADT.h

Lines changed: 3 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include <string>
1111
#include <vector>
1212

13+
#include "llvm/ADT/ArrayRef.h"
14+
1315
namespace glow {
1416
/// \brief A range adaptor for a pair of iterators.
1517
///
@@ -44,81 +46,7 @@ iterator_range<decltype(begin(std::declval<T>()))> drop_begin(T &&t, int n) {
4446
return make_range(std::next(begin(t), n), end(t));
4547
}
4648

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;
12250

12351
/// MutableArrayRef - Represent a mutable reference to an array (0 or more
12452
/// 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> {
200128
}
201129
};
202130

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-
211131
template <typename T>
212132
inline bool operator==(MutableArrayRef<T> LHS, MutableArrayRef<T> RHS) {
213133
return LHS.equals(RHS);

0 commit comments

Comments
 (0)