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