lin
2025-01-10 9ec4e21f2f615ef95b70a249569906799e36bace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Copyright 2013 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.
 
#include "base/callback_helpers.h"
 
namespace base {
 
ScopedClosureRunner::ScopedClosureRunner() = default;
 
ScopedClosureRunner::ScopedClosureRunner(OnceClosure closure)
    : closure_(std::move(closure)) {}
 
ScopedClosureRunner::~ScopedClosureRunner() {
  if (!closure_.is_null())
    std::move(closure_).Run();
}
 
ScopedClosureRunner::ScopedClosureRunner(ScopedClosureRunner&& other)
    : closure_(other.Release()) {}
 
ScopedClosureRunner& ScopedClosureRunner::operator=(
    ScopedClosureRunner&& other) {
  ReplaceClosure(other.Release());
  return *this;
}
 
void ScopedClosureRunner::RunAndReset() {
  std::move(closure_).Run();
}
 
void ScopedClosureRunner::ReplaceClosure(OnceClosure closure) {
  closure_ = std::move(closure);
}
 
OnceClosure ScopedClosureRunner::Release() {
  return std::move(closure_);
}
 
}  // namespace base