vitrio 0.1.4
High-throughput image I/O for Cryo-Electron Microscopy (CryoEM)
Loading...
Searching...
No Matches
span.hpp
1// SPDX-License-Identifier: LGPL-2.1-or-later
2
3#pragma once
4
5#include <vitrio/byte.hpp>
6
7#include <array>
8#include <cstddef>
9#include <type_traits>
10#include <vector>
11
12namespace vitrio
13{
14
27template <typename T>
28class span
29{
30public:
31 using element_type = T;
32 using value_type = typename std::remove_cv<T>::type;
33 using size_type = std::size_t;
34 using difference_type = std::ptrdiff_t;
35 using pointer = T*;
36 using reference = T&;
37 using iterator = T*;
38
42 constexpr span() noexcept;
43
51
61 template <
62 typename U,
64 std::is_convertible<U (*)[], T (*)[]>::value
65 >::type
66 >
68
70 ~span() = default;
71
73
80
87
95
103
112
121
128
135
136private:
137 pointer m_data;
138 size_type m_size;
139};
140
150constexpr span<T> make_span(T *data, std::size_t size) noexcept;
151
160span<T> make_span(std::vector<T> &values) noexcept;
161
170span<const T> make_span(const std::vector<T> &values) noexcept;
171
180template <typename T, std::size_t N>
181span<T> make_span(std::array<T, N> &values) noexcept;
182
191template <typename T, std::size_t N>
192span<const T> make_span(const std::array<T, N> &values) noexcept;
193
202span<byte> as_bytes(span<T> values) noexcept;
203
213span<const byte> as_bytes(span<const T> values) noexcept;
214
215} // namespace vitrio
216
217#include "span.inl"
A multidimensional array of numbers in host memory.
Definition array.hpp:37
A view of a contiguous sequence of elements.
Definition span.hpp:29
constexpr size_type size() const noexcept
Get the number of elements.
constexpr reference front() const noexcept
Get the first element.
constexpr pointer data() const noexcept
Get the first element.
constexpr reference back() const noexcept
Get the last element.
constexpr iterator begin() const noexcept
Get an iterator to the first element.
constexpr span() noexcept
Construct a span of no elements.
constexpr iterator end() const noexcept
Get an iterator past the last element.
constexpr bool empty() const noexcept
Check whether the span has no elements.