azure-core-amqp
Loading...
Searching...
No Matches
completion_operation.hpp
1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4#pragma once
5
6#include <condition_variable>
7#include <list>
8#include <memory>
9#include <mutex>
10#include <tuple>
11
12namespace Azure { namespace Core { namespace Amqp { namespace Common { namespace _internal {
13
16 template <typename CompleteFn, typename ArgumentRewriter> struct CompletionOperation
17 {
18 CompleteFn m_onOperationComplete;
19
20 CompletionOperation(CompleteFn const& onOperationComplete)
21 : m_onOperationComplete{onOperationComplete}
22 {
23 }
24
25 template <typename... T> static void OnOperationFn(void* context, T... args)
26 {
27 // Capture the operation into a unique pointer so it will be freed even if the OnOperation
28 // call throws.
29 std::unique_ptr<CompletionOperation> operation;
30 operation.reset(reinterpret_cast<CompletionOperation*>(context));
31 operation->OnOperation(args...);
32 }
33
34 template <typename... T> void OnOperation(T... args)
35 {
36 if (m_onOperationComplete)
37 {
38 ArgumentRewriter::OnOperation(m_onOperationComplete, args...);
39 }
40 }
41 };
42}}}}} // namespace Azure::Core::Amqp::Common::_internal