11#pragma once
22#include < bit>
33#include < memory>
4+ #include < winnt.h>
45
5- template <class Parameter = void *>
6+ template <class Parameter = void *>
67class UniqueCallbackAdapter final {
7- static_assert (sizeof (Parameter) >= sizeof (void *));
8- static_assert (alignof (Parameter) >= alignof (void *));
9- using ParameterFunction = void (Parameter);
10- using Deleter = ParameterFunction*;
11- using Invoker = ParameterFunction*;
12- static void noopParameterFunction (Parameter){}
8+ static_assert (sizeof (Parameter) >= sizeof (void *));
9+ static_assert (alignof (Parameter) >= alignof (void *));
10+ using ParameterFunction = void NTAPI (Parameter);
11+ using Deleter = ParameterFunction *;
12+ using Invoker = ParameterFunction *;
13+ static void NTAPI noopParameterFunction (Parameter) {}
1314
1415 Parameter m_param = nullptr ;
1516 Deleter m_deleter = &UniqueCallbackAdapter::noopParameterFunction;
@@ -19,31 +20,32 @@ class UniqueCallbackAdapter final {
1920 struct Helper {
2021 static constexpr auto is_small = (sizeof (Functor) <= sizeof (Parameter));
2122
22- static auto param (Functor&& functor) -> Parameter {
23+ static auto param (Functor && functor) -> Parameter {
2324 if constexpr (is_small) {
2425 auto result = Parameter{};
2526 new (&result) Functor (std::forward<Functor>(functor));
2627 return result;
2728 }
28- else return std::bit_cast<Parameter>(std::make_unique<Functor>(std::forward<Functor>(functor)).release ());
29+ else
30+ return std::bit_cast<Parameter>(std::make_unique<Functor>(std::forward<Functor>(functor)).release ());
2931 }
30- static void deleter (Parameter param) {
32+ static void NTAPI deleter (Parameter param) {
3133 if constexpr (is_small) {
32- auto & functor = *std::launder (std::bit_cast<Functor*>(¶m));
34+ auto & functor = *std::launder (std::bit_cast<Functor *>(¶m));
3335 functor.~Functor ();
3436 }
3537 else {
36- std::unique_ptr<Functor>(std::bit_cast<Functor*>(param));
38+ std::unique_ptr<Functor>(std::bit_cast<Functor *>(param));
3739 }
3840 }
39- static void invoker (Parameter param) {
41+ static void NTAPI invoker (Parameter param) {
4042 if constexpr (is_small) {
41- auto & functor = *std::launder (std::bit_cast<Functor*>(¶m));
43+ auto & functor = *std::launder (std::bit_cast<Functor *>(¶m));
4244 functor ();
4345 functor.~Functor ();
4446 }
4547 else {
46- auto functor_ptr = std::unique_ptr<Functor>(std::bit_cast<Functor*>(param));
48+ auto functor_ptr = std::unique_ptr<Functor>(std::bit_cast<Functor *>(param));
4749 (*functor_ptr)();
4850 }
4951 }
@@ -52,14 +54,14 @@ class UniqueCallbackAdapter final {
5254public:
5355 UniqueCallbackAdapter () = default ;
5456 template <class Functor >
55- explicit UniqueCallbackAdapter (Functor&& functor)
57+ explicit UniqueCallbackAdapter (Functor && functor)
5658 : m_param{Helper<Functor>::param (std::forward<Functor>(functor))}
5759 , m_deleter{&Helper<Functor>::deleter}
5860 , m_invoker{&Helper<Functor>::invoker} {}
59- UniqueCallbackAdapter (const UniqueCallbackAdapter&) = delete ;
60- UniqueCallbackAdapter& operator =(const UniqueCallbackAdapter&) = delete ;
61- UniqueCallbackAdapter (UniqueCallbackAdapter&&) = delete ;
62- UniqueCallbackAdapter& operator =(UniqueCallbackAdapter&&) = delete ;
61+ UniqueCallbackAdapter (const UniqueCallbackAdapter &) = delete ;
62+ UniqueCallbackAdapter & operator =(const UniqueCallbackAdapter &) = delete ;
63+ UniqueCallbackAdapter (UniqueCallbackAdapter &&) = delete ;
64+ UniqueCallbackAdapter & operator =(UniqueCallbackAdapter &&) = delete ;
6365 ~UniqueCallbackAdapter () { m_deleter (m_param); }
6466
6567 auto c_parameter () const -> Parameter { return m_param; }
0 commit comments