co_usb
Loading...
Searching...
No Matches
sequence_view.hpp
Go to the documentation of this file.
1
6#pragma once
7
10#include <libusb.h>
11#include <utility>
12#include <vector>
13
14namespace co_usb::transfer
15{
16
27template <detail::TransferSequence Seq> struct sequence_view
28{
29 using iterator_type = decltype(detail::transfer_begin(std::declval<Seq const &>()));
30
31 sequence_view (Seq const &seq) noexcept
32 : m_begin(detail::transfer_begin(seq)), m_end(detail::transfer_end(seq))
33 {
34 }
35
37 {
38 }
39
40 // disallow bind to temporary view
41 sequence_view(Seq const &&) = delete;
42
43 auto size () const noexcept -> size_t
44 {
45 return m_end - m_begin;
46 }
47
48 [[nodiscard]] auto begin () const noexcept
49 {
50 return m_begin;
51 }
52
53 [[nodiscard]] auto end () const noexcept
54 {
55 return m_begin;
56 }
57
58 private:
59 iterator_type m_begin;
60 iterator_type m_end;
61};
62
63template <class Seq> sequence_view(Seq &) -> sequence_view<Seq>;
65 "Not a proper transfer sequence");
67 "Not a proper transfer sequence");
68
69} // namespace co_usb::transfer
A sequence of co_usb::transfer::detail::TransferResource.
Definition transfer_sequence.hpp:67
Iterator helpers for processing transfer sequences.
constexpr struct co_usb::transfer::detail::@1 transfer_end
constexpr struct co_usb::transfer::detail::@0 transfer_begin
Definition complete_io.hpp:18
View of a certain transfer sequence. Provides a uniform range interface.
Definition sequence_view.hpp:28
sequence_view(iterator_type begin, iterator_type end) noexcept
Definition sequence_view.hpp:36
sequence_view(Seq const &&)=delete
decltype(detail::transfer_begin(std::declval< Seq const & >())) iterator_type
Definition sequence_view.hpp:29
auto size() const noexcept -> size_t
Definition sequence_view.hpp:43
sequence_view(Seq const &seq) noexcept
Definition sequence_view.hpp:31
auto begin() const noexcept
Definition sequence_view.hpp:48
auto end() const noexcept
Definition sequence_view.hpp:53
Transfer resource and transfer sequence concepts.