Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
VecHandle.hpp
Go to the documentation of this file.
1#pragma once
2
10
13
14namespace icarus {
15
39template <typename Scalar> struct Vec3Handle {
43
47 [[nodiscard]] Vec3<Scalar> get() const { return Vec3<Scalar>(*x, *y, *z); }
48
52 void set(const Vec3<Scalar> &v) {
53 *x = v(0);
54 *y = v(1);
55 *z = v(2);
56 }
57
61 [[nodiscard]] bool valid() const { return x.valid() && y.valid() && z.valid(); }
62
66 explicit operator bool() const { return valid(); }
67};
68
74template <typename Scalar> struct QuatHandle {
79
83 [[nodiscard]] Vec4<Scalar> get() const { return Vec4<Scalar>(*w, *x, *y, *z); }
84
88 void set(const Vec4<Scalar> &q) {
89 *w = q(0);
90 *x = q(1);
91 *y = q(2);
92 *z = q(3);
93 }
94
98 [[nodiscard]] bool valid() const { return w.valid() && x.valid() && y.valid() && z.valid(); }
99
103 explicit operator bool() const { return valid(); }
104};
105
113template <typename Scalar> struct Mat3Handle {
117
121 [[nodiscard]] Mat3<Scalar> get() const {
122 Mat3<Scalar> m;
123 m(0, 0) = *m00;
124 m(1, 0) = *m10;
125 m(2, 0) = *m20;
126 m(0, 1) = *m01;
127 m(1, 1) = *m11;
128 m(2, 1) = *m21;
129 m(0, 2) = *m02;
130 m(1, 2) = *m12;
131 m(2, 2) = *m22;
132 return m;
133 }
134
138 void set(const Mat3<Scalar> &m) {
139 *m00 = m(0, 0);
140 *m10 = m(1, 0);
141 *m20 = m(2, 0);
142 *m01 = m(0, 1);
143 *m11 = m(1, 1);
144 *m21 = m(2, 1);
145 *m02 = m(0, 2);
146 *m12 = m(1, 2);
147 *m22 = m(2, 2);
148 }
149
153 [[nodiscard]] bool valid() const {
154 return m00.valid() && m10.valid() && m20.valid() && m01.valid() && m11.valid() &&
155 m21.valid() && m02.valid() && m12.valid() && m22.valid();
156 }
157
161 explicit operator bool() const { return valid(); }
162};
163
164} // namespace icarus
Core type definitions, concepts, and configuration for Icarus.
Type-safe SignalHandle for zero-overhead hot path access.
Type-safe handle for accessing a signal value.
Definition Handle.hpp:41
Definition AggregationTypes.hpp:13
Handle for accessing a Mat3 signal as nine scalar components.
Definition VecHandle.hpp:113
void set(const Mat3< Scalar > &m)
Write all components from a Mat3.
Definition VecHandle.hpp:138
SignalHandle< Scalar > m10
Definition VecHandle.hpp:114
SignalHandle< Scalar > m00
Definition VecHandle.hpp:114
Mat3< Scalar > get() const
Read all components as a Mat3.
Definition VecHandle.hpp:121
SignalHandle< Scalar > m21
Column 1.
Definition VecHandle.hpp:115
SignalHandle< Scalar > m22
Column 2.
Definition VecHandle.hpp:116
SignalHandle< Scalar > m01
Definition VecHandle.hpp:115
SignalHandle< Scalar > m11
Definition VecHandle.hpp:115
SignalHandle< Scalar > m02
Definition VecHandle.hpp:116
SignalHandle< Scalar > m12
Definition VecHandle.hpp:116
bool valid() const
Check if all handles are valid.
Definition VecHandle.hpp:153
SignalHandle< Scalar > m20
Column 0.
Definition VecHandle.hpp:114
Handle for accessing a quaternion signal as four scalar components.
Definition VecHandle.hpp:74
SignalHandle< Scalar > z
Z component handle.
Definition VecHandle.hpp:78
void set(const Vec4< Scalar > &q)
Write all components from a Vec4 (w, x, y, z order).
Definition VecHandle.hpp:88
bool valid() const
Check if all handles are valid.
Definition VecHandle.hpp:98
SignalHandle< Scalar > w
W (scalar) component handle.
Definition VecHandle.hpp:75
SignalHandle< Scalar > y
Y component handle.
Definition VecHandle.hpp:77
SignalHandle< Scalar > x
X component handle.
Definition VecHandle.hpp:76
Vec4< Scalar > get() const
Read all components as a Vec4 (w, x, y, z order).
Definition VecHandle.hpp:83
Handle for accessing a Vec3 signal as three scalar components.
Definition VecHandle.hpp:39
SignalHandle< Scalar > x
X component handle.
Definition VecHandle.hpp:40
void set(const Vec3< Scalar > &v)
Write all components from a Vec3.
Definition VecHandle.hpp:52
Vec3< Scalar > get() const
Read all components as a Vec3.
Definition VecHandle.hpp:47
SignalHandle< Scalar > z
Z component handle.
Definition VecHandle.hpp:42
bool valid() const
Check if all handles are valid.
Definition VecHandle.hpp:61
SignalHandle< Scalar > y
Y component handle.
Definition VecHandle.hpp:41