Index: llvm/trunk/include/llvm/ADT/ArrayRef.h =================================================================== --- llvm/trunk/include/llvm/ADT/ArrayRef.h +++ llvm/trunk/include/llvm/ADT/ArrayRef.h @@ -413,6 +413,25 @@ } }; + /// This is a MutableArrayRef that owns its array. + template class OwningArrayRef : public MutableArrayRef { + public: + OwningArrayRef() {} + OwningArrayRef(size_t Size) : MutableArrayRef(new T[Size], Size) {} + OwningArrayRef(ArrayRef Data) + : MutableArrayRef(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::operator=(Other); + Other.MutableArrayRef::operator=(MutableArrayRef()); + return *this; + } + ~OwningArrayRef() { delete this->data(); } + }; + /// @name ArrayRef Convenience constructors /// @{