CVB++ 15.0
composite_stream.hpp
1#pragma once
2
3#include <memory>
4
5#include "composite_stream_base.hpp"
6#include "../composite.hpp"
7
8namespace Cvb
9{
10
11 CVB_BEGIN_INLINE_NS
12
13 namespace Driver
14 {
15
17
18 class CompositeStream : public CompositeStreamBase
19 {
20 public:
21 using GuardType = HandleGuard<CompositeStreamBase>;
22
23 CompositeStream(HandleGuard<CompositeStreamBase> &&guard, PrivateTag, const DevicePtr &device = {})
24 : CompositeStreamBase(device, std::move(guard))
25 {
26 }
27
29
35 template <class Rep, class Period>
37 const CancellationToken &token)
38 {
39 return CreateWaitResult(InternalWaitFor<Composite>(timeSpan, token));
40 }
41
43
48 template <class Rep, class Period>
50 {
51 return CreateWaitResult(InternalWaitFor<Composite>(timeSpan));
52 }
53
55
61 {
62 return CreateWaitResult(InternalWait<Composite>(token));
63 }
64
66
71 {
72 return CreateWaitResult(InternalWait<Composite>());
73 }
74
75 private:
76 WaitResultTuple<Composite> CreateWaitResult(WaitResultBase<Composite> &&waitResultBase)
77 {
78 HandleGuard<Composite> guard(nullptr);
79 WaitStatus waitStatus = WaitStatus::Ok;
80 std::tie(guard, waitStatus) = std::move(waitResultBase);
81 if (!guard.Handle())
82 return std::make_tuple(CompositePtr(), waitStatus, NodeMapEnumerator());
83 else
84 {
86 return std::make_tuple(composite, waitStatus, NodeMapEnumerator::FromObject(*composite));
87 }
88 }
89 };
90
91 } // namespace Driver
92
94
95 CVB_END_INLINE_NS
96
97} // namespace Cvb
A token to enable cancellation on wait operations.
Definition cancellation_token.hpp:20
static std::unique_ptr< Composite > FromHandle(HandleGuard< Composite > &&guard)
Creates a composite from a classic API handle.
Definition decl_composite.hpp:103
Streams composites.
Definition composite_stream.hpp:19
WaitResultTuple< Composite > Wait()
Waits for ever for the next acquired composite.
Definition composite_stream.hpp:70
WaitResultTuple< Composite > WaitFor(const std::chrono::duration< Rep, Period > &timeSpan)
Waits for the given time span for the next acquired composite.
Definition composite_stream.hpp:49
WaitResultTuple< Composite > Wait(const CancellationToken &token)
Waits for ever for the next acquired composite.
Definition composite_stream.hpp:60
WaitResultTuple< Composite > WaitFor(const std::chrono::duration< Rep, Period > &timeSpan, const CancellationToken &token)
Waits for the given time span for the next acquired composite.
Definition composite_stream.hpp:36
Lazy enumeration of node maps.
Definition node_map_enumerator.hpp:30
static NodeMapEnumerator FromObject(const T &object)
Create a node map enumerator for a given object.
Definition node_map_enumerator.hpp:98
T make_tuple(T... args)
T move(T... args)
Namespace for driver or device related operations.
Definition decl_composite.hpp:26
std::tuple< std::shared_ptr< T >, WaitStatus, NodeMapEnumerator > WaitResultTuple
Tuple holding multiple return values after waiting for a specific payload data.
Definition driver.hpp:579
Root namespace for the Image Manager interface.
Definition c_barcode.h:15
WaitStatus
Status after waiting for an image to be returned.
Definition global.hpp:375
@ Ok
Everything is fine, a new image arrived.
Definition global.hpp:377
std::shared_ptr< Device > DevicePtr
Convenience shared pointer for Device.
Definition global.hpp:94
std::shared_ptr< Composite > CompositePtr
Convenience shared pointer for Composite.
Definition global.hpp:98
T tie(T... args)