[Object] Modify OwningBinary's interface to separate inspection from ownership.
[oota-llvm.git] / include / llvm / Object / Binary.h
index e4cb6f49a09e693f027f6ccfe9b8f0a6b0cbd6ba..4b2b7e6835ccdf7e68407eb472574c0abf40eaba 100644 (file)
@@ -139,9 +139,10 @@ public:
   OwningBinary(OwningBinary<T>&& Other);
   OwningBinary<T> &operator=(OwningBinary<T> &&Other);
 
-  std::unique_ptr<T> &getBinary();
-  const std::unique_ptr<T> &getBinary() const;
-  std::unique_ptr<MemoryBuffer> &getBuffer();
+  std::pair<std::unique_ptr<T>, std::unique_ptr<MemoryBuffer>> takeBinary();
+
+  T* getBinary();
+  const T* getBinary() const;
 };
 
 template <typename T>
@@ -162,18 +163,18 @@ OwningBinary<T> &OwningBinary<T>::operator=(OwningBinary &&Other) {
   return *this;
 }
 
-template <typename T> std::unique_ptr<T> &OwningBinary<T>::getBinary() {
-  return Bin;
+template <typename T>
+std::pair<std::unique_ptr<T>, std::unique_ptr<MemoryBuffer>>
+OwningBinary<T>::takeBinary() {
+  return std::make_pair(std::move(Bin), std::move(Buf));
 }
 
-template <typename T>
-const std::unique_ptr<T> &OwningBinary<T>::getBinary() const {
-  return Bin;
+template <typename T> T* OwningBinary<T>::getBinary() {
+  return Bin.get();
 }
 
-template <typename T>
-std::unique_ptr<MemoryBuffer> &OwningBinary<T>::getBuffer() {
-  return Buf;
+template <typename T> const T* OwningBinary<T>::getBinary() const {
+  return Bin.get();
 }
 
 ErrorOr<OwningBinary<Binary>> createBinary(StringRef Path);