ATLAS Offline Software
Loading...
Searching...
No Matches
vec_fb.h File Reference

Fallback vectorized class. More...

#include <initializer_list>
#include <type_traits>
#include <algorithm>
#include <cstdint>
#include "CxxUtils/bit_int.h"
Include dependency graph for vec_fb.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  CxxUtils::vec_fb< T, N >

Namespaces

namespace  CxxUtils

Macros

#define BINOP(op)
#define UNOP(op)
#define RELOP(op)

Typedefs

template<typename T, size_t N>
using CxxUtils::ivec = vec_fb<CxxUtils::bit_int_t<sizeof(T) * 8>, N>

Functions

template<typename T, size_t N>
ivec< T, N > CxxUtils::operator! (const vec_fb< T, N > &a)
 Negation.
template<typename T, size_t N>
ivec< T, N > CxxUtils::operator&& (const vec_fb< T, N > &a, const vec_fb< T, N > &b)
 V1 && V2.
template<typename T, size_t N, class U>
ivec< T, N > CxxUtils::operator&& (U a, const vec_fb< T, N > &b)
 S && V.
template<typename T, size_t N, class U>
ivec< T, N > CxxUtils::operator&& (const vec_fb< T, N > &a, U b)
 V && S.
template<typename T, size_t N>
ivec< T, N > CxxUtils::operator|| (const vec_fb< T, N > &a, const vec_fb< T, N > &b)
 V1 || V2.

Detailed Description

Fallback vectorized class.

Author
scott snyder snyde.nosp@m.r@bn.nosp@m.l.gov

This is intended to be (mostly) functionally equivalent to the built-in vectorized types. (One difference is that we don't support ?:, as that can't be overloaded.)

Definition in file vec_fb.h.

Macro Definition Documentation

◆ BINOP

#define BINOP ( op)

Definition at line 62 of file vec_fb.h.

62#define BINOP(op) \
63 template<typename T, size_t N> \
64 inline vec_fb<T, N> operator op(const vec_fb<T, N>& a, \
65 const vec_fb<T, N>& b) \
66 { \
67 vec_fb<T, N> c; \
68 for (size_t i = 0; i < N; ++i) \
69 c.m_arr[i] = a.m_arr[i] op b.m_arr[i]; \
70 return c; \
71 } \
72 template<typename T, size_t N, typename U> \
73 inline vec_fb<T, N> operator op(const vec_fb<T, N>& a, U b) \
74 { \
75 vec_fb<T, N> c; \
76 for (size_t i = 0; i < N; ++i) \
77 c.m_arr[i] = a.m_arr[i] op b; \
78 return c; \
79 } \
80 template<typename T, size_t N, typename U> \
81 inline vec_fb<T, N> operator op(U a, const vec_fb<T, N>& b) \
82 { \
83 vec_fb<T, N> c; \
84 for (size_t i = 0; i < N; ++i) \
85 c.m_arr[i] = a op b.m_arr[i]; \
86 return c; \
87 } \
88 template<typename T, size_t N> \
89 inline vec_fb<T, N>& operator op##=(vec_fb<T, N>& a, const vec_fb<T, N>& b) \
90 { \
91 for (size_t i = 0; i < N; ++i) \
92 a.m_arr[i] op## = b.m_arr[i]; \
93 return a; \
94 } \
95 template<typename T, size_t N, typename U> \
96 inline vec_fb<T, N>& operator op##=(vec_fb<T, N>& a, U b) \
97 { \
98 for (size_t i = 0; i < N; ++i) \
99 a.m_arr[i] op## = b; \
100 return a; \
101 }

◆ RELOP

#define RELOP ( op)
Value:
template<typename T, size_t N> \
inline ivec<T, N> operator op(const vec_fb<T, N>& a, const vec_fb<T, N>& b) \
{ \
ivec<T, N> c; \
for (size_t i = 0; i < N; ++i) \
c.m_arr[i] = a.m_arr[i] op b.m_arr[i]; \
return c; \
}
static Double_t a

Definition at line 135 of file vec_fb.h.

135#define RELOP(op) \
136 template<typename T, size_t N> \
137 inline ivec<T, N> operator op(const vec_fb<T, N>& a, const vec_fb<T, N>& b) \
138 { \
139 ivec<T, N> c; \
140 for (size_t i = 0; i < N; ++i) \
141 c.m_arr[i] = a.m_arr[i] op b.m_arr[i]; \
142 return c; \
143 }

◆ UNOP

#define UNOP ( op)
Value:
template<typename T, size_t N> \
inline vec_fb<T, N> operator op(const vec_fb<T, N>& a) \
{ \
vec_fb<T, N> c; \
for (size_t i = 0; i < N; ++i) \
c.m_arr[i] = op a.m_arr[i]; \
return c; \
}

Definition at line 118 of file vec_fb.h.

118#define UNOP(op) \
119 template<typename T, size_t N> \
120 inline vec_fb<T, N> operator op(const vec_fb<T, N>& a) \
121 { \
122 vec_fb<T, N> c; \
123 for (size_t i = 0; i < N; ++i) \
124 c.m_arr[i] = op a.m_arr[i]; \
125 return c; \
126 }