21 #ifndef _libint2_src_lib_libint_vector_h_ 22 #define _libint2_src_lib_libint_vector_h_ 26 #if defined(__cplusplus) 30 #include <libint2/util/type_traits.h> 45 template <
size_t N,
typename T>
59 std::fill_n(&(d[0]), N, a);
66 std::copy(&a[0], &a[0]+N, &d[0]);
70 for(
size_t i=0; i<N; ++i)
76 for(
size_t i=0; i<N; ++i)
82 for(
size_t i=0; i<N; ++i)
87 operator double()
const {
94 template <
size_t N,
typename T>
95 Vector<N,T>
operator*(T a, Vector<N,T> b) {
97 for(
size_t i=0; i<N; ++i)
102 template <
size_t N,
typename T>
103 Vector<N,T>
operator*(Vector<N,T> a, T b) {
105 for(
size_t i=0; i<N; ++i)
110 template <
size_t N,
typename T>
111 Vector<N,T>
operator*(
int a, Vector<N,T> b) {
116 for (
size_t i = 0; i < N; ++i)
122 template <
size_t N,
typename T>
123 Vector<N,T>
operator*(Vector<N,T> a,
int b) {
128 for (
size_t i = 0; i < N; ++i)
134 template <
size_t N,
typename T>
135 Vector<N,T>
operator*(Vector<N,T> a, Vector<N,T> b) {
137 for(
size_t i=0; i<N; ++i)
138 c.d[i] = a.d[i] * b.d[i];
142 template <
size_t N,
typename T>
143 Vector<N,T> operator+(Vector<N,T> a, Vector<N,T> b) {
145 for(
size_t i=0; i<N; ++i)
146 c.d[i] = a.d[i] + b.d[i];
150 template <
size_t N,
typename T>
151 Vector<N,T> operator-(Vector<N,T> a, Vector<N,T> b) {
153 for(
size_t i=0; i<N; ++i)
154 c.d[i] = a.d[i] - b.d[i];
158 template <
size_t N,
typename T>
159 Vector<N,T> operator/(Vector<N,T> a, Vector<N,T> b) {
161 for(
size_t i=0; i<N; ++i)
162 c.d[i] = a.d[i] / b.d[i];
173 template <
size_t N,
typename T>
175 static const bool value =
true;
178 template <
size_t N,
typename T>
180 typedef T value_type;
181 static const size_t extent = N;
186 #include "vector_x86.h" 187 #include "vector_ppc.h" Vector(T a)
Initializes all elements to the same value.
Definition: vector.h:58
Definition: type_traits.h:34
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24
SafePtr< CTimeEntity< typename ProductType< T, U >::result > > operator*(const SafePtr< CTimeEntity< T > > &A, const SafePtr< CTimeEntity< U > > &B)
Creates product A*B.
Definition: entity.h:280
Vector(T(&a)[N])
creates a vector of values initialized by an ordinary static-sized array
Definition: vector.h:65
Vector<N,T> is used by vectorized Libint library as fixed-length vectors amenable for SIMD-style para...
Definition: vector.h:46
Definition: type_traits.h:29
Vector()
creates a vector of default-initialized values.
Definition: vector.h:53