efficient swap operation for vector and matrix classes
This commit is contained in:
parent
3288e51fba
commit
9d0249cdc4
@ -299,6 +299,15 @@ public:
|
|||||||
l=l->next;
|
l=l->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void swap(fourindex &rhs) //more efficient swap than via tmp and constructors and operator=
|
||||||
|
{
|
||||||
|
I tmpnn=nn; nn=rhs.nn; rhs.nn=tmpnn;
|
||||||
|
I tmpterminator=terminator; terminator=rhs.terminator; rhs.terminator=tmpterminator;
|
||||||
|
int *tmpcount=count; count=rhs.count; rhs.count=tmpcount;
|
||||||
|
matel4<I,T> *tmplist=list; list=rhs.list; rhs.list=tmplist;
|
||||||
|
bool tmpdoscaling=doscaling; doscaling=rhs.doscaling; rhs.doscaling=tmpdoscaling;
|
||||||
|
fourindexsymtype tmpsymmetry=symmetry; symmetry=rhs.symmetry; rhs.symmetry=tmpsymmetry;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
16
mat.h
16
mat.h
@ -390,6 +390,22 @@ public:
|
|||||||
void strassen(const T beta, const NRMat &a, const char transa, const NRMat &b, const char transb, const T alpha);
|
void strassen(const T beta, const NRMat &a, const char transa, const NRMat &b, const char transb, const T alpha);
|
||||||
void s_cutoff(const int,const int,const int,const int) const;
|
void s_cutoff(const int,const int,const int,const int) const;
|
||||||
#endif
|
#endif
|
||||||
|
void swap(NRMat &rhs) //more efficient swap than via tmp and constructors and operator=
|
||||||
|
{
|
||||||
|
int tmpnn=nn; nn=rhs.nn; rhs.nn=tmpnn;
|
||||||
|
int tmpmm=mm; mm=rhs.mm; rhs.mm=tmpmm;
|
||||||
|
#ifdef MATPTR
|
||||||
|
T **
|
||||||
|
#else
|
||||||
|
T *
|
||||||
|
#endif
|
||||||
|
tmpv=v; v=rhs.v; rhs.v=tmpv;
|
||||||
|
int *tmpcount=count; count=rhs.count; rhs.count=tmpcount;
|
||||||
|
#ifdef CUDALA
|
||||||
|
GPUID tmplocation=location; location=rhs.location; rhs.location=tmplocation;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}//namespace
|
}//namespace
|
||||||
|
10
smat.h
10
smat.h
@ -176,6 +176,16 @@ public:
|
|||||||
explicit NRSMat(const SparseSMat<T> &rhs); // dense from sparse
|
explicit NRSMat(const SparseSMat<T> &rhs); // dense from sparse
|
||||||
inline void simplify() {}; //just for compatibility with sparse ones
|
inline void simplify() {}; //just for compatibility with sparse ones
|
||||||
bool issymmetric() const {return 1;}
|
bool issymmetric() const {return 1;}
|
||||||
|
void swap(NRSMat &rhs) //more efficient swap than via tmp and constructors and operator=
|
||||||
|
{
|
||||||
|
int tmpnn=nn; nn=rhs.nn; rhs.nn=tmpnn;
|
||||||
|
T *tmpv=v; v=rhs.v; rhs.v=tmpv;
|
||||||
|
int *tmpcount=count; count=rhs.count; rhs.count=tmpcount;
|
||||||
|
#ifdef CUDALA
|
||||||
|
GPUID tmplocation=location; location=rhs.location; rhs.location=tmplocation;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}//namespace
|
}//namespace
|
||||||
|
11
sparsemat.h
11
sparsemat.h
@ -146,6 +146,17 @@ public:
|
|||||||
unsigned int sort(int type) const;
|
unsigned int sort(int type) const;
|
||||||
inline void add(const SPMatindex n, const SPMatindex m, const T elem) {matel<T> *ltmp= new matel<T>; ltmp->next=list; list=ltmp; list->row=n; list->col=m; list->elem=elem;}
|
inline void add(const SPMatindex n, const SPMatindex m, const T elem) {matel<T> *ltmp= new matel<T>; ltmp->next=list; list=ltmp; list->row=n; list->col=m; list->elem=elem;}
|
||||||
void addsafe(const SPMatindex n, const SPMatindex m, const T elem);
|
void addsafe(const SPMatindex n, const SPMatindex m, const T elem);
|
||||||
|
void swap(SparseMat &rhs) //more efficient swap than via tmp and constructors and operator=
|
||||||
|
{
|
||||||
|
SPMatindex tmpnn=nn; nn=rhs.nn; rhs.nn=tmpnn;
|
||||||
|
SPMatindex tmpmm=mm; mm=rhs.mm; rhs.mm=tmpmm;
|
||||||
|
int *tmpcount=count; count=rhs.count; rhs.count=tmpcount;
|
||||||
|
bool tmpsymmetric=symmetric; symmetric=rhs.symmetric; rhs.symmetric=tmpsymmetric;
|
||||||
|
int tmpnonzero=nonzero; nonzero=rhs.nonzero; rhs.nonzero=tmpnonzero;
|
||||||
|
matel<T> *tmplist=list; list=rhs.list; rhs.list=tmplist;
|
||||||
|
matel<T> **tmprowsorted=rowsorted; rowsorted=rhs.rowsorted; rhs.rowsorted=tmprowsorted;
|
||||||
|
matel<T> **tmpcolsorted=colsorted; colsorted=rhs.colsorted; rhs.colsorted=tmpcolsorted;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}//namespace
|
}//namespace
|
||||||
|
11
vec.h
11
vec.h
@ -383,6 +383,17 @@ public:
|
|||||||
for(int i=0; i<nn; ++i) v[i] = _F(v[i]);
|
for(int i=0; i<nn; ++i) v[i] = _F(v[i]);
|
||||||
return *this;
|
return *this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void swap(NRVec &rhs) //more efficient swap than via tmp and constructors and operator=
|
||||||
|
{
|
||||||
|
int tmpnn=nn; nn=rhs.nn; rhs.nn=tmpnn;
|
||||||
|
T *tmpv=v; v=rhs.v; rhs.v=tmpv;
|
||||||
|
int *tmpcount=count; count=rhs.count; rhs.count=tmpcount;
|
||||||
|
#ifdef CUDALA
|
||||||
|
GPUID tmplocation=location; location=rhs.location; rhs.location=tmplocation;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user