Skip to content

Commit

Permalink
ADT: Add OwningArrayRef class.
Browse files Browse the repository at this point in the history
This is a MutableArrayRef that owns its array.
I plan to use this in D22296.

Differential Revision: https://reviews.llvm.org/D27723

llvm-svn: 289579
  • Loading branch information
pcc committed Dec 13, 2016
1 parent 45102a2 commit d9af299
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions llvm/include/llvm/ADT/ArrayRef.h
Expand Up @@ -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
/// @{

Expand Down

0 comments on commit d9af299

Please sign in to comment.