5 #ifndef SPICA_VECTOR3D_H_
6 #define SPICA_VECTOR3D_H_
10 #include <type_traits>
11 #include <xmmintrin.h>
12 #include <immintrin.h>
14 #include "../core/common.h"
70 T operator[](
int i)
const;
72 bool operator==(
const Vector3_& v)
const;
73 bool operator!=(
const Vector3_& v)
const;
82 double squaredNorm()
const;
94 std::string toString()
const;
98 inline T
x()
const {
return x_; }
102 inline T
y()
const {
return y_; }
106 inline T
z()
const {
return z_; }
110 inline T&
xRef() {
return x_; }
114 inline T&
yRef() {
return y_; }
118 inline T&
zRef() {
return z_; }
125 static_assert(std::is_arithmetic<T>::value,
126 "Template type must be arithmetic!!");
130 using Vector3i = Vector3_<int>;
131 using Vector3f = Vector3_<float>;
132 using Vector3d = Vector3_<double>;
185 std::ostream& operator<<(std::ostream& os, const spica::Vector3_<T>& v);
188 #include "vector3d_detail.h"
190 #endif // SPICA_VECTOR3D_H_
Vector3_()
The Vector3d constructor.
Definition: vector3d_detail.h:16
T & yRef()
Get reference to y.
Definition: vector3d.h:114
T z() const
Get z.
Definition: vector3d.h:106
T x() const
Get x.
Definition: vector3d.h:98
T & xRef()
Get reference to x.
Definition: vector3d.h:110
Three-dimensional vector.
Definition: core.hpp:56
Vector3_ & operator/=(const Vector3_ &v)
Element-wise division.
Definition: vector3d_detail.h:124
virtual ~Vector3_()
The Vector3d destructor.
Definition: vector3d_detail.h:54
T y() const
Get y.
Definition: vector3d.h:102
Vector3_ & operator*=(const Vector3_ &v)
Element-wise multiplication.
Definition: vector3d_detail.h:106
T & zRef()
Get reference to z.
Definition: vector3d.h:118