NRVec::prepend implemented
This commit is contained in:
		
							parent
							
								
									8e9a8a999b
								
							
						
					
					
						commit
						2922330c80
					
				
							
								
								
									
										5
									
								
								t.cc
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								t.cc
									
									
									
									
									
								
							@ -2574,12 +2574,13 @@ cout <<test;
 | 
				
			|||||||
cout <<"Error = "<<(expitszsz-test).norm()<<endl;
 | 
					cout <<"Error = "<<(expitszsz-test).norm()<<endl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(0)
 | 
					if(1)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRVec<double> x({1,2,3});
 | 
					NRVec<double> x({1,2,3});
 | 
				
			||||||
NRVec<double> y({4,5,6});
 | 
					NRVec<double> y({4,5,6});
 | 
				
			||||||
//cout <<x.concat(y);
 | 
					//cout <<x.concat(y);
 | 
				
			||||||
x.append(10.);
 | 
					x.append(10.);
 | 
				
			||||||
 | 
					x.prepend(11.);
 | 
				
			||||||
cout <<x;
 | 
					cout <<x;
 | 
				
			||||||
x.concatme(y);
 | 
					x.concatme(y);
 | 
				
			||||||
cout <<x;
 | 
					cout <<x;
 | 
				
			||||||
@ -2724,7 +2725,7 @@ NRMat<std::complex<double> > uubartest2c = NRMat<std::complex<double> >(ainv) *
 | 
				
			|||||||
cout <<"nonpseudounitarity of explicit uubar = "<<uubartest2c.norm(1.)<<endl;
 | 
					cout <<"nonpseudounitarity of explicit uubar = "<<uubartest2c.norm(1.)<<endl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(1)
 | 
					if(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
laerror("test exception");
 | 
					laerror("test exception");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										31
									
								
								vec.h
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								vec.h
									
									
									
									
									
								
							@ -273,6 +273,15 @@ public:
 | 
				
			|||||||
                v[nnold] = a;
 | 
					                v[nnold] = a;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void prepend(const T &a) //not efficient if done repeatedly
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
							NOT_GPU(*this); 
 | 
				
			||||||
 | 
					                int nnold=nn;
 | 
				
			||||||
 | 
					                resize(nn+1,true,true);
 | 
				
			||||||
 | 
					                v[0] = a;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//! determine the actual value of the reference counter 
 | 
						//! determine the actual value of the reference counter 
 | 
				
			||||||
	inline int getcount() const {return count?*count:0;}
 | 
						inline int getcount() const {return count?*count:0;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -375,7 +384,7 @@ public:
 | 
				
			|||||||
	inline int size() const;
 | 
						inline int size() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//! resize the current vector, optionally preserving data
 | 
						//! resize the current vector, optionally preserving data
 | 
				
			||||||
	void resize(const int n, const bool preserve=false);
 | 
						void resize(const int n, const bool preserve=false, const bool preserve_at_end=false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//!deallocate the current vector
 | 
						//!deallocate the current vector
 | 
				
			||||||
	void dealloc(void) {resize(0);}
 | 
						void dealloc(void) {resize(0);}
 | 
				
			||||||
@ -1158,7 +1167,7 @@ NRVec<T> & NRVec<T>::operator=(const NRVec<T> &rhs) {
 | 
				
			|||||||
 * @param[in] n requested size
 | 
					 * @param[in] n requested size
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
void NRVec<T>::resize(const int n, const bool preserve) 
 | 
					void NRVec<T>::resize(const int n, const bool preserve, const bool preserve_at_end) 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
	if(n < 0) laerror("illegal dimension in NRVec::resize");
 | 
						if(n < 0) laerror("illegal dimension in NRVec::resize");
 | 
				
			||||||
@ -1254,18 +1263,36 @@ if(nn<nnmin) nnmin=nn;
 | 
				
			|||||||
if(location == cpu)
 | 
					if(location == cpu)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
#endif       
 | 
					#endif       
 | 
				
			||||||
 | 
						if(preserve_at_end)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							for(int i=0; i<nnmin; ++i) v[nn-i-1]=vold[nnold-i-1]; //preserve even non-plain data classes
 | 
				
			||||||
 | 
					                if(nn>nnold) memset(v,0,(nn-nnold)*sizeof(T)); //just zero the new memory
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
		for(int i=0; i<nnmin; ++i) v[i]=vold[i]; //preserve even non-plain data classes
 | 
							for(int i=0; i<nnmin; ++i) v[i]=vold[i]; //preserve even non-plain data classes
 | 
				
			||||||
		if(nn>nnold) memset(v+nnold,0,(nn-nnold)*sizeof(T)); //just zero the new memory
 | 
							if(nn>nnold) memset(v+nnold,0,(nn-nnold)*sizeof(T)); //just zero the new memory
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	if(do_delete) delete[] vold;
 | 
						if(do_delete) delete[] vold;
 | 
				
			||||||
#ifdef CUDALA
 | 
					#ifdef CUDALA
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
	//!!!works only with plain data
 | 
						//!!!works only with plain data
 | 
				
			||||||
 | 
						if(preserve_at_end)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
							cublasSetVector(nnmin, sizeof(T), vold+nnold-nnmin, 1, v+nn-nnmin, 1);
 | 
				
			||||||
 | 
					                TEST_CUBLAS("cublasSetVector");
 | 
				
			||||||
 | 
					                T a(0);
 | 
				
			||||||
 | 
					                if(nn>nnold) smart_gpu_set(nn-nnold, a, v);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
		cublasSetVector(nnmin, sizeof(T), vold, 1, v, 1);
 | 
							cublasSetVector(nnmin, sizeof(T), vold, 1, v, 1);
 | 
				
			||||||
		TEST_CUBLAS("cublasSetVector"); 
 | 
							TEST_CUBLAS("cublasSetVector"); 
 | 
				
			||||||
		T a(0);
 | 
							T a(0);
 | 
				
			||||||
		if(nn>nnold) smart_gpu_set(nn-nnold, a, v+nnold);
 | 
							if(nn>nnold) smart_gpu_set(nn-nnold, a, v+nnold);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	if(do_delete) gpufree(vold);
 | 
						if(do_delete) gpufree(vold);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user