Add move constructors for OwningPtr and OwningArrayPtr.
authorJordan Rose <jordan_rose@apple.com>
Thu, 18 Oct 2012 22:22:58 +0000 (22:22 +0000)
committerJordan Rose <jordan_rose@apple.com>
Thu, 18 Oct 2012 22:22:58 +0000 (22:22 +0000)
While LLVM itself is still C++03, there's no reason why tools built on
top of it can't use C++11 features.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166242 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/OwningPtr.h

index ea9495d..05bcd40 100644 (file)
@@ -32,6 +32,15 @@ class OwningPtr {
 public:
   explicit OwningPtr(T *P = 0) : Ptr(P) {}
 
 public:
   explicit OwningPtr(T *P = 0) : Ptr(P) {}
 
+#if LLVM_USE_RVALUE_REFERENCES
+  OwningPtr(OwningPtr &&Other) : Ptr(Other.take()) {}
+
+  OwningPtr &operator=(OwningPtr &&Other) {
+    reset(Other.take());
+    return *this;
+  }
+#endif
+
   ~OwningPtr() {
     delete Ptr;
   }
   ~OwningPtr() {
     delete Ptr;
   }
@@ -86,6 +95,15 @@ class OwningArrayPtr {
 public:
   explicit OwningArrayPtr(T *P = 0) : Ptr(P) {}
 
 public:
   explicit OwningArrayPtr(T *P = 0) : Ptr(P) {}
 
+#if LLVM_USE_RVALUE_REFERENCES
+  OwningArrayPtr(OwningArrayPtr &&Other) : Ptr(Other.take()) {}
+
+  OwningArrayPtr &operator=(OwningArrayPtr &&Other) {
+    reset(Other.take());
+    return *this;
+  }
+#endif
+
   ~OwningArrayPtr() {
     delete [] Ptr;
   }
   ~OwningArrayPtr() {
     delete [] Ptr;
   }