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 "boost/integer.hpp"
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<typename boost::int_t<sizeof(T) * 8>::exact, 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 63 of file vec_fb.h.

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

◆ 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 136 of file vec_fb.h.

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

◆ 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 119 of file vec_fb.h.

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