chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
494 / 549
90.0%
Branches:
495 / 1386
35.7%
Functions:
163 / 169, 2 excl
96.4%

stage/views/attribute.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <cstddef>
5 #include <cstdint>
6 #include <functional>
7 #include <memory>
8 #include <string>
9 #include <type_traits>
10 #include <vector>
11
12 #include <dlpack/dlpack.h>
13
14 #include "chrono_batch_render/device/operation.h"
15 #include "chrono_batch_render/device/ref.h"
16 #include "chrono_batch_render/device/stream.h"
17 #include "chrono_batch_render/device/tensor.h"
18 #include "chrono_batch_render/export.h"
19 #include "chrono_batch_render/stage/primvar.h"
20 #include "chrono_batch_render/stage/schema/schema.h"
21 #include "chrono_batch_render/stage/structure/tokens.h"
22 #include "chrono_batch_render/stage/views/mapping.h"
23 #include "chrono_batch_render/stage/views/view.h"
24 #include "chrono_batch_render/util/error.h"
25 #include "chrono_batch_render/util/span.h"
26
27 namespace chrono::batch_render {
28
29 namespace device {
30 class Buffer;
31 }
32
33 class ColumnStore;
34 class ColumnTable;
35 struct Attachment;
36 struct ViewRows;
37
38 enum class AttachFrom : uint8_t { Tensor, Scene };
39
40
117/370
✓ Branch 0 taken 30 times.
✓ Branch 0 taken 926 times.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
✓ Branch 2 taken 1 time.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 4 taken 26 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 1054 times.
✓ Branch 4 taken 78 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 27 times.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 6 times.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 8 not taken.
✗ Branch 8 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✓ Branch 9 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 12 not taken.
✓ Branch 12 taken 288 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 13 taken 1 time.
✓ Branch 13 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 14 not taken.
✓ Branch 14 taken 1 time.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 16 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 17 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 18 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 time.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✓ Branch 20 taken 7 times.
✓ Branch 21 taken 1 time.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 24 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 26 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✓ Branch 27 taken 1 time.
✓ Branch 28 taken 1 time.
✗ Branch 28 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 28 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 30 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 32 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 34 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 36 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 37 taken 3 times.
✓ Branch 38 taken 1 time.
✗ Branch 38 not taken.
✓ Branch 38 taken 3 times.
✗ Branch 39 not taken.
✗ Branch 39 not taken.
✓ Branch 40 taken 1 time.
✓ Branch 40 taken 41055 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 1 time.
✗ Branch 42 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 43 taken 5 times.
✓ Branch 43 taken 1 time.
✓ Branch 44 taken 1 time.
✗ Branch 44 not taken.
✗ Branch 44 not taken.
✓ Branch 44 taken 1 time.
✗ Branch 45 not taken.
✓ Branch 45 taken 68 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 time.
✓ Branch 46 taken 1 time.
✗ Branch 47 not taken.
✓ Branch 47 taken 1 time.
✓ Branch 48 taken 1 time.
✓ Branch 48 taken 1 time.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 49 not taken.
✓ Branch 49 taken 1 time.
✓ Branch 50 taken 1 time.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✓ Branch 51 taken 1 time.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 1 time.
✗ Branch 52 not taken.
✓ Branch 52 taken 1 time.
✗ Branch 53 not taken.
✗ Branch 53 not taken.
✗ Branch 53 not taken.
✓ Branch 53 taken 1 time.
✓ Branch 54 taken 1 time.
✗ Branch 54 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 55 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 56 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✓ Branch 57 taken 1 time.
✓ Branch 57 taken 41069 times.
✗ Branch 58 not taken.
✗ Branch 58 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 59 taken 7 times.
✗ Branch 60 not taken.
✓ Branch 60 taken 1 time.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✓ Branch 61 taken 1 time.
✗ Branch 62 not taken.
✓ Branch 62 taken 1 time.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 63 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 64 taken 1 time.
✗ Branch 65 not taken.
✓ Branch 65 taken 1 time.
✓ Branch 65 taken 1 time.
✓ Branch 66 taken 1 time.
✗ Branch 66 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 time.
✓ Branch 68 taken 1 time.
✓ Branch 68 taken 1 time.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 time.
✓ Branch 70 taken 1 time.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 71 not taken.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 time.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✓ Branch 73 taken 1 time.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 75 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 76 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 77 not taken.
✗ Branch 77 not taken.
✓ Branch 78 taken 1 time.
✗ Branch 78 not taken.
✓ Branch 78 taken 1 time.
✗ Branch 79 not taken.
✗ Branch 79 not taken.
✗ Branch 79 not taken.
✓ Branch 80 taken 1 time.
✓ Branch 80 taken 1 time.
✗ Branch 81 not taken.
✓ Branch 81 taken 1 time.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✓ Branch 83 taken 1 time.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✓ Branch 86 taken 1 time.
✗ Branch 87 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✓ Branch 88 taken 1 time.
✗ Branch 89 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✓ Branch 92 taken 1 time.
✓ Branch 93 taken 1 time.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✓ Branch 95 taken 1 time.
✗ Branch 96 not taken.
✓ Branch 97 taken 1 time.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 98 not taken.
✓ Branch 99 taken 1 time.
✗ Branch 100 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✓ Branch 102 taken 1 time.
✓ Branch 102 taken 1 time.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✓ Branch 104 taken 1 time.
✓ Branch 105 taken 1 time.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✓ Branch 107 taken 1 time.
✓ Branch 108 taken 1 time.
✗ Branch 109 not taken.
✓ Branch 109 taken 1 time.
✓ Branch 110 taken 1 time.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✓ Branch 112 taken 1 time.
✗ Branch 113 not taken.
✗ Branch 113 not taken.
✓ Branch 115 taken 1 time.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✓ Branch 129 taken 1 time.
✗ Branch 130 not taken.
✓ Branch 131 taken 1 time.
✗ Branch 132 not taken.
✓ Branch 133 taken 1 time.
✗ Branch 134 not taken.
✓ Branch 136 taken 1 time.
✓ Branch 138 taken 1 time.
✗ Branch 139 not taken.
✓ Branch 140 taken 1 time.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
178680 class CHRONO_BATCH_RENDER_API UntypedAttribute {
41 public:
42 UntypedAttribute(std::shared_ptr<ViewState> view, ColumnRef column);
43
44 123388 ColumnRef Reference() const {
45
16/24
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 41059 times.
✓ Branch 2 taken 63 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 38 times.
✓ Branch 5 taken 25 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 13 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 41074 times.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 7 times.
✓ Branch 18 taken 3 times.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 8 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
123388 return m_column;
46 }
47
48 uint32_t Size() const;
49 bool Dense() const;
50 uint32_t CellBytes() const;
51
52 void Fill(Span<const std::byte> cell);
53 void Write(Span<const std::byte> cells);
54 device::Operation Write(const DLTensor& source, Stream producer = Stream::None(),
55 const DLTensor* mask = nullptr);
56 device::Operation Write(const device::Tensor& source, Stream producer = Stream::None(),
57 const device::Tensor& mask = {});
58
59 device::Download ReadHostAsync() const;
60 std::vector<std::byte> ReadHost() const;
61 device::Tensor Read(Stream consumer = Stream::Host()) const;
62
63 Mapping Map(MapAccess access, Stream consumer = Stream::None());
64 Mapping MapPrimvar(std::string_view name, MapAccess access, Stream consumer = Stream::None());
65 device::Operation MarkChanged(Stream producer = Stream::None(), const DLTensor* mask = nullptr);
66
67 device::Operation Attach(DLManagedTensor* tensor, Stream producer = Stream::None(),
68 AttachFrom from = AttachFrom::Tensor);
69 device::Operation Attach(DLManagedTensorVersioned* tensor, Stream producer = Stream::None(),
70 AttachFrom from = AttachFrom::Tensor);
71 device::Operation Detach(Stream consumer = Stream::None());
72 device::Operation WaitForReads(Stream consumer = Stream::Host()) const;
73 bool Attached() const;
74
75 void SetArray(uint32_t index, Span<const std::byte> items);
76 std::vector<std::byte> GetArray(uint32_t index) const;
77
78 void SetTargets(uint32_t index, const std::vector<std::string>& paths);
79 std::vector<std::string> GetTargets(uint32_t index) const;
80 void SetTokens(uint32_t index, const std::vector<std::string>& texts);
81 std::vector<std::string> GetTokens(uint32_t index) const;
82 void SetPrimvars(uint32_t index, const std::vector<Primvar>& primvars);
83 std::vector<Primvar> GetPrimvars(uint32_t index) const;
84
85 protected:
86 void CheckValues(size_t count) const;
87 static ColumnRef Checked(ColumnRef column, bool held, bool arrays);
88
89 private:
90 friend class Mapping;
91 friend class Poses;
92
93
3/20
<unknown function 40>:
✗ Branch 0 not taken.
✓ Branch 1 taken 35121 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
<unknown function 93>:
✗ Branch 0 not taken.
✓ Branch 1 taken 35 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
35160 struct Mask {
94 uint64_t address = 0;
95 Ref<device::Buffer> buffer;
96 };
97
98 const ViewRows& Rows() const;
99 ColumnStore& GetColumnStore() const;
100 ColumnTable& GetTable() const;
101 void CheckWritable(bool arrays = false) const;
102 void CheckNotAttached() const;
103 void CheckArrayType(ColumnType type) const;
104 void StageCells(Span<const std::byte> cells);
105 void Retype(Span<const SchemaId> nodes);
106 device::Operation WriteTensor(const DLTensor& source, Stream producer, const DLTensor* mask);
107 using Owner = std::function<std::shared_ptr<const DLTensor>()>;
108 device::Operation AttachTensor(const DLTensor* source, Stream producer, AttachFrom from,
109 const Owner& own);
110 device::Operation AttachArrays(const Attachment& attachment, const DLTensor& source,
111 Stream producer, AttachFrom from);
112 device::Operation CopyArrays(const DLTensor& source, Stream producer, const DLTensor* mask);
113 void ReleaseArrays();
114 void MapArray(Mapping& mapping);
115 void StampWorlds() const;
116 Mask Upload(const DLTensor* mask, Stream producer) const;
117 Mask Upload(const device::Tensor& mask) const;
118 Ref<device::Buffer> GatherCells() const;
119 device::Operation Scatter(uint64_t cells, Stream producer, const Mask& selected);
120 device::Operation Stamp(Stream producer, const DLTensor* mask);
121
122 std::shared_ptr<ViewState> m_view;
123 ColumnRef m_column;
124 };
125
126 template <class T, class = void> struct HasItems : std::false_type {};
127
128 template <class T> struct HasItems<T, std::void_t<typename T::value_type>> : std::true_type {};
129
130 template <class T> struct Identity {
131 using Type = T;
132 };
133
134 template <class T> using AttributeCell = std::conditional_t<std::is_same_v<T, bool>, uint32_t, T>;
135
136 template <class T, class = void> struct AttributeValue;
137
138 template <class T> struct AttributeValue<T, std::enable_if_t<std::is_enum_v<T>>> {
139 static constexpr ColumnType kType = ColumnType::Enum;
140 };
141
142 template <> struct AttributeValue<Token> {
143 static constexpr ColumnType kType = ColumnType::Token;
144 };
145
146 template <> struct AttributeValue<bool> {
147 static constexpr ColumnType kType = ColumnType::Bool;
148 };
149
150 template <> struct AttributeValue<int32_t> {
151 static constexpr ColumnType kType = ColumnType::Int;
152 };
153
154 template <> struct AttributeValue<uint32_t> {
155 static constexpr ColumnType kType = ColumnType::Uint;
156 };
157
158 template <> struct AttributeValue<uint64_t> {
159 static constexpr ColumnType kType = ColumnType::Uint64;
160 };
161
162 template <> struct AttributeValue<float> {
163 static constexpr ColumnType kType = ColumnType::Float;
164 };
165
166 template <> struct AttributeValue<Float2> {
167 static constexpr ColumnType kType = ColumnType::Float2;
168 };
169
170 template <> struct AttributeValue<Float3> {
171 static constexpr ColumnType kType = ColumnType::Float3;
172 };
173
174 template <> struct AttributeValue<Float4> {
175 static constexpr ColumnType kType = ColumnType::Float4;
176 };
177
178 template <> struct AttributeValue<Uint2> {
179 static constexpr ColumnType kType = ColumnType::Uint2;
180 };
181
182 template <> struct AttributeValue<Double3> {
183 static constexpr ColumnType kType = ColumnType::Double3;
184 };
185
186 template <> struct AttributeValue<Quatd> {
187 static constexpr ColumnType kType = ColumnType::Quatd;
188 };
189
190 template <> struct AttributeValue<WorldTransform> {
191 static constexpr ColumnType kType = ColumnType::WorldTransform;
192 };
193
194 13587 template <class T> constexpr bool HeldAs(ColumnType type) {
195 if constexpr (std::is_same_v<T, Token>) {
196 1603 return type == ColumnType::Token || type == ColumnType::Asset;
197 } else {
198 11984 return type == AttributeValue<T>::kType;
199 }
200 }
201
202
195/594
✓ Branch 0 taken 456 times.
✓ Branch 0 taken 140 times.
✓ Branch 0 taken 404 times.
✓ Branch 0 taken 2 times.
✓ Branch 0 taken 1 time.
✗ Branch 0 not taken.
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 450 times.
✓ Branch 2 taken 58 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
✓ Branch 3 taken 26 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 4 taken 406 times.
✓ Branch 4 taken 150 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✓ Branch 5 taken 26 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 5 times.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 254 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 8 taken 437 times.
✓ Branch 8 taken 704 times.
✓ Branch 8 taken 33 times.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 10 taken 26 times.
✗ Branch 10 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 10 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✓ Branch 11 taken 187 times.
✓ Branch 11 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✓ Branch 12 taken 405 times.
✓ Branch 12 taken 9 times.
✓ Branch 12 taken 105 times.
✓ Branch 12 taken 24 times.
✓ Branch 12 taken 95 times.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✓ Branch 13 taken 1 time.
✓ Branch 13 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 14 taken 188 times.
✗ Branch 14 not taken.
✓ Branch 14 taken 106 times.
✓ Branch 14 taken 24 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✓ Branch 15 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 102 times.
✓ Branch 16 taken 494 times.
✗ Branch 16 not taken.
✓ Branch 16 taken 1 time.
✓ Branch 16 taken 2 times.
✓ Branch 16 taken 37 times.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 102 times.
✗ Branch 18 not taken.
✗ Branch 18 not taken.
✓ Branch 18 taken 1 time.
✓ Branch 18 taken 13 times.
✓ Branch 18 taken 1 time.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 19 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✓ Branch 20 taken 437 times.
✗ Branch 20 not taken.
✓ Branch 20 taken 221 times.
✓ Branch 20 taken 4 times.
✓ Branch 20 taken 1 time.
✓ Branch 20 taken 2850 times.
✓ Branch 20 taken 110 times.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✓ Branch 21 taken 1 time.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 15 times.
✗ Branch 22 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 24 taken 828 times.
✓ Branch 24 taken 1 time.
✓ Branch 24 taken 151 times.
✓ Branch 24 taken 5 times.
✗ Branch 24 not taken.
✓ Branch 24 taken 3 times.
✗ Branch 24 not taken.
✓ Branch 24 taken 7 times.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 26 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 26 taken 1 time.
✓ Branch 26 taken 5 times.
✗ Branch 26 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 26 taken 3 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 27 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 28 taken 1212 times.
✗ Branch 28 not taken.
✗ Branch 28 not taken.
✗ Branch 28 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 28 not taken.
✓ Branch 28 taken 4 times.
✓ Branch 28 taken 177 times.
✗ Branch 29 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 30 not taken.
✓ Branch 30 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 30 taken 5 times.
✗ Branch 30 not taken.
✓ Branch 30 taken 2 times.
✓ Branch 30 taken 4 times.
✓ Branch 30 taken 4 times.
✗ Branch 30 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 time.
✓ Branch 32 taken 176 times.
✓ Branch 32 taken 3 times.
✓ Branch 32 taken 1 time.
✗ Branch 32 not taken.
✓ Branch 32 taken 4 times.
✗ Branch 32 not taken.
✗ Branch 32 not taken.
✓ Branch 32 taken 35 times.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 34 not taken.
✗ Branch 34 not taken.
✗ Branch 34 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 34 not taken.
✗ Branch 34 not taken.
✓ Branch 34 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 36 taken 995 times.
✓ Branch 36 taken 1 time.
✓ Branch 36 taken 1 time.
✗ Branch 36 not taken.
✗ Branch 36 not taken.
✓ Branch 36 taken 2 times.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
✗ Branch 37 not taken.
✗ Branch 37 not taken.
✗ Branch 37 not taken.
✗ Branch 37 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 37 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✗ Branch 38 not taken.
✓ Branch 38 taken 1 time.
✗ Branch 39 not taken.
✓ Branch 39 taken 1 time.
✗ Branch 39 not taken.
✗ Branch 39 not taken.
✓ Branch 39 taken 1 time.
✗ Branch 39 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 40 taken 60 times.
✗ Branch 40 not taken.
✓ Branch 40 taken 84 times.
✗ Branch 40 not taken.
✗ Branch 40 not taken.
✓ Branch 40 taken 4 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 42 taken 1 time.
✗ Branch 42 not taken.
✗ Branch 42 not taken.
✓ Branch 42 taken 1 time.
✓ Branch 42 taken 4 times.
✗ Branch 43 not taken.
✗ Branch 43 not taken.
✗ Branch 43 not taken.
✗ Branch 43 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 34 times.
✓ Branch 44 taken 1 time.
✗ Branch 44 not taken.
✓ Branch 44 taken 1 time.
✗ Branch 44 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 46 not taken.
✗ Branch 46 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✓ Branch 47 taken 1 time.
✗ Branch 47 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 48 taken 663 times.
✓ Branch 48 taken 389 times.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 49 not taken.
✗ Branch 49 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 50 not taken.
✗ Branch 50 not taken.
✗ Branch 50 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✓ Branch 51 taken 1 time.
✗ Branch 51 not taken.
✗ Branch 51 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✓ Branch 52 taken 404 times.
✓ Branch 52 taken 1 time.
✓ Branch 52 taken 1 time.
✗ Branch 53 not taken.
✗ Branch 53 not taken.
✗ Branch 53 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 54 not taken.
✓ Branch 54 taken 1 time.
✓ Branch 54 taken 1 time.
✓ Branch 55 taken 404 times.
✗ Branch 55 not taken.
✗ Branch 55 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 56 not taken.
✓ Branch 56 taken 1 time.
✓ Branch 56 taken 1 time.
✗ Branch 57 not taken.
✗ Branch 57 not taken.
✗ Branch 57 not taken.
✗ Branch 57 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 58 not taken.
✓ Branch 58 taken 1 time.
✓ Branch 58 taken 1 time.
✓ Branch 58 taken 1 time.
✗ Branch 59 not taken.
✗ Branch 59 not taken.
✗ Branch 59 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✓ Branch 60 taken 1 time.
✗ Branch 60 not taken.
✓ Branch 61 taken 1 time.
✗ Branch 61 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 62 taken 1 time.
✓ Branch 62 taken 1 time.
✓ Branch 63 taken 1 time.
✗ Branch 63 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 64 not taken.
✗ Branch 64 not taken.
✓ Branch 64 taken 1 time.
✗ Branch 65 not taken.
✗ Branch 65 not taken.
✓ Branch 66 taken 1 time.
✗ Branch 66 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 time.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✓ Branch 70 taken 6 times.
✓ Branch 71 taken 1 time.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✓ Branch 72 taken 6 times.
✗ Branch 73 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✓ Branch 76 taken 1 time.
✗ Branch 77 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✓ Branch 78 taken 1 time.
✗ Branch 79 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 81 not taken.
✓ Branch 82 taken 1 time.
✗ Branch 83 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✓ Branch 85 taken 1 time.
✓ Branch 85 taken 1 time.
✗ Branch 86 not taken.
✓ Branch 87 taken 1 time.
✓ Branch 88 taken 1 time.
✗ Branch 88 not taken.
✓ Branch 90 taken 1 time.
✓ Branch 90 taken 1 time.
✗ Branch 91 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✓ Branch 93 taken 1 time.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✓ Branch 96 taken 2 times.
✗ Branch 97 not taken.
✓ Branch 98 taken 1 time.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✓ Branch 99 taken 1 time.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✓ Branch 102 taken 1 time.
✗ Branch 103 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✓ Branch 105 taken 1 time.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 108 not taken.
✓ Branch 109 taken 1 time.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 110 not taken.
✓ Branch 111 taken 1 time.
✓ Branch 112 taken 1 time.
✗ Branch 112 not taken.
✗ Branch 114 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 115 not taken.
✓ Branch 116 taken 1 time.
✓ Branch 116 taken 1 time.
✗ Branch 117 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✓ Branch 118 taken 1 time.
✓ Branch 119 taken 1 time.
✗ Branch 119 not taken.
✓ Branch 120 taken 1 time.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 121 not taken.
✓ Branch 122 taken 1 time.
✓ Branch 123 taken 1 time.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✓ Branch 124 taken 1 time.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✓ Branch 132 taken 1 time.
✗ Branch 133 not taken.
✓ Branch 134 taken 1 time.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✓ Branch 138 taken 1 time.
✗ Branch 139 not taken.
✓ Branch 141 taken 1 time.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✓ Branch 145 taken 1 time.
✗ Branch 146 not taken.
✓ Branch 148 taken 1 time.
✓ Branch 150 taken 1 time.
✗ Branch 151 not taken.
✓ Branch 153 taken 1 time.
✓ Branch 155 taken 1 time.
✗ Branch 156 not taken.
✓ Branch 158 taken 1 time.
✓ Branch 160 taken 1 time.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✓ Branch 163 taken 1 time.
✓ Branch 164 taken 1 time.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✓ Branch 167 taken 1 time.
✓ Branch 168 taken 1 time.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✓ Branch 171 taken 1 time.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✓ Branch 184 taken 1 time.
✗ Branch 185 not taken.
✓ Branch 187 taken 1 time.
✓ Branch 189 taken 1 time.
✗ Branch 190 not taken.
✓ Branch 192 taken 1 time.
✗ Branch 193 not taken.
✓ Branch 195 taken 1 time.
✓ Branch 197 taken 1 time.
✗ Branch 198 not taken.
✓ Branch 200 taken 1 time.
✗ Branch 201 not taken.
✓ Branch 203 taken 1 time.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✓ Branch 217 taken 1 time.
✗ Branch 218 not taken.
✓ Branch 219 taken 1 time.
✗ Branch 220 not taken.
✓ Branch 222 taken 1 time.
✗ Branch 224 not taken.
✗ Branch 225 not taken.
✓ Branch 226 taken 114 times.
✗ Branch 227 not taken.
✓ Branch 228 taken 114 times.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✗ Branch 231 not taken.
27167 template <class T> class Attribute : public UntypedAttribute {
203 public:
204 13587 Attribute(std::shared_ptr<ViewState> view, ColumnRef column)
205
34/34
chrono::batch_render::Attribute<bool>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 844 times.
chrono::batch_render::Attribute<chrono::batch_render::(anonymous namespace)::AnyEnum>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 101 times.
chrono::batch_render::Attribute<chrono::batch_render::AspectRatioConformPolicy>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 415 times.
chrono::batch_render::Attribute<chrono::batch_render::CameraSignalLayout>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::DetectorPattern>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 836 times.
chrono::batch_render::Attribute<chrono::batch_render::DistortionModel>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 8 times.
chrono::batch_render::Attribute<chrono::batch_render::DomePoleAxis>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::Double3>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 639 times.
chrono::batch_render::Attribute<chrono::batch_render::Float2>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 27 times.
chrono::batch_render::Attribute<chrono::batch_render::Float3>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1315 times.
chrono::batch_render::Attribute<chrono::batch_render::Float4>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 2 times.
chrono::batch_render::Attribute<chrono::batch_render::FollowPathMode>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::FrameOfReference>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 494 times.
chrono::batch_render::Attribute<chrono::batch_render::ImplementationSource>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::ItuMaterialKind>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 7 times.
chrono::batch_render::Attribute<chrono::batch_render::MinimalMode>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 433 times.
chrono::batch_render::Attribute<chrono::batch_render::Orientation>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 2 times.
chrono::batch_render::Attribute<chrono::batch_render::PhysicalIlluminant>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 3 times.
chrono::batch_render::Attribute<chrono::batch_render::Projection>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::Purpose>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 2 times.
chrono::batch_render::Attribute<chrono::batch_render::Quatd>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 10 times.
chrono::batch_render::Attribute<chrono::batch_render::RenderMode>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 444 times.
chrono::batch_render::Attribute<chrono::batch_render::ShapingAxis>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::ShotNoise>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 2 times.
chrono::batch_render::Attribute<chrono::batch_render::SpectralMode>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 416 times.
chrono::batch_render::Attribute<chrono::batch_render::SubdivisionScheme>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 3 times.
chrono::batch_render::Attribute<chrono::batch_render::TextureColorSpace>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::TextureWrapMode>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 6 times.
chrono::batch_render::Attribute<chrono::batch_render::Token>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1602 times.
chrono::batch_render::Attribute<chrono::batch_render::Uint2>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 442 times.
chrono::batch_render::Attribute<chrono::batch_render::Visibility>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 10 times.
chrono::batch_render::Attribute<float>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 4231 times.
chrono::batch_render::Attribute<int>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1219 times.
chrono::batch_render::Attribute<unsigned int>::Attribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 64 times.
27171 : UntypedAttribute(std::move(view), Check(column)) {}
206
207 981 void Set(const T& value) {
208 981 const Cell cell = Cell(value);
209 981 Fill(AsBytes(Span<const Cell>(&cell, 1)));
210 979 }
211
212 9 void Set(Span<const T> values) {
213
2/4
chrono::batch_render::Attribute<chrono::batch_render::Double3>::Set(chrono::batch_render::Span<chrono::batch_render::Double3 const>):
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<float>::Set(chrono::batch_render::Span<float const>):
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
9 if (values.size() != Size()) {
214 ✗ CheckValues(values.size());
215 }
216 if constexpr (std::is_same_v<T, bool>) {
217 const std::vector<uint32_t> cells(values.begin(), values.end());
218 Write(AsBytes(Span<const uint32_t>(cells)));
219 } else {
220 9 Write(AsBytes(values));
221 }
222 9 }
223
224 9 void Set(const std::vector<T>& values) {
225 if constexpr (std::is_same_v<T, bool>) {
226 const std::vector<uint32_t> cells(values.begin(), values.end());
227 CheckValues(cells.size());
228 Write(AsBytes(Span<const uint32_t>(cells)));
229 } else {
230 9 Set(Span<const T>(values));
231 }
232 9 }
233
234 12489 std::vector<T> Get() const {
235
23/24
chrono::batch_render::Attribute<bool>::Get() const:
✓ Branch 2 taken 829 times.
✓ Branch 5 taken 829 times.
chrono::batch_render::Attribute<chrono::batch_render::(anonymous namespace)::AnyEnum>::Get() const:
✓ Branch 2 taken 101 times.
chrono::batch_render::Attribute<chrono::batch_render::AspectRatioConformPolicy>::Get() const:
✓ Branch 2 taken 404 times.
chrono::batch_render::Attribute<chrono::batch_render::DetectorPattern>::Get() const:
✓ Branch 2 taken 826 times.
chrono::batch_render::Attribute<chrono::batch_render::Double3>::Get() const:
✓ Branch 2 taken 160 times.
chrono::batch_render::Attribute<chrono::batch_render::Float2>::Get() const:
✓ Branch 2 taken 4 times.
chrono::batch_render::Attribute<chrono::batch_render::Float3>::Get() const:
✓ Branch 2 taken 1247 times.
chrono::batch_render::Attribute<chrono::batch_render::Float4>::Get() const:
✗ Branch 2 not taken.
chrono::batch_render::Attribute<chrono::batch_render::FrameOfReference>::Get() const:
✓ Branch 2 taken 494 times.
chrono::batch_render::Attribute<chrono::batch_render::ImplementationSource>::Get() const:
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::MinimalMode>::Get() const:
✓ Branch 2 taken 404 times.
chrono::batch_render::Attribute<chrono::batch_render::PhysicalIlluminant>::Get() const:
✓ Branch 2 taken 3 times.
chrono::batch_render::Attribute<chrono::batch_render::Quatd>::Get() const:
✓ Branch 2 taken 6 times.
chrono::batch_render::Attribute<chrono::batch_render::RenderMode>::Get() const:
✓ Branch 2 taken 404 times.
chrono::batch_render::Attribute<chrono::batch_render::ShapingAxis>::Get() const:
✓ Branch 2 taken 1 time.
chrono::batch_render::Attribute<chrono::batch_render::SpectralMode>::Get() const:
✓ Branch 2 taken 404 times.
chrono::batch_render::Attribute<chrono::batch_render::TextureWrapMode>::Get() const:
✓ Branch 2 taken 3 times.
chrono::batch_render::Attribute<chrono::batch_render::Token>::Get() const:
✓ Branch 2 taken 1559 times.
chrono::batch_render::Attribute<chrono::batch_render::Uint2>::Get() const:
✓ Branch 2 taken 437 times.
chrono::batch_render::Attribute<chrono::batch_render::Visibility>::Get() const:
✓ Branch 2 taken 2 times.
chrono::batch_render::Attribute<float>::Get() const:
✓ Branch 2 taken 3927 times.
chrono::batch_render::Attribute<int>::Get() const:
✓ Branch 2 taken 1213 times.
chrono::batch_render::Attribute<unsigned int>::Get() const:
✓ Branch 2 taken 60 times.
25807 const std::vector<Cell> cells = Items<Cell>(ReadHost());
236 if constexpr (std::is_same_v<T, Cell>) {
237 11660 return cells;
238 } else {
239
1/1
✓ Branch 1 taken 829 times.
1021 return std::vector<T>(cells.begin(), cells.end());
240 }
241 829 }
242
243 private:
244 using Cell = AttributeCell<T>;
245
246 13587 static ColumnRef Check(ColumnRef column) {
247 13587 return Checked(column, HeldAs<T>(column.column->type), false);
248 }
249 };
250
251
41/156
<unknown function 40>:
✓ Branch 0 taken 74 times.
✓ Branch 0 taken 2 times.
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 2 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 4 not taken.
✓ Branch 4 taken 518 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 3 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✓ Branch 7 taken 402 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 10 taken 1223 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 12 taken 107 times.
✓ Branch 12 taken 1 time.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✓ Branch 13 taken 1116 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 14 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 16 taken 1 time.
✓ Branch 16 taken 805 times.
✓ Branch 17 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 18 taken 1 time.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 time.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 time.
✗ 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.
chrono::batch_render::Attribute<chrono::batch_render::Double3>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Float3>::Get() const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<float>::Check(chrono::batch_render::ColumnRef):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
chrono::batch_render::Attribute<float>::Get() const:
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
chrono::batch_render::Attribute<float>::Set(std::vector<float, std::allocator<float> > const&):
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
5320 template <class T> class ArrayAttribute : public UntypedAttribute {
252 public:
253 2662 ArrayAttribute(std::shared_ptr<ViewState> view, ColumnRef column)
254
7/7
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 1 time.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 147 times.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float4>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 3 times.
chrono::batch_render::ArrayAttribute<float>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 53 times.
chrono::batch_render::ArrayAttribute<int>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 12 times.
chrono::batch_render::ArrayAttribute<long>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 7 times.
chrono::batch_render::ArrayAttribute<unsigned int>::ArrayAttribute(std::shared_ptr<chrono::batch_render::ViewState>, chrono::batch_render::ColumnRef):
✓ Branch 2 taken 2437 times.
5322 : UntypedAttribute(std::move(view), Check(column)) {}
255
256 180 void Set(uint32_t index, Span<const T> items) {
257 180 SetArray(index, AsBytes(items));
258 179 }
259
260 18 void Set(uint32_t index, const std::vector<T>& items) {
261 18 Set(index, Span<const T>(items));
262 17 }
263
264 2494 std::vector<T> Get(uint32_t index) const {
265
5/5
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2>::Get(unsigned int) const:
✓ Branch 2 taken 1 time.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3>::Get(unsigned int) const:
✓ Branch 2 taken 23 times.
chrono::batch_render::ArrayAttribute<float>::Get(unsigned int) const:
✓ Branch 2 taken 30 times.
chrono::batch_render::ArrayAttribute<int>::Get(unsigned int) const:
✓ Branch 2 taken 3 times.
chrono::batch_render::ArrayAttribute<unsigned int>::Get(unsigned int) const:
✓ Branch 2 taken 2437 times.
7482 return Items<T>(GetArray(index));
266 }
267
268 private:
269 2662 static ColumnRef Check(ColumnRef column) {
270 2662 return Checked(column,
271
15/28
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 time.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 148 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 148 times.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float4>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
chrono::batch_render::ArrayAttribute<float>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 53 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 53 times.
chrono::batch_render::ArrayAttribute<int>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 12 times.
chrono::batch_render::ArrayAttribute<long>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 7 times.
chrono::batch_render::ArrayAttribute<unsigned int>::Check(chrono::batch_render::ColumnRef):
✓ Branch 0 taken 2437 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2437 times.
2662 IsArray(column.column->type) && ItemBytes(column.column->type) == sizeof(T),
272 2661 true);
273 }
274 };
275
276 2662 template <class T> ArrayAttribute<T> View::GetArray(ColumnRef column) const {
277
7/14
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2> chrono::batch_render::View::GetArray<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3> chrono::batch_render::View::GetArray<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 148 times.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float4> chrono::batch_render::View::GetArray<chrono::batch_render::Float4>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
chrono::batch_render::ArrayAttribute<float> chrono::batch_render::View::GetArray<float>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 53 times.
chrono::batch_render::ArrayAttribute<int> chrono::batch_render::View::GetArray<int>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
chrono::batch_render::ArrayAttribute<long> chrono::batch_render::View::GetArray<long>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
chrono::batch_render::ArrayAttribute<unsigned int> chrono::batch_render::View::GetArray<unsigned int>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 2437 times.
2662 if (!m_state) {
278
0/14
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2> chrono::batch_render::View::GetArray<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3> chrono::batch_render::View::GetArray<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float4> chrono::batch_render::View::GetArray<chrono::batch_render::Float4>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<float> chrono::batch_render::View::GetArray<float>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<int> chrono::batch_render::View::GetArray<int>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<long> chrono::batch_render::View::GetArray<long>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::ArrayAttribute<unsigned int> chrono::batch_render::View::GetArray<unsigned int>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ throw Error("An empty view has no attributes");
279 }
280
14/21
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float2> chrono::batch_render::View::GetArray<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 time.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float3> chrono::batch_render::View::GetArray<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 148 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 147 times.
chrono::batch_render::ArrayAttribute<chrono::batch_render::Float4> chrono::batch_render::View::GetArray<chrono::batch_render::Float4>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 3 times.
chrono::batch_render::ArrayAttribute<float> chrono::batch_render::View::GetArray<float>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 53 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 53 times.
chrono::batch_render::ArrayAttribute<int> chrono::batch_render::View::GetArray<int>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 12 times.
chrono::batch_render::ArrayAttribute<long> chrono::batch_render::View::GetArray<long>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 7 times.
chrono::batch_render::ArrayAttribute<unsigned int> chrono::batch_render::View::GetArray<unsigned int>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 2437 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 2437 times.
7984 return ArrayAttribute<T>(m_state, column);
281 }
282
283 13587 template <class T> Attribute<T> View::Get(ColumnRef column) const {
284
5/20
chrono::batch_render::Attribute<bool> chrono::batch_render::View::Get<bool>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Double3> chrono::batch_render::View::Get<chrono::batch_render::Double3>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Float2> chrono::batch_render::View::Get<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
chrono::batch_render::Attribute<chrono::batch_render::Float3> chrono::batch_render::View::Get<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 25 times.
chrono::batch_render::Attribute<chrono::batch_render::RenderMode> chrono::batch_render::View::Get<chrono::batch_render::RenderMode>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Token> chrono::batch_render::View::Get<chrono::batch_render::Token>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 310 times.
chrono::batch_render::Attribute<chrono::batch_render::Visibility> chrono::batch_render::View::Get<chrono::batch_render::Visibility>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Attribute<float> chrono::batch_render::View::Get<float>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
chrono::batch_render::Attribute<int> chrono::batch_render::View::Get<int>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 221 times.
chrono::batch_render::Attribute<unsigned int> chrono::batch_render::View::Get<unsigned int>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 64 times.
13587 if (!m_state) {
285
0/20
chrono::batch_render::Attribute<bool> chrono::batch_render::View::Get<bool>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Double3> chrono::batch_render::View::Get<chrono::batch_render::Double3>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Float2> chrono::batch_render::View::Get<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Float3> chrono::batch_render::View::Get<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::RenderMode> chrono::batch_render::View::Get<chrono::batch_render::RenderMode>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Token> chrono::batch_render::View::Get<chrono::batch_render::Token>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Visibility> chrono::batch_render::View::Get<chrono::batch_render::Visibility>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<float> chrono::batch_render::View::Get<float>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<int> chrono::batch_render::View::Get<int>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
chrono::batch_render::Attribute<unsigned int> chrono::batch_render::View::Get<unsigned int>(chrono::batch_render::ColumnRef) const:
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ throw Error("An empty view has no attributes");
286 }
287
10/30
chrono::batch_render::Attribute<bool> chrono::batch_render::View::Get<bool>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Double3> chrono::batch_render::View::Get<chrono::batch_render::Double3>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Float2> chrono::batch_render::View::Get<chrono::batch_render::Float2>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 9 times.
chrono::batch_render::Attribute<chrono::batch_render::Float3> chrono::batch_render::View::Get<chrono::batch_render::Float3>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 25 times.
chrono::batch_render::Attribute<chrono::batch_render::RenderMode> chrono::batch_render::View::Get<chrono::batch_render::RenderMode>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<chrono::batch_render::Token> chrono::batch_render::View::Get<chrono::batch_render::Token>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 310 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 309 times.
chrono::batch_render::Attribute<chrono::batch_render::Visibility> chrono::batch_render::View::Get<chrono::batch_render::Visibility>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<float> chrono::batch_render::View::Get<float>(chrono::batch_render::ColumnRef) const:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
chrono::batch_render::Attribute<int> chrono::batch_render::View::Get<int>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 221 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 220 times.
chrono::batch_render::Attribute<unsigned int> chrono::batch_render::View::Get<unsigned int>(chrono::batch_render::ColumnRef) const:
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 64 times.
40758 return Attribute<T>(m_state, column);
288 }
289
290 123 template <class T> auto View::Get(Field<T> field) const {
291 123 const ColumnRef column = field.Column();
292 if constexpr (std::is_same_v<T, std::string>) {
293 return Get<Token>(column);
294 } else if constexpr (std::is_same_v<T, std::vector<std::string>> ||
295 std::is_same_v<T, std::vector<Primvar>>) {
296 1 return Get(column);
297 } else if constexpr (HasItems<T>::value) {
298 1 return GetArray<typename T::value_type>(column);
299 } else {
300 121 return Get<T>(column);
301 }
302 }
303
304 }
305