NRVec concatenation implemented
This commit is contained in:
		
							parent
							
								
									d1a43830fc
								
							
						
					
					
						commit
						1bfb548835
					
				
							
								
								
									
										42
									
								
								vec.cc
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								vec.cc
									
									
									
									
									
								
							@ -163,6 +163,8 @@ const NRVec<double> NRVec<double>::operator-() const {
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***************************************************************************//**
 | 
			
		||||
 * unary minus operator in case of complex double-precision vector
 | 
			
		||||
 * @return the modified vector by value
 | 
			
		||||
@ -981,6 +983,46 @@ INSTANTIZE_NONCOMPLEX(unsigned long long)
 | 
			
		||||
INSTANTIZE_NONCOMPLEX(float)
 | 
			
		||||
INSTANTIZE_NONCOMPLEX(double)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
 *some efficient specializations of concatenations for plain data types
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
 | 
			
		||||
#define INSTANTIZE_CONCAT(T) \
 | 
			
		||||
template<> \
 | 
			
		||||
NRVec<T> NRVec<T>::concat(const NRVec<T> &rhs) const \
 | 
			
		||||
{ \
 | 
			
		||||
if(nn==0) return rhs; \
 | 
			
		||||
if(rhs.nn==0) return *this; \
 | 
			
		||||
NOT_GPU(*this); \
 | 
			
		||||
NOT_GPU(rhs); \
 | 
			
		||||
NRVec<T> r(nn+rhs.nn); \
 | 
			
		||||
memcpy(r.v,v,nn*sizeof(T)); \
 | 
			
		||||
memcpy(r.v+nn,rhs.v,rhs.nn*sizeof(T)); \
 | 
			
		||||
return r; \
 | 
			
		||||
} \
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INSTANTIZE_CONCAT(char)
 | 
			
		||||
INSTANTIZE_CONCAT(unsigned char)
 | 
			
		||||
INSTANTIZE_CONCAT(short)
 | 
			
		||||
INSTANTIZE_CONCAT(unsigned short)
 | 
			
		||||
INSTANTIZE_CONCAT(int)
 | 
			
		||||
INSTANTIZE_CONCAT(unsigned int)
 | 
			
		||||
INSTANTIZE_CONCAT(long)
 | 
			
		||||
INSTANTIZE_CONCAT(unsigned long)
 | 
			
		||||
INSTANTIZE_CONCAT(long long)
 | 
			
		||||
INSTANTIZE_CONCAT(unsigned long long)
 | 
			
		||||
INSTANTIZE_CONCAT(float)
 | 
			
		||||
INSTANTIZE_CONCAT(double)
 | 
			
		||||
INSTANTIZE_CONCAT(std::complex<float>)
 | 
			
		||||
INSTANTIZE_CONCAT(std::complex<double>)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template class NRVec<double>;
 | 
			
		||||
template class NRVec<std::complex<double> >;
 | 
			
		||||
template class NRVec<char>;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								vec.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								vec.h
									
									
									
									
									
								
							@ -222,7 +222,17 @@ public:
 | 
			
		||||
	inline const NRVec operator-(const T &a) const;
 | 
			
		||||
	inline const NRVec operator*(const T &a) const;
 | 
			
		||||
	inline const NRVec operator/(const T &a) const;
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	//!concatenate vectors
 | 
			
		||||
	NRVec concat(const NRVec &rhs) const 
 | 
			
		||||
		{
 | 
			
		||||
		if(nn==0) return rhs;
 | 
			
		||||
		if(rhs.nn==0) return *this;
 | 
			
		||||
		NRVec r(nn+rhs.nn);
 | 
			
		||||
		for(int i=0; i<nn; ++i) r[i] = (*this)[i];
 | 
			
		||||
		for(int i=0; i<rhs.nn; ++i) r[nn+i] = rhs[i];
 | 
			
		||||
		return r;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	//! determine the actual value of the reference counter 
 | 
			
		||||
	inline int getcount() const {return count?*count:0;}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user