cancellation_token_source.hpp
1 #pragma once
2 
3 #include "cancellation_token.hpp"
4 
5 namespace Cvb
6 {
7 
8 CVB_BEGIN_INLINE_NS
9 
10 template <>
11 inline HandleGuard<CancellationTokenSource>::HandleGuard(void* handle) noexcept
12  : HandleGuard<CancellationTokenSource>(handle, [](void* handle) { CVB_CALL_CAPI(ReleaseObject(handle)); })
13 {
14 }
15 
17 
20 {
21  public:
22 
24 
28  : handle_(nullptr)
29  {
30  CExports::CVCANCELLATIONTOKENSOURCE sourceHandle = nullptr;
31  CExports::CVCANCELLATIONTOKEN tokenHandle = nullptr;
32  CVB_CALL_CAPI_CHECKED(CVCCreateCancellationToken(sourceHandle, tokenHandle));
33  handle_ = HandleGuard<CancellationTokenSource>(sourceHandle);
34  token_ = std::make_shared<CancellationToken>(HandleGuard<CancellationToken>(tokenHandle), CancellationToken::PrivateTag{});
35  }
36 
38 
44  void* Handle() const noexcept
45  {
46  return handle_.Handle();
47  }
48 
50 
54  CancellationTokenPtr Token() const noexcept
55  {
56  return token_;
57  }
58 
60 
65  void Cancel()
66  {
67  CVB_CALL_CAPI_CHECKED(CVCCancellationTokenSourceCancel(Handle()));
68  }
69 
70  private:
71 
72  HandleGuard<CancellationTokenSource> handle_;
73  CancellationTokenPtr token_;
74 };
75 
76 CVB_END_INLINE_NS
77 
78 }
Provides tokens and signals tokens cancellation.
Definition: cancellation_token_source.hpp:19
CancellationTokenPtr Token() const noexcept
Get a token for this source.
Definition: cancellation_token_source.hpp:54
Root namespace for the Image Manager interface.
Definition: version.hpp:11
CancellationTokenSource()
Default constructor.
Definition: cancellation_token_source.hpp:27
void Cancel()
Signals the tokens cancellation.
Definition: cancellation_token_source.hpp:65
void * Handle() const noexcept
Classic API image handle.
Definition: cancellation_token_source.hpp:44