chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
360 / 448
80.4%
Branches:
336 / 681
49.3%
Functions:
69 / 83, 5 excl
83.1%

util/span.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <array>
5 #include <cstddef>
6 #include <cstring>
7 #include <iterator>
8 #include <type_traits>
9 #include <utility>
10 #include <vector>
11
12 #if __has_include(<version>)
13 #include <version>
14 #endif
15 #ifdef __cpp_lib_ranges
16 #include <ranges>
17 #endif
18 #ifdef __cpp_lib_span
19 #include <span>
20 #endif
21
22 namespace chrono::batch_render {
23
24 template <class T> class Span {
25 template <class Container>
26 using Element = std::remove_pointer_t<decltype(std::data(std::declval<Container&>()))>;
27
28 template <class Container>
29 using FromContainer = std::enable_if_t<
30 !std::is_same_v<std::remove_cv_t<std::remove_reference_t<Container>>, Span> &&
31 (std::is_lvalue_reference_v<Container> || std::is_const_v<T>) &&
32 std::is_convertible_v<Element<Container> (*)[], T (*)[]> &&
33 std::is_convertible_v<decltype(std::size(std::declval<Container&>())), size_t>>;
34
35 public:
36 using element_type = T;
37 using value_type = std::remove_cv_t<T>;
38 using size_type = size_t;
39 using difference_type = ptrdiff_t;
40 using pointer = T*;
41 using const_pointer = const T*;
42 using reference = T&;
43 using const_reference = const T&;
44 using iterator = T*;
45
46 9 constexpr Span() noexcept = default;
47
48
22/28
✓ Branch 1 taken 69121 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 1 time.
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 5 taken 3 times.
✓ Branch 5 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 7 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 1 time.
✓ Branch 9 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 12 taken 1 time.
✓ Branch 12 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 15 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 time.
✓ Branch 32 taken 1 time.
274536 constexpr Span(T* data, size_t size) noexcept : m_data(data), m_size(size) {}
49
50 1 constexpr Span(T* first, T* last) noexcept
51 1 : m_data(first), m_size(static_cast<size_t>(last - first)) {}
52
53
1/2
✗ Branch 1 not taken.
✓ Branch 4 taken 15 times.
18 template <size_t N> constexpr Span(T (&array)[N]) noexcept : m_data(array), m_size(N) {}
54
55 template <class Container, class = FromContainer<Container>>
56
22/68
<unknown function 48>:
✗ Branch 0 not taken.
✓ Branch 1 taken 45000 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 122576 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 12 times.
✓ Branch 5 taken 257 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 24 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2931 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 396 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
<unknown function 56>:
✓ Branch 1 taken 577 times.
✓ Branch 4 taken 577 times.
✓ Branch 7 taken 577 times.
chrono::batch_render::Span<chrono::batch_render::Float2 const>::Span<std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&, void>(std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&):
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&, void>(std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
chrono::batch_render::Span<chrono::batch_render::Float4 const>::Span<std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > const&, void>(std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > const&):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
chrono::batch_render::Span<chrono::batch_render::MipJob const>::Span<std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&):
✓ Branch 3 taken 3 times.
✓ Branch 6 taken 8 times.
✓ Branch 9 taken 2 times.
chrono::batch_render::Span<int const>::Span<std::vector<int, std::allocator<int> > const&, void>(std::vector<int, std::allocator<int> > const&):
✓ Branch 2 taken 1 time.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✗ Branch 1 not taken.
✓ Branch 2 taken 25 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 14 times.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 9 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2930 times.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✗ Branch 2 not taken.
✓ Branch 5 taken 58 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 65258 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
724785 constexpr Span(Container&& container) noexcept(noexcept(std::data(container)))
57
58/119
<unknown function 48>:
✗ Branch 0 not taken.
✓ Branch 1 taken 45575 times.
✗ Branch 1 not taken.
✓ Branch 1 taken 10 times.
✓ Branch 1 taken 13 times.
✓ Branch 1 taken 320 times.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
✓ Branch 3 taken 2 times.
✓ Branch 3 taken 122574 times.
✓ Branch 4 taken 406 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 17 times.
✓ Branch 4 taken 320 times.
✗ Branch 5 not taken.
✓ Branch 5 taken 257 times.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 24 times.
✓ Branch 7 taken 406 times.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 9 taken 1 time.
✓ Branch 10 taken 406 times.
✗ Branch 10 not taken.
✓ Branch 10 taken 9 times.
✓ Branch 13 taken 496 times.
✗ Branch 13 not taken.
✓ Branch 13 taken 9 times.
✓ Branch 16 taken 443 times.
✗ Branch 16 not taken.
✓ Branch 16 taken 311 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 828 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 32 times.
✓ Branch 22 taken 101 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 3918 times.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 162 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 396 times.
✓ Branch 31 taken 57 times.
✓ Branch 34 taken 60 times.
✓ Branch 37 taken 32 times.
✓ Branch 40 taken 130 times.
✓ Branch 43 taken 2437 times.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
<unknown function 56>:
✓ Branch 1 taken 577 times.
✗ Branch 1 not taken.
✓ Branch 4 taken 577 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 577 times.
✓ Branch 7 taken 16 times.
✓ Branch 10 taken 7 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 20 times.
chrono::batch_render::Span<chrono::batch_render::Float2 const>::Span<std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&, void>(std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&):
✗ Branch 1 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 4 taken 2855 times.
✓ Branch 7 taken 944 times.
✓ Branch 10 taken 1135 times.
✓ Branch 13 taken 632 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&):
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&, void>(std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Span<chrono::batch_render::Float4 const>::Span<std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > const&, void>(std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > const&):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Span<chrono::batch_render::MipJob const>::Span<std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&):
✓ Branch 3 taken 3 times.
✓ Branch 6 taken 8 times.
✓ Branch 9 taken 2 times.
chrono::batch_render::Span<int const>::Span<std::vector<int, std::allocator<int> > const&, void>(std::vector<int, std::allocator<int> > const&):
✓ Branch 2 taken 1 time.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✗ Branch 1 not taken.
✓ Branch 2 taken 25 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 14 times.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 9 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19 times.
✗ Branch 7 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2930 times.
✗ Branch 11 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✗ Branch 1 not taken.
✓ Branch 4 taken 58 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 65258 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&):
✗ Branch 1 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
724772 : m_data(std::data(container)), m_size(std::size(container)) {}
58
59 template <class U, class = std::enable_if_t<std::is_convertible_v<U (*)[], T (*)[]>>>
60 1 constexpr Span(Span<U> other) noexcept : m_data(other.data()), m_size(other.size()) {}
61
62 374230 constexpr T* data() const noexcept {
63
19/21
<unknown function 48>:
✓ Branch 1 taken 736 times.
✓ Branch 4 taken 12658 times.
✓ Branch 7 taken 42053 times.
✓ Branch 10 taken 24 times.
<unknown function 62>:
✓ Branch 1 taken 1443 times.
✓ Branch 2 taken 5 times.
✓ Branch 5 taken 243 times.
chrono::batch_render::Span<chrono::batch_render::MipJob const>::Span<std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&):
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 11 times.
✓ Branch 3 taken 3 times.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 63304 times.
✓ Branch 1 taken 84386 times.
✓ Branch 1 taken 1 time.
✓ Branch 3 taken 7 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✓ Branch 9 taken 23 times.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✗ Branch 1 not taken.
✓ Branch 5 taken 14 times.
✓ Branch 8 taken 3 times.
362151 return m_data;
64 }
65
66
7/9
chrono::batch_render::Span<int>::Span<std::vector<int, std::allocator<int> >&, void>(std::vector<int, std::allocator<int> >&):
✓ Branch 1 taken 1 time.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 29 times.
✓ Branch 3 taken 1 time.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✓ Branch 11 taken 10 times.
822480 constexpr size_t size() const noexcept {
67
60/175
<unknown function 46>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 3 taken 15 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 4 times.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
<unknown function 48>:
✓ Branch 0 taken 84660 times.
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 560 times.
✓ Branch 1 taken 13 times.
✓ Branch 2 taken 1348 times.
✓ Branch 2 taken 251966 times.
✓ Branch 3 taken 1554 times.
✓ Branch 3 taken 10283 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 21450 times.
✓ Branch 4 taken 3684 times.
✓ Branch 5 taken 16233 times.
✓ Branch 5 taken 405 times.
✗ Branch 7 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 42049 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 5 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 31 not taken.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 52 not taken.
✗ Branch 55 not taken.
✗ Branch 58 not taken.
✗ Branch 61 not taken.
✗ Branch 64 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
✗ Branch 73 not taken.
✗ Branch 76 not taken.
✗ Branch 79 not taken.
✗ Branch 82 not taken.
✗ Branch 85 not taken.
✗ Branch 88 not taken.
✗ Branch 91 not taken.
✗ Branch 94 not taken.
✗ Branch 97 not taken.
✗ Branch 100 not taken.
✗ Branch 103 not taken.
✗ Branch 106 not taken.
✗ Branch 109 not taken.
✗ Branch 112 not taken.
✗ Branch 115 not taken.
✗ Branch 118 not taken.
✗ Branch 121 not taken.
✗ Branch 124 not taken.
✗ Branch 127 not taken.
✗ Branch 130 not taken.
✗ Branch 133 not taken.
✗ Branch 136 not taken.
✗ Branch 139 not taken.
✗ Branch 142 not taken.
✗ Branch 145 not taken.
✗ Branch 148 not taken.
✗ Branch 151 not taken.
✗ Branch 154 not taken.
✗ Branch 157 not taken.
✗ Branch 160 not taken.
✗ Branch 163 not taken.
✗ Branch 166 not taken.
✗ Branch 169 not taken.
✗ Branch 172 not taken.
✗ Branch 175 not taken.
✗ Branch 178 not taken.
✗ Branch 181 not taken.
✗ Branch 184 not taken.
✗ Branch 187 not taken.
✗ Branch 190 not taken.
✓ Branch 193 taken 1 time.
✗ Branch 196 not taken.
✗ Branch 199 not taken.
✗ Branch 202 not taken.
✗ Branch 205 not taken.
✗ Branch 208 not taken.
✓ Branch 211 taken 5 times.
✗ Branch 214 not taken.
✗ Branch 217 not taken.
✗ Branch 220 not taken.
<unknown function 62>:
✓ Branch 1 taken 1448 times.
✓ Branch 4 taken 243 times.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&, void>(std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > const&):
✓ Branch 0 taken 52 times.
✗ Branch 1 not taken.
chrono::batch_render::Span<chrono::batch_render::MipJob const>::Span<std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>&):
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 14 times.
chrono::batch_render::Span<int const>::Span<std::vector<int, std::allocator<int> > const&, void>(std::vector<int, std::allocator<int> > const&):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 4 times.
✓ Branch 0 taken 1178 times.
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 84365 times.
✗ Branch 1 not taken.
✓ Branch 1 taken 34 times.
✓ Branch 2 taken 137024 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 6 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 3 times.
✓ Branch 5 taken 9 times.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 4 times.
✓ Branch 8 taken 6 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 23 times.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✓ Branch 1 taken 5 times.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 113 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 78 times.
✓ Branch 9 taken 31 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✓ Branch 13 taken 3 times.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 4 times.
✓ Branch 21 taken 3 times.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 1 time.
✓ Branch 28 taken 33 times.
814697 return m_size;
68 }
69
70 16389 constexpr size_t size_bytes() const noexcept {
71
7/8
<unknown function 48>:
✓ Branch 1 taken 16 times.
✓ Branch 4 taken 3 times.
✓ Branch 8 taken 4 times.
<unknown function 56>:
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 3 times.
chrono::batch_render::Span<chrono::batch_render::Float2 const>::Span<std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&, void>(std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&):
✓ Branch 1 taken 18 times.
chrono::batch_render::Span<chrono::batch_render::Float3 const>::Span<std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&, void>(std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>&):
✓ Branch 1 taken 7 times.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✗ Branch 1 not taken.
16288 return m_size * sizeof(T);
72 }
73
74 465820 [[nodiscard]] constexpr bool empty() const noexcept {
75
22/38
<unknown function 46>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 3 times.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
✗ Branch 19 not taken.
<unknown function 48>:
✓ Branch 0 taken 103 times.
✓ Branch 0 taken 59 times.
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 1 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 2 taken 42093 times.
✓ Branch 3 taken 22 times.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 421739 times.
✓ Branch 0 taken 1182 times.
✓ Branch 1 taken 546 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 19 times.
465817 return m_size == 0;
76 }
77
78 1681 constexpr T* begin() const noexcept {
79
7/8
<unknown function 48>:
✓ Branch 1 taken 9 times.
✓ Branch 4 taken 2 times.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
1646 return m_data;
80 }
81
82 32597 constexpr T* end() const noexcept {
83
8/16
<unknown function 46>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 8 taken 7 times.
✓ Branch 11 taken 2 times.
✓ Branch 14 taken 2 times.
<unknown function 48>:
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 8 times.
<unknown function 78>:
✗ Branch 1 not taken.
✗ Branch 4 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 223 times.
✗ Branch 4 not taken.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✓ Branch 1 taken 58 times.
32594 return m_data + m_size;
84 }
85
86
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 22 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 10 times.
4604405 constexpr T& operator[](size_t index) const noexcept {
87
89/160
<unknown function 46>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 14 taken 4 times.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
<unknown function 48>:
✓ Branch 0 taken 82959 times.
✗ Branch 0 not taken.
✓ Branch 1 taken 4735 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 2 taken 1205 times.
✗ Branch 3 not taken.
✓ Branch 3 taken 15 times.
✓ Branch 4 taken 11 times.
✓ Branch 4 taken 173176 times.
✓ Branch 5 taken 78844 times.
✓ Branch 6 taken 4 times.
✓ Branch 6 taken 186823 times.
✗ Branch 7 not taken.
✓ Branch 7 taken 2869 times.
✓ Branch 7 taken 21450 times.
✗ Branch 8 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 12 taken 1147 times.
✗ Branch 13 not taken.
✓ Branch 13 taken 240 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 22 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 19 taken 425 times.
✗ Branch 20 not taken.
✓ Branch 20 taken 1299 times.
✗ Branch 22 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 25 taken 1 time.
✓ Branch 28 taken 1 time.
✓ Branch 31 taken 1 time.
✓ Branch 34 taken 1 time.
✓ Branch 37 taken 1 time.
✓ Branch 40 taken 1 time.
✓ Branch 61 taken 601 times.
✓ Branch 62 taken 56 times.
✓ Branch 63 taken 234 times.
✓ Branch 64 taken 517 times.
✓ Branch 65 taken 829 times.
✓ Branch 66 taken 376 times.
✓ Branch 67 taken 397 times.
✓ Branch 68 taken 48 times.
chrono::batch_render::Span<chrono::batch_render::Float2 const>::Span<std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&, void>(std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > const&):
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
chrono::batch_render::Span<int const>::Span<std::vector<int, std::allocator<int> > const&, void>(std::vector<int, std::allocator<int> > const&):
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
chrono::batch_render::Span<int>::Span<std::vector<int, std::allocator<int> >&, void>(std::vector<int, std::allocator<int> >&):
✓ Branch 1 taken 1 time.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 5 times.
✓ Branch 1 taken 624987 times.
✗ Branch 2 not taken.
✓ Branch 2 taken 160344 times.
✗ Branch 3 not taken.
✓ Branch 3 taken 13 times.
✓ Branch 3 taken 50 times.
✓ Branch 4 taken 2 times.
✓ Branch 4 taken 12 times.
✓ Branch 4 taken 138553 times.
✓ Branch 5 taken 7 times.
✓ Branch 5 taken 112 times.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 4 times.
✓ Branch 7 taken 1179 times.
✗ Branch 7 not taken.
✓ Branch 7 taken 112 times.
✓ Branch 8 taken 1 time.
✗ Branch 8 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 440 times.
✓ Branch 9 taken 2 times.
✓ Branch 9 taken 39215 times.
✓ Branch 10 taken 12 times.
✓ Branch 10 taken 150685 times.
✓ Branch 11 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 11 taken 22 times.
✓ Branch 12 taken 12 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✓ Branch 17 taken 1 time.
✓ Branch 20 taken 1 time.
✓ Branch 23 taken 1 time.
✓ Branch 26 taken 1 time.
✓ Branch 29 taken 1 time.
✓ Branch 32 taken 1 time.
✓ Branch 35 taken 1 time.
✓ Branch 38 taken 1 time.
✓ Branch 41 taken 1 time.
✓ Branch 44 taken 1 time.
✓ Branch 47 taken 1 time.
✓ Branch 50 taken 1 time.
✓ Branch 53 taken 1 time.
✓ Branch 56 taken 1 time.
✓ Branch 59 taken 1 time.
✓ Branch 62 taken 1 time.
✓ Branch 65 taken 1 time.
✓ Branch 68 taken 1 time.
✓ Branch 71 taken 1 time.
chrono::batch_render::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::Span<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, void>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&):
✓ Branch 59 taken 1605 times.
✓ Branch 60 taken 283 times.
✓ Branch 63 taken 999 times.
✓ Branch 64 taken 2244 times.
✓ Branch 65 taken 78 times.
✗ Branch 66 not taken.
✓ Branch 67 taken 1 time.
✓ Branch 68 taken 1 time.
✓ Branch 70 taken 1 time.
5465426 return m_data[index];
88 }
89
90 constexpr T& front() const noexcept {
91 return m_data[0];
92 }
93
94
1/1
✓ Branch 1 taken 1 time.
139389 constexpr T& back() const noexcept {
95
4/8
<unknown function 46>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
chrono::batch_render::Span<long const>::Span<std::vector<long, std::allocator<long> > const&, void>(std::vector<long, std::allocator<long> > const&):
✓ Branch 0 taken 1182 times.
✓ Branch 1 taken 137023 times.
✓ Branch 2 taken 1181 times.
✗ Branch 3 not taken.
138207 return m_data[m_size - 1];
96 }
97
98 3 constexpr Span first(size_t count) const noexcept {
99
1/1
✓ Branch 2 taken 1 time.
3 return {m_data, count};
100 }
101
102 1 constexpr Span last(size_t count) const noexcept {
103 1 return {m_data + m_size - count, count};
104 }
105
106 649316 constexpr Span subspan(size_t offset, size_t count = size_t(-1)) const noexcept {
107
2/3
✗ Branch 0 not taken.
✓ Branch 1 taken 1496 times.
✓ Branch 3 taken 1212 times.
648591 return {m_data + offset, count == size_t(-1) ? m_size - offset : count};
108 }
109
110 private:
111 T* m_data = nullptr;
112 size_t m_size = 0;
113 };
114
115 template <class T, size_t N> Span(T (&)[N]) -> Span<T>;
116 template <class T, size_t N> Span(std::array<T, N>&) -> Span<T>;
117 template <class T, size_t N> Span(const std::array<T, N>&) -> Span<const T>;
118 template <class Container>
119 Span(Container&) -> Span<std::remove_pointer_t<decltype(std::data(std::declval<Container&>()))>>;
120
121 16300 template <class T> Span<const std::byte> AsBytes(Span<T> span) noexcept {
122 16300 return {reinterpret_cast<const std::byte*>(span.data()), span.size_bytes()};
123 }
124
125 20783 template <class T> std::vector<T> Items(Span<const std::byte> bytes) {
126 20783 std::vector<T> items(bytes.size() / sizeof(T));
127
3/12
std::vector<chrono::batch_render::Double3, std::allocator<chrono::batch_render::Double3> > chrono::batch_render::Items<chrono::batch_render::Double3>(chrono::batch_render::Span<std::byte const>):
✓ Branch 0 taken 140 times.
✗ Branch 1 not taken.
std::vector<chrono::batch_render::Float2, std::allocator<chrono::batch_render::Float2> > chrono::batch_render::Items<chrono::batch_render::Float2>(chrono::batch_render::Span<std::byte const>):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
std::vector<chrono::batch_render::Float3, std::allocator<chrono::batch_render::Float3> > chrono::batch_render::Items<chrono::batch_render::Float3>(chrono::batch_render::Span<std::byte const>):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > chrono::batch_render::Items<chrono::batch_render::Float4>(chrono::batch_render::Span<std::byte const>):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
std::vector<float, std::allocator<float> > chrono::batch_render::Items<float>(chrono::batch_render::Span<std::byte const>):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
std::vector<unsigned int, std::allocator<unsigned int> > chrono::batch_render::Items<unsigned int>(chrono::batch_render::Span<std::byte const>):
✓ Branch 0 taken 1423 times.
✓ Branch 1 taken 1285 times.
20783 if (!items.empty()) {
128 16452 std::memcpy(items.data(), bytes.data(), items.size() * sizeof(T));
129 }
130 20783 return items;
131 }
132
133 }
134
135 #ifdef __cpp_lib_ranges
136 template <class T>
137 inline constexpr bool std::ranges::enable_borrowed_range<chrono::batch_render::Span<T>> = true;
138 #endif
139