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()11ScopedClosureRunner::ScopedClosureRunner() {} 12 ScopedClosureRunner(const Closure & closure)13ScopedClosureRunner::ScopedClosureRunner(const Closure& closure) 14 : closure_(closure) {} 15 ~ScopedClosureRunner()16ScopedClosureRunner::~ScopedClosureRunner() { 17 if (!closure_.is_null()) 18 closure_.Run(); 19 } 20 ScopedClosureRunner(ScopedClosureRunner && other)21ScopedClosureRunner::ScopedClosureRunner(ScopedClosureRunner&& other) 22 : closure_(other.Release()) {} 23 operator =(ScopedClosureRunner && other)24ScopedClosureRunner& ScopedClosureRunner::operator=( 25 ScopedClosureRunner&& other) { 26 ReplaceClosure(other.Release()); 27 return *this; 28 } 29 RunAndReset()30void ScopedClosureRunner::RunAndReset() { 31 Closure old_closure = Release(); 32 if (!old_closure.is_null()) 33 old_closure.Run(); 34 } 35 ReplaceClosure(const Closure & closure)36void ScopedClosureRunner::ReplaceClosure(const Closure& closure) { 37 closure_ = closure; 38 } 39 Release()40Closure ScopedClosureRunner::Release() { 41 Closure result = closure_; 42 closure_.Reset(); 43 return result; 44 } 45 46 } // namespace base 47