diff options
author | Darshan Sen <darshan.sen@postman.com> | 2021-11-13 00:47:42 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-13 00:47:42 +0300 |
commit | 2d368da19f90830e993250050ccd8c6f76bd9cd7 (patch) | |
tree | 74c4f1eae2ac5f60b17da1e634cda5819481243a /src/timer_wrap.h | |
parent | 2037ee85a28c9b54e8a84137e251118ee071aa6f (diff) |
src: prevent extra copies of `TimerWrap::TimerCb`
I noticed that we were taking `TimerCb` as a `const&` and then copying
that into the member. This is completely fine when the constructor is
called with an lvalue. However, when called with an rvalue, we can allow
the `std::function` to be moved into the member instead of falling back
to a copy, so I changed the constructors to take in universal
references. Also, `std::function` constructors can take in multiple
arguments, so I further modified the constructors to use variadic
templates.
Signed-off-by: Darshan Sen <darshan.sen@postman.com>
PR-URL: https://github.com/nodejs/node/pull/40665
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Diffstat (limited to 'src/timer_wrap.h')
-rw-r--r-- | src/timer_wrap.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/timer_wrap.h b/src/timer_wrap.h index dbc23b442be..ac8f00f0d47 100644 --- a/src/timer_wrap.h +++ b/src/timer_wrap.h @@ -16,7 +16,9 @@ class TimerWrap final : public MemoryRetainer { public: using TimerCb = std::function<void()>; - TimerWrap(Environment* env, const TimerCb& fn); + template <typename... Args> + explicit inline TimerWrap(Environment* env, Args&&... args); + TimerWrap(const TimerWrap&) = delete; inline Environment* env() const { return env_; } @@ -50,9 +52,8 @@ class TimerWrap final : public MemoryRetainer { class TimerWrapHandle : public MemoryRetainer { public: - TimerWrapHandle( - Environment* env, - const TimerWrap::TimerCb& fn); + template <typename... Args> + explicit inline TimerWrapHandle(Environment* env, Args&&... args); TimerWrapHandle(const TimerWrapHandle&) = delete; |