GCC Code Coverage Report
Directory: ../ Exec Total Coverage
File: /home/iojs/build/workspace/node-test-commit-linux-coverage-daily/nodes/benchmark/out/../src/callback_queue-inl.h Lines: 41 42 97.6 %
Date: 2021-04-20 04:11:54 Branches: 7 8 87.5 %

Line Branch Exec Source
1
#ifndef SRC_CALLBACK_QUEUE_INL_H_
2
#define SRC_CALLBACK_QUEUE_INL_H_
3
4
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
6
#include "callback_queue.h"
7
8
namespace node {
9
10
template <typename R, typename... Args>
11
template <typename Fn>
12
std::unique_ptr<typename CallbackQueue<R, Args...>::Callback>
13
65730
CallbackQueue<R, Args...>::CreateCallback(Fn&& fn, CallbackFlags::Flags flags) {
14
65730
  return std::make_unique<CallbackImpl<Fn>>(std::move(fn), flags);
15
}
16
17
template <typename R, typename... Args>
18
std::unique_ptr<typename CallbackQueue<R, Args...>::Callback>
19
1081509
CallbackQueue<R, Args...>::Shift() {
20
1081509
  std::unique_ptr<Callback> ret = std::move(head_);
21
1081518
  if (ret) {
22
65674
    head_ = ret->get_next();
23
65674
    if (!head_)
24
59140
      tail_ = nullptr;  // The queue is now empty.
25
65674
    size_--;
26
  }
27
1081517
  return ret;
28
}
29
30
template <typename R, typename... Args>
31
65730
void CallbackQueue<R, Args...>::Push(std::unique_ptr<Callback> cb) {
32
65730
  Callback* prev_tail = tail_;
33
34
65730
  size_++;
35
65731
  tail_ = cb.get();
36
65731
  if (prev_tail != nullptr)
37
6552
    prev_tail->set_next(std::move(cb));
38
  else
39
59179
    head_ = std::move(cb);
40
65730
}
41
42
template <typename R, typename... Args>
43
9196
void CallbackQueue<R, Args...>::ConcatMove(CallbackQueue<R, Args...>&& other) {
44
9196
  size_ += other.size_;
45
9196
  if (tail_ != nullptr)
46
    tail_->set_next(std::move(other.head_));
47
  else
48
9196
    head_ = std::move(other.head_);
49
9196
  tail_ = other.tail_;
50
9196
  other.tail_ = nullptr;
51
9196
  other.size_ = 0;
52
9196
}
53
54
template <typename R, typename... Args>
55
1048531
size_t CallbackQueue<R, Args...>::size() const {
56
2097063
  return size_.load();
57
}
58
59
template <typename R, typename... Args>
60
65730
CallbackQueue<R, Args...>::Callback::Callback(CallbackFlags::Flags flags)
61
65730
  : flags_(flags) {}
62
63
template <typename R, typename... Args>
64
57131
CallbackFlags::Flags CallbackQueue<R, Args...>::Callback::flags() const {
65
57131
  return flags_;
66
}
67
68
template <typename R, typename... Args>
69
std::unique_ptr<typename CallbackQueue<R, Args...>::Callback>
70
65674
CallbackQueue<R, Args...>::Callback::get_next() {
71
65674
  return std::move(next_);
72
}
73
74
template <typename R, typename... Args>
75
6552
void CallbackQueue<R, Args...>::Callback::set_next(
76
    std::unique_ptr<Callback> next) {
77
6552
  next_ = std::move(next);
78
6552
}
79
80
template <typename R, typename... Args>
81
template <typename Fn>
82
65730
CallbackQueue<R, Args...>::CallbackImpl<Fn>::CallbackImpl(
83
    Fn&& callback, CallbackFlags::Flags flags)
84
  : Callback(flags),
85
65730
    callback_(std::move(callback)) {}
86
87
template <typename R, typename... Args>
88
template <typename Fn>
89
65494
R CallbackQueue<R, Args...>::CallbackImpl<Fn>::Call(Args... args) {
90
65494
  return callback_(std::forward<Args>(args)...);
91
}
92
93
}  // namespace node
94
95
#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
96
97
#endif  // SRC_CALLBACK_QUEUE_INL_H_