summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2015-01-19 03:25:33 +0000
committerMichael Gottesman <mgottesman@apple.com>2015-01-19 03:25:33 +0000
commitb93d3dbc1fc963834d51168d34a76815d2906391 (patch)
tree06da28b5c25f969e852855f08e510153f5107f76
parent215d939adac06552b0446c0c361ae2785dfbbc9c (diff)
downloadbcm5719-llvm-b93d3dbc1fc963834d51168d34a76815d2906391.tar.gz
bcm5719-llvm-b93d3dbc1fc963834d51168d34a76815d2906391.zip
[tinyptrvector] Add in a MutableArrayRef implicit conversion operator to complement the ArrayRef implicit conversion operator.
llvm-svn: 226428
-rw-r--r--llvm/include/llvm/ADT/TinyPtrVector.h9
-rw-r--r--llvm/unittests/ADT/TinyPtrVectorTest.cpp21
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/TinyPtrVector.h b/llvm/include/llvm/ADT/TinyPtrVector.h
index bb31540c508..f29608f3d3d 100644
--- a/llvm/include/llvm/ADT/TinyPtrVector.h
+++ b/llvm/include/llvm/ADT/TinyPtrVector.h
@@ -116,6 +116,15 @@ public:
return *Val.template get<VecTy*>();
}
+ // implicit conversion operator to MutableArrayRef.
+ operator MutableArrayRef<EltTy>() {
+ if (Val.isNull())
+ return None;
+ if (Val.template is<EltTy>())
+ return *Val.getAddrOfPtr1();
+ return *Val.template get<VecTy*>();
+ }
+
bool empty() const {
// This vector can be empty if it contains no element, or if it
// contains a pointer to an empty vector.
diff --git a/llvm/unittests/ADT/TinyPtrVectorTest.cpp b/llvm/unittests/ADT/TinyPtrVectorTest.cpp
index a402e8be9df..294dfac0c63 100644
--- a/llvm/unittests/ADT/TinyPtrVectorTest.cpp
+++ b/llvm/unittests/ADT/TinyPtrVectorTest.cpp
@@ -438,3 +438,24 @@ TEST(TinyPtrVectorTest, ArrayRefCtorTest) {
EXPECT_TRUE(V[i] == data[i]);
}
}
+
+TEST(TinyPtrVectorTest, MutableArrayRefTest) {
+ int data_array[128];
+ std::vector<int *> data;
+
+ for (unsigned i = 0, e = 128; i != e; ++i) {
+ data_array[i] = 324 - int(i);
+ data.push_back(&data_array[i]);
+ }
+
+ TinyPtrVector<int *> V(data);
+ EXPECT_TRUE(V.size() == 128);
+ EXPECT_FALSE(V.empty());
+
+ MutableArrayRef<int *> mut_array = V;
+ for (unsigned i = 0, e = 128; i != e; ++i) {
+ EXPECT_TRUE(mut_array[i] == data[i]);
+ mut_array[i] = 324 + mut_array[i];
+ EXPECT_TRUE(mut_array[i] == (324 + data[i]));
+ }
+}
OpenPOWER on IntegriCloud