• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/callback_helpers.h"
6 
7 #include "base/callback.h"
8 
9 namespace base {
10 
ScopedClosureRunner()11 ScopedClosureRunner::ScopedClosureRunner() {}
12 
ScopedClosureRunner(const Closure & closure)13 ScopedClosureRunner::ScopedClosureRunner(const Closure& closure)
14     : closure_(closure) {}
15 
~ScopedClosureRunner()16 ScopedClosureRunner::~ScopedClosureRunner() {
17   if (!closure_.is_null())
18     closure_.Run();
19 }
20 
ScopedClosureRunner(ScopedClosureRunner && other)21 ScopedClosureRunner::ScopedClosureRunner(ScopedClosureRunner&& other)
22     : closure_(other.Release()) {}
23 
operator =(ScopedClosureRunner && other)24 ScopedClosureRunner& ScopedClosureRunner::operator=(
25     ScopedClosureRunner&& other) {
26   ReplaceClosure(other.Release());
27   return *this;
28 }
29 
RunAndReset()30 void ScopedClosureRunner::RunAndReset() {
31   Closure old_closure = Release();
32   if (!old_closure.is_null())
33     old_closure.Run();
34 }
35 
ReplaceClosure(const Closure & closure)36 void ScopedClosureRunner::ReplaceClosure(const Closure& closure) {
37   closure_ = closure;
38 }
39 
Release()40 Closure ScopedClosureRunner::Release() {
41   Closure result = closure_;
42   closure_.Reset();
43   return result;
44 }
45 
46 }  // namespace base
47