// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine Master // License Agreement. #ifndef OEMCRYPTO_SCOPED_PTR_H_ #define OEMCRYPTO_SCOPED_PTR_H_ #include #include #include namespace wvoec_ref { // TODO(fredgc, jfore): scoped_ptr may not be the best name for this smart // pointer type. It basically works like auto_ptr which is deprecated. #if __cplusplus < 201103L template class scoped_ptr { public: explicit scoped_ptr(T* p = NULL) : ptr_(p) {} T* get() const { return ptr_.get(); } void reset(T* p = NULL) { ptr_.reset(p); } private: std::auto_ptr ptr_; }; #else template class scoped_ptr { public: explicit scoped_ptr(T* p = nullptr) : ptr_(p) {} scoped_ptr(scoped_ptr& r) { ptr_ = std::move(r.ptr_); } T& operator*() const { return *ptr_; } T* operator->() const { return ptr_.get(); } T* get() const { return ptr_.get(); } void reset(T* p = NULL) { ptr_.reset(p); } private: std::unique_ptr ptr_; }; #endif } // namespace wvoec_ref #endif // OEMCRYPTO_SCOPED_PTR_H_