99#ifndef LLVM_CODEGEN_PBQP_MATH_H
1010#define LLVM_CODEGEN_PBQP_MATH_H
1111
12+ #include " llvm/ADT/ArrayRef.h"
1213#include " llvm/ADT/Hashing.h"
1314#include " llvm/ADT/STLExtras.h"
1415#include " llvm/Support/InterleavedRange.h"
@@ -28,83 +29,74 @@ class Vector {
2829
2930public:
3031 // / Construct a PBQP vector of the given size.
31- explicit Vector (unsigned Length)
32- : Length(Length), Data(std::make_unique<PBQPNum []>(Length)) {}
32+ explicit Vector (unsigned Length) : Data(Length) {}
3333
3434 // / Construct a PBQP vector with initializer.
35- Vector (unsigned Length, PBQPNum InitVal)
36- : Length(Length), Data(std::make_unique<PBQPNum []>(Length)) {
35+ Vector (unsigned Length, PBQPNum InitVal) : Data(Length) {
3736 std::fill (begin (), end (), InitVal);
3837 }
3938
4039 // / Copy construct a PBQP vector.
41- Vector (const Vector &V)
42- : Length(V.Length), Data(std::make_unique<PBQPNum []>(Length)) {
43- llvm::copy (V, begin ());
44- }
40+ Vector (const Vector &V) : Data(ArrayRef<PBQPNum>(V.Data)) {}
4541
4642 // / Move construct a PBQP vector.
47- Vector (Vector &&V)
48- : Length(V.Length), Data(std::move(V.Data)) {
49- V.Length = 0 ;
50- }
43+ Vector (Vector &&V) : Data(std::move(V.Data)) {}
5144
5245 // Iterator-based access.
53- const PBQPNum *begin () const { return Data.get (); }
54- const PBQPNum *end () const { return Data.get () + Length ; }
55- PBQPNum *begin () { return Data.get (); }
56- PBQPNum *end () { return Data.get () + Length ; }
46+ const PBQPNum *begin () const { return Data.begin (); }
47+ const PBQPNum *end () const { return Data.end () ; }
48+ PBQPNum *begin () { return Data.begin (); }
49+ PBQPNum *end () { return Data.end () ; }
5750
5851 // / Comparison operator.
5952 bool operator ==(const Vector &V) const {
60- assert (Length != 0 && Data && " Invalid vector" );
53+ assert (! Data. empty () && " Invalid vector" );
6154 return llvm::equal (*this , V);
6255 }
6356
6457 // / Return the length of the vector
6558 unsigned getLength () const {
66- assert (Length != 0 && Data && " Invalid vector" );
67- return Length ;
59+ assert (! Data. empty () && " Invalid vector" );
60+ return Data. size () ;
6861 }
6962
7063 // / Element access.
7164 PBQPNum& operator [](unsigned Index) {
72- assert (Length != 0 && Data && " Invalid vector" );
73- assert (Index < Length && " Vector element access out of bounds." );
65+ assert (! Data. empty () && " Invalid vector" );
66+ assert (Index < Data. size () && " Vector element access out of bounds." );
7467 return Data[Index];
7568 }
7669
7770 // / Const element access.
7871 const PBQPNum& operator [](unsigned Index) const {
79- assert (Length != 0 && Data && " Invalid vector" );
80- assert (Index < Length && " Vector element access out of bounds." );
72+ assert (! Data. empty () && " Invalid vector" );
73+ assert (Index < Data. size () && " Vector element access out of bounds." );
8174 return Data[Index];
8275 }
8376
8477 // / Add another vector to this one.
8578 Vector& operator +=(const Vector &V) {
86- assert (Length != 0 && Data && " Invalid vector" );
87- assert (Length == V.Length && " Vector length mismatch." );
79+ assert (! Data. empty () && " Invalid vector" );
80+ assert (Data. size () == V.Data . size () && " Vector length mismatch." );
8881 std::transform (begin (), end (), V.begin (), begin (), std::plus<PBQPNum>());
8982 return *this ;
9083 }
9184
9285 // / Returns the index of the minimum value in this vector
9386 unsigned minIndex () const {
94- assert (Length != 0 && Data && " Invalid vector" );
87+ assert (! Data. empty () && " Invalid vector" );
9588 return llvm::min_element (*this ) - begin ();
9689 }
9790
9891private:
99- unsigned Length;
100- std::unique_ptr<PBQPNum []> Data;// Use OwningArrayRef
92+ OwningArrayRef<PBQPNum> Data;
10193};
10294
10395// / Return a hash_value for the given vector.
10496inline hash_code hash_value (const Vector &V) {
10597 const unsigned *VBegin = reinterpret_cast <const unsigned *>(V.begin ());
10698 const unsigned *VEnd = reinterpret_cast <const unsigned *>(V.end ());
107- return hash_combine (V.Length , hash_combine_range (VBegin, VEnd));
99+ return hash_combine (V.Data . size () , hash_combine_range (VBegin, VEnd));
108100}
109101
110102// / Output a textual representation of the given vector on the given
0 commit comments