CVB++ 15.0
cancellation_token_source.hpp
1#pragma once
2
3#include "cancellation_token.hpp"
4
5namespace 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:
23
27 : handle_(nullptr)
28 {
29 CExports::CVCANCELLATIONTOKENSOURCE sourceHandle = nullptr;
30 CExports::CVCANCELLATIONTOKEN tokenHandle = nullptr;
31 CVB_CALL_CAPI_CHECKED(CVCCreateCancellationToken(sourceHandle, tokenHandle));
32 handle_ = HandleGuard<CancellationTokenSource>(sourceHandle);
33 token_ = std::make_shared<CancellationToken>(HandleGuard<CancellationToken>(tokenHandle),
34 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 HandleGuard<CancellationTokenSource> handle_;
73 };
74
75 CVB_END_INLINE_NS
76
77} // namespace Cvb
CancellationTokenPtr Token() const noexcept
Get a token for this source.
Definition cancellation_token_source.hpp:54
CancellationTokenSource()
Default constructor.
Definition cancellation_token_source.hpp:26
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
cvbbool_t ReleaseObject(OBJ &Object)
T make_shared(T... args)
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::shared_ptr< CancellationToken > CancellationTokenPtr
Convenience shared pointer for CancellationToken.
Definition global.hpp:110