diff options
-rw-r--r-- | llvm/include/llvm/ADT/ArrayRef.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/ArrayRef.h b/llvm/include/llvm/ADT/ArrayRef.h index c12688e6dd4..a8480d61981 100644 --- a/llvm/include/llvm/ADT/ArrayRef.h +++ b/llvm/include/llvm/ADT/ArrayRef.h @@ -413,6 +413,25 @@ namespace llvm { } }; + /// This is a MutableArrayRef that owns its array. + template <typename T> class OwningArrayRef : public MutableArrayRef<T> { + public: + OwningArrayRef() {} + OwningArrayRef(size_t Size) : MutableArrayRef<T>(new T[Size], Size) {} + OwningArrayRef(ArrayRef<T> Data) + : MutableArrayRef<T>(new T[Data.size()], Data.size()) { + std::copy(Data.begin(), Data.end(), this->begin()); + } + OwningArrayRef(OwningArrayRef &&Other) { *this = Other; } + OwningArrayRef &operator=(OwningArrayRef &&Other) { + delete this->data(); + this->MutableArrayRef<T>::operator=(Other); + Other.MutableArrayRef<T>::operator=(MutableArrayRef<T>()); + return *this; + } + ~OwningArrayRef() { delete this->data(); } + }; + /// @name ArrayRef Convenience constructors /// @{ |