#pragma once #include #include using namespace std; #include "vec_arithmetic.h" /* * @author: Ralf Ratering * @date: 6. March 2008 */ class ValVec { private: valarray v; ValVec(const valarray &x) : v(x) {} // convert from bool array ValVec(const valarray &x) : v(VEC_SIZE) { for(size_t i=0; i (const ValVec& a, const ValVec &b) { return ValVec(a.v > b.v); } friend ValVec operator< (const ValVec& a, const ValVec &b) { return ValVec(a.v < b.v); } friend ValVec operator==(const ValVec& a, const ValVec &b) { return ValVec(a.v == b.v); } friend ValVec operator!=(const ValVec& a, const ValVec &b) { return ValVec(a.v != b.v); } friend ValVec log ( const ValVec &a ) { return ValVec(log(a.v)); } friend ValVec rcp ( const ValVec &a ) { return 1.0f/a.v; } friend ValVec sqrt ( const ValVec &a ) { return ValVec(sqrt(a.v)); } friend ValVec rsqrt ( const ValVec &a ) { return rcp(sqrt(a.v)); } // This will prevent temp vectors from being allocated. ValVec& operator +=(const ValVec &a) { v+=a.v; return *this; } ValVec& operator -=(const ValVec &a) { v-=a.v; return *this; } ValVec& operator *=(const ValVec &a) { v*=a.v; return *this; } ValVec& operator /=(const ValVec &a) { v/=a.v; return *this; } // call define from include file for other ops vec_arithmetic(ValVec, float); template friend basic_ostream<_CharT,_Traits>& operator<<( basic_ostream<_CharT,_Traits> & out, ValVec& vec) { out << "("; for(size_t i=0; i>(istream &strm, ValVec &a ){ float tmp; strm>>tmp; a = tmp; return strm; } };