@@ -33,13 +33,13 @@ class Vector {
33
33
// / Construct a PBQP vector with initializer.
34
34
Vector (unsigned Length, PBQPNum InitVal)
35
35
: Length(Length), Data(std::make_unique<PBQPNum []>(Length)) {
36
- std::fill (Data. get (), Data. get () + Length , InitVal);
36
+ std::fill (begin (), end () , InitVal);
37
37
}
38
38
39
39
// / Copy construct a PBQP vector.
40
40
Vector (const Vector &V)
41
41
: Length(V.Length), Data(std::make_unique<PBQPNum []>(Length)) {
42
- std ::copy (V. Data . get (), V. Data . get () + Length, Data. get ());
42
+ llvm ::copy (V, begin ());
43
43
}
44
44
45
45
// / Move construct a PBQP vector.
@@ -48,12 +48,16 @@ class Vector {
48
48
V.Length = 0 ;
49
49
}
50
50
51
+ // Iterator-based access.
52
+ const PBQPNum *begin () const { return Data.get (); }
53
+ const PBQPNum *end () const { return Data.get () + Length; }
54
+ PBQPNum *begin () { return Data.get (); }
55
+ PBQPNum *end () { return Data.get () + Length; }
56
+
51
57
// / Comparison operator.
52
58
bool operator ==(const Vector &V) const {
53
59
assert (Length != 0 && Data && " Invalid vector" );
54
- if (Length != V.Length )
55
- return false ;
56
- return std::equal (Data.get (), Data.get () + Length, V.Data .get ());
60
+ return llvm::equal (*this , V);
57
61
}
58
62
59
63
// / Return the length of the vector
@@ -80,15 +84,14 @@ class Vector {
80
84
Vector& operator +=(const Vector &V) {
81
85
assert (Length != 0 && Data && " Invalid vector" );
82
86
assert (Length == V.Length && " Vector length mismatch." );
83
- std::transform (Data.get (), Data.get () + Length, V.Data .get (), Data.get (),
84
- std::plus<PBQPNum>());
87
+ std::transform (begin (), end (), V.begin (), begin (), std::plus<PBQPNum>());
85
88
return *this ;
86
89
}
87
90
88
91
// / Returns the index of the minimum value in this vector
89
92
unsigned minIndex () const {
90
93
assert (Length != 0 && Data && " Invalid vector" );
91
- return std ::min_element (Data. get (), Data. get () + Length) - Data. get ();
94
+ return llvm ::min_element (* this ) - begin ();
92
95
}
93
96
94
97
private:
@@ -98,8 +101,8 @@ class Vector {
98
101
99
102
// / Return a hash_value for the given vector.
100
103
inline hash_code hash_value (const Vector &V) {
101
- unsigned *VBegin = reinterpret_cast <unsigned *>(V.Data . get ());
102
- unsigned *VEnd = reinterpret_cast <unsigned *>(V.Data . get () + V. Length );
104
+ const unsigned *VBegin = reinterpret_cast <const unsigned *>(V.begin ());
105
+ const unsigned *VEnd = reinterpret_cast <const unsigned *>(V.end () );
103
106
return hash_combine (V.Length , hash_combine_range (VBegin, VEnd));
104
107
}
105
108
0 commit comments