ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
matrix_wrapper.h
Go to the documentation of this file.
1//==========================================================
2// AUTHOR : Peize Lin
3// DATE : 2018-07-31
4//==========================================================
5
6#ifndef MATRIX_WRAPPER_TIANHE2
7
8#ifndef MATRIX_WRAPPER_H
9#define MATRIX_WRAPPER_H
10
11#include "matrix.h"
12#include <cstring>
13
14// !!! Attention: c is very dangerous, may be changed by other class,
15// e.g. changed the value, size!=nr*nc, deleted
16namespace ModuleBase
17{
18
20{
21public:
22 int nr;
23 int nc;
24 double *c;
26
27 Matrix_Wrapper(): nr(0), nc(0), c(nullptr), flag_delete_c(false){}
28 Matrix_Wrapper( const matrix &m ): nr(m.nr), nc(m.nc), c(m.c), flag_delete_c(false){}
29 inline void create( const int nr_in, const int nc_in, const bool flag_zero );
30 inline matrix to_matrix();
32 Matrix_Wrapper( const Matrix_Wrapper &m )=delete;
34 inline Matrix_Wrapper( Matrix_Wrapper &&m );
35 inline Matrix_Wrapper&operator=( const Matrix_Wrapper&m );
37};
38
39
40inline void Matrix_Wrapper::create( const int nr_in, const int nc_in, const bool flag_zero )
41{
42 nr = nr_in; nc = nc_in;
44 delete[] c;
45 c = new double[nr*nc];
46 flag_delete_c = true;
47 if(flag_zero)
48 memset( c, 0, sizeof(double)*nr*nc );
49}
50
52{
53 assert( flag_delete_c==true );
54 flag_delete_c = false;
55 matrix m;
56 m.nr = nr; m.nc = nc;
57 m.c = c;
58 return m;
59}
60
62 :nr(m.nr),
63 nc(m.nc),
64 c(m.c),
65 flag_delete_c(m.flag_delete_c)
66{
67 m.nr = m.nc = 0;
68 m.c = nullptr;
69 m.flag_delete_c = false;
70}
71
73{
74 assert( !m.flag_delete_c );
75 nr = m.nr; nc = m.nc; c = m.c; flag_delete_c = m.flag_delete_c;
76 return *this;
77}
78
80{
81 nr = m.nr; nc = m.nc; c = m.c; flag_delete_c = m.flag_delete_c;
82 m.nr = 0; m.nc = 0; m.c = nullptr; m.flag_delete_c = false;
83 return *this;
84}
85
86}
87
88#endif
89
90#else
92#endif
Definition matrix_wrapper.h:20
Matrix_Wrapper()
Definition matrix_wrapper.h:27
matrix to_matrix()
Definition matrix_wrapper.h:51
bool flag_delete_c
Definition matrix_wrapper.h:25
Matrix_Wrapper & operator=(const Matrix_Wrapper &m)
Definition matrix_wrapper.h:72
int nr
Definition matrix_wrapper.h:22
double * c
Definition matrix_wrapper.h:24
Matrix_Wrapper(const Matrix_Wrapper &m)=delete
Matrix_Wrapper(const matrix &m)
Definition matrix_wrapper.h:28
void create(const int nr_in, const int nc_in, const bool flag_zero)
Definition matrix_wrapper.h:40
int nc
Definition matrix_wrapper.h:23
Matrix_Wrapper(Matrix_Wrapper &m)=delete
~Matrix_Wrapper()
Definition matrix_wrapper.h:31
Definition matrix.h:19
int nr
Definition matrix.h:23
double * c
Definition matrix.h:25
int nc
Definition matrix.h:24
Definition array_pool.h:6