13 #include <type_traits>
47 BLI_STATIC_ASSERT(T::type_length <= 4,
"Longer types need to implement vector_hash themself.");
48 const typename T::uint_type &uvec = *
reinterpret_cast<const typename T::uint_type *
>(&vec);
51 if constexpr (T::type_length > 1) {
54 if constexpr (T::type_length > 2) {
57 if constexpr (T::type_length > 3) {
76 for (
int i = 0; i < Size; i++) {
77 (*this)[i] =
static_cast<T>(value);
83 for (
int i = 0; i < Size; i++) {
84 (*this)[i] =
static_cast<T>(value);
90 for (
int i = 0; i < Size; i++) {
91 (*this)[i] =
static_cast<T>(value);
97 for (
int i = 0; i < Size; i++) {
98 (*this)[i] =
static_cast<T>(value);
103 #define BLI_ENABLE_IF_VEC(_size, _test) int S = _size, BLI_ENABLE_IF((S _test))
111 template<BLI_ENABLE_IF_VEC(Size, == 3)>
vec_base(
T _x,
T _y,
T _z)
118 template<BLI_ENABLE_IF_VEC(Size, == 4)>
vec_base(
T _x,
T _y,
T _z,
T _w)
128 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 3)>
134 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 3)>
140 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
143 static_cast<
T>(xyz.
x), static_cast<
T>(xyz.
y), static_cast<
T>(xyz.
z), static_cast<
T>(
w))
147 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
150 static_cast<
T>(
x), static_cast<
T>(yzw.
x), static_cast<
T>(yzw.
y), static_cast<
T>(yzw.
z))
154 template<
typename U,
typename V, BLI_ENABLE_IF_VEC(Size, == 4)>
157 static_cast<
T>(
xy.
x), static_cast<
T>(
xy.
y), static_cast<
T>(zw.
x), static_cast<
T>(zw.
y))
161 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
167 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
169 :
vec_base(static_cast<
T>(
x), static_cast<
T>(yz.
x), static_cast<
T>(yz.
y), static_cast<
T>(
w))
173 template<
typename U, BLI_ENABLE_IF_VEC(Size, == 4)>
175 :
vec_base(static_cast<
T>(
x), static_cast<
T>(
y), static_cast<
T>(zw.
x), static_cast<
T>(zw.
y))
181 template<
typename U,
int OtherSize, BLI_ENABLE_IF(OtherSize > Size)>
184 for (
int i = 0; i < Size; i++) {
185 (*this)[i] =
static_cast<T>(other[i]);
189 #undef BLI_ENABLE_IF_VEC
195 for (
int i = 0; i < Size; i++) {
200 template<
typename U, BLI_ENABLE_IF((std::is_convertible_v<U, T>))>
203 for (
int i = 0; i < Size; i++) {
216 for (
int i = 0; i < Size; i++) {
217 (*this)[i] =
static_cast<T>(vec[i]);
223 operator const T *()
const
225 return reinterpret_cast<const T *
>(
this);
230 return reinterpret_cast<T *
>(
this);
239 return reinterpret_cast<const T *
>(
this)[index];
246 return reinterpret_cast<T *
>(
this)[index];
251 #define BLI_INT_OP(_T) template<typename U = _T, BLI_ENABLE_IF((std::is_integral_v<U>))>
253 #define BLI_VEC_OP_IMPL(_result, _i, _op) \
255 for (int _i = 0; _i < Size; _i++) { \
260 #define BLI_VEC_OP_IMPL_SELF(_i, _op) \
261 for (int _i = 0; _i < Size; _i++) { \
350 for (
int i = 0; i < Size; i++) {
364 for (
int i = 0; i < Size; i++) {
510 for (
int i = 0; i < Size; i++) {
529 #undef BLI_VEC_OP_IMPL
530 #undef BLI_VEC_OP_IMPL_SELF
536 for (
int i = 0; i < Size; i++) {
559 for (
int i = 0; i < Size; i++) {
#define BLI_STATIC_ASSERT(a, msg)
#define BLI_VEC_OP_IMPL_SELF(_i, _op)
#define BLI_VEC_OP_IMPL(_result, _i, _op)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
__forceinline const avxb operator|=(avxb &a, const avxb &b)
__forceinline const avxb operator&(const avxb &a, const avxb &b)
Binary Operators.
__forceinline const avxb operator^=(avxb &a, const avxb &b)
__forceinline const avxb operator&=(avxb &a, const avxb &b)
Assignment Operators.
__forceinline const avxb operator|(const avxb &a, const avxb &b)
__forceinline avxi & operator<<=(avxi &a, const int32_t b)
__forceinline const avxi operator>>(const avxi &a, const int32_t n)
__forceinline avxi & operator>>=(avxi &a, const int32_t b)
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
GPUState operator^(const GPUState &a, const GPUState &b)
GPUState operator~(const GPUState &a)
uint64_t vector_hash(const T &vec)
constexpr bool operator!=(StringRef a, StringRef b)
std::conditional_t< sizeof(T)==sizeof(uint8_t), uint8_t, std::conditional_t< sizeof(T)==sizeof(uint16_t), uint16_t, std::conditional_t< sizeof(T)==sizeof(uint32_t), uint32_t, std::conditional_t< sizeof(T)==sizeof(uint64_t), uint64_t, void > >> > as_uint_type
constexpr bool operator==(StringRef a, StringRef b)
std::ostream & operator<<(std::ostream &stream, const eAlpha &space)
unsigned __int64 uint64_t
vec_base(const vec_base< U, OtherSize > &other)
friend vec_base operator+(const vec_base &a, const T &b)
vec_base & operator*=(const vec_base &b)
friend vec_base operator-(const vec_base &a, const T &b)
vec_base(vec_base< U, 2 > xy, vec_base< V, 2 > zw)
vec_base & operator-=(const vec_base &b)
vec_base & operator+=(const T &b)
vec_base & operator-=(const T &b)
vec_base(T _x, T _y, T _z, T _w)
vec_base(vec_base< U, 3 > xyz, T w)
vec_base(const vec_base< U, Size > &vec)
friend vec_base operator*(const vec_base &a, const vec_base &b)
vec_base & operator/=(T b)
BLI_INT_OP(T) friend vec_base operator&(const vec_base &a
friend vec_base operator/(T a, const vec_base &b)
vec_base(T _x, T _y, T _z)
vec_base(T x, T y, vec_base< U, 2 > zw)
friend vec_base operator-(const vec_base &a)
vec_base & operator/=(const vec_base &b)
BLI_INT_OP(T) friend vec_base operator&(T a
vec_base & operator+=(const vec_base &b)
vec_base(vec_base< U, 2 > xy, T z, T w)
const T & operator[](int index) const
vec_base & operator*=(T b)
friend vec_base operator/(const vec_base &a, T b)
friend vec_base operator*(const vec_base &a, FactorT b)
friend vec_base operator-(const vec_base &a, const vec_base &b)
vec_base(const T(*ptr)[Size])
friend vec_base operator+(const vec_base &a, const vec_base &b)
vec_base(T x, vec_base< U, 2 > yz, T w)
friend vec_base operator/(const vec_base &a, const vec_base &b)
constexpr vec_base(const vec_base< U, 2 > &xy, T z)
friend vec_base operator*(T a, const vec_base &b)
friend vec_base operator+(const T &a, const vec_base &b)
vec_base(T x, vec_base< U, 3 > yzw)
static constexpr int type_length
T & operator[](int index)
constexpr vec_base(T x, const vec_base< U, 2 > &yz)
friend vec_base operator-(const T &a, const vec_base &b)
std::array< T, Size > values