ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
matrix-inl.h
Go to the documentation of this file.
1#ifndef MATRIX_INL_H
2#define MATRIX_INL_H
3
4#include "matrix.h"
5#include <cstring>
6
7// test
8#include <iostream>
9namespace ModuleBase
10{
11
12inline matrix::matrix( const int nrows, const int ncols, const bool flag_zero )
13 :nr(nrows), nc(ncols), c(nullptr)
14{
15std::cout<<__FILE__<<__LINE__<<std::endl;
16 if( nr && nc )
17 {
18// auto handler_old = set_new_handler(matrixAlloc);
19 c = new double[nr*nc];
20// set_new_handler(handler_old);
21 if(flag_zero) this->zero_out();
22 }
23}
24
25inline matrix::matrix( const matrix &m_in )
26{
27std::cout<<__FILE__<<__LINE__<<std::endl;
28 create( m_in.nr, m_in.nc, false );
29std::cout<<__FILE__<<__LINE__<<std::endl;
30 memcpy( c, m_in.c, nr*nc*sizeof(double) );
31std::cout<<__FILE__<<__LINE__<<std::endl;
32}
33
34// Peize Lin add 2016-08-05
35inline matrix::matrix( matrix && m_in )
36{
37std::cout<<__FILE__<<__LINE__<<std::endl;
38 nr = m_in.nr; nc = m_in.nc;
39 c = m_in.c;
40 m_in.nr = m_in.nc = 0;
41 m_in.c = nullptr;
42}
43
44// Peize Lin change 2018-07-02
45inline matrix& matrix::operator=( const matrix & m_in )
46{
47std::cout<<__FILE__<<__LINE__<<std::endl;
48 this->create( m_in.nr, m_in.nc, false );
49std::cout<<__FILE__<<__LINE__<<std::endl;
50 memcpy( c, m_in.c, nr*nc*sizeof(double) );
51std::cout<<__FILE__<<__LINE__<<std::endl;
52 return *this;
53}
54
55// Peize Lin add 2016-08-05
57{
58std::cout<<__FILE__<<__LINE__<<std::endl;
59 nr = m_in.nr; nc = m_in.nc;
60 if(c) delete[] c;
61 c = m_in.c;
62 m_in.nr = m_in.nc = 0;
63 m_in.c = nullptr;
64std::cout<<__FILE__<<__LINE__<<std::endl;
65 return *this;
66}
67
68inline double & matrix::operator()(const int ir,const int ic)
69{
70 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
71 return c[ir*nc+ic];
72}
73
74inline const double & matrix::operator()(const int ir,const int ic) const
75{
76 assert(ir>=0); assert(ir<nr); assert(ic>=0); assert(ic<nc);
77 return c[ir*nc+ic];
78}
79}
80
81#endif
Definition matrix.h:19
void zero_out(void)
Definition matrix.cpp:281
matrix()
Definition matrix.h:28
int nr
Definition matrix.h:23
double * c
Definition matrix.h:25
int nc
Definition matrix.h:24
matrix & operator=(const matrix &m1)
Definition matrix-inl.h:45
double & operator()(const int ir, const int ic)
Definition matrix.h:38
void create(const int nrow, const int ncol, const bool flag_zero=true)
Definition matrix.cpp:122
Definition array_pool.h:6