Chromium Code Reviews| Index: services/media/framework/ptr.h |
| diff --git a/services/media/framework/ptr.h b/services/media/framework/ptr.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a37900d8a10c4b13db4a4843647da0aef635d51e |
| --- /dev/null |
| +++ b/services/media/framework/ptr.h |
| @@ -0,0 +1,62 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef SERVICES_MEDIA_FRAMEWORK_PTR_H_ |
| +#define SERVICES_MEDIA_FRAMEWORK_PTR_H_ |
| + |
| +#include <memory> |
| + |
| +namespace mojo { |
| +namespace media { |
| + |
| +// unique_ptr with Clone. |
| +template<class T, class Deleter = std::default_delete<T>> |
| +class UniquePtr : public std::unique_ptr<T, Deleter> { |
| + public: |
| + UniquePtr() : std::unique_ptr<T, Deleter>() {} |
| + |
| + UniquePtr(std::nullptr_t) : std::unique_ptr<T, Deleter>() {} |
| + |
| + explicit UniquePtr(T* ptr) : std::unique_ptr<T, Deleter>(ptr) {} |
| + |
| + UniquePtr(UniquePtr&& other) : |
| + std::unique_ptr<T, Deleter>(std::move(other)) {} |
| + |
| + UniquePtr& operator=(std::nullptr_t) { |
| + this->reset(); |
| + return *this; |
| + } |
| + |
| + UniquePtr& operator=(UniquePtr&& other) { |
| + *static_cast<std::unique_ptr<T, Deleter>*>(this) = std::move(other); |
| + return *this; |
| + } |
| + |
| + UniquePtr Clone() const { return *this ? this->get()->Clone() : UniquePtr(); } |
|
johngro
2016/01/26 23:47:29
Do we really want to sub-class std::unique_ptr to
dalesat
2016/01/28 18:49:16
Yes, this is just to get rid of the null check. I'
|
| +}; |
| + |
| +// shared_ptr with upcast to TBase. |
|
johngro
2016/01/26 23:47:29
Why do this? std::shared_ptr already has 3 static
dalesat
2016/01/28 18:49:16
I wasn't aware of static_pointer_cast. This class
johngro
2016/02/01 22:38:16
Acknowledged.
|
| +template<class T, typename TBase> |
| +class SharedPtr : public std::shared_ptr<T> { |
| + public: |
| + SharedPtr() : std::shared_ptr<T>() {} |
| + |
| + SharedPtr(std::nullptr_t) : std::shared_ptr<T>() {} |
| + |
| + explicit SharedPtr(T* ptr) : std::shared_ptr<T>(ptr) {} |
| + |
| + SharedPtr& operator=(std::nullptr_t) { |
| + this->reset(); |
| + return *this; |
| + } |
| + |
| + operator std::shared_ptr<TBase>() const { |
| + return std::shared_ptr<TBase>(*this, this->get()); |
| + } |
| +}; |
| + |
| +} // namespace media |
| +} // namespace mojo |
| + |
| +#endif // SERVICES_MEDIA_FRAMEWORK_PTR_H_ |