blob: 269e1c865723f22f262d6649dd3d8ab5d0184169 [file] [log] [blame]
perkj14f41442015-12-01 06:15:451/*
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_
12#define WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_
13
14#include "webrtc/base/bind.h"
15#include "webrtc/base/callback.h"
16#include "webrtc/base/refcount.h"
17#include "webrtc/base/scoped_ref_ptr.h"
18
19namespace rtc {
20
21namespace impl {
22template <class T>
23static inline void DoNothing(const scoped_refptr<T>& object) {}
24} // namespace impl
25
26// KeepRefUntilDone keeps a reference to |object| until the returned
27// callback goes out of scope. If the returned callback is copied, the
28// reference will be released when the last callback goes out of scope.
29template <class ObjectT>
30static inline Callback0<void> KeepRefUntilDone(ObjectT* object) {
31 return rtc::Bind(&impl::DoNothing<ObjectT>, scoped_refptr<ObjectT>(object));
32}
33
34template <class ObjectT>
35static inline Callback0<void> KeepRefUntilDone(
36 const scoped_refptr<ObjectT>& object) {
37 return rtc::Bind(&impl::DoNothing<ObjectT>, object);
38}
39
40} // namespace rtc
41
42
43#endif // WEBRTC_BASE_KEEP_REF_UNTIL_DONE_H_