| 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..824f1a73642b7f8eb9339549c0fa42b578f262ff
|
| --- /dev/null
|
| +++ b/services/media/framework/ptr.h
|
| @@ -0,0 +1,64 @@
|
| +// 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.
|
| +// TODO(dalesat): Remove in favor of unique_ptr and a Clone template function.
|
| +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(); }
|
| +};
|
| +
|
| +// shared_ptr with upcast to TBase.
|
| +// TODO(dalesat): Remove in favor of shared_ptr.
|
| +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_
|
|
|