13
* More operator overloading stuff (a lot!!) to come.
17
GA::GlobalArray::operator=(const GA::GlobalArray &g_a) {
22
mHandle = GA_Duplicate(g_a.mHandle, g_a.inquireName());
23
if(!mHandle) GA_Error((char *)" GA creation failed",0);
25
GA_Copy(g_a.mHandle, mHandle);
31
GA::GlobalArray::operator==(const GA::GlobalArray &g_a) const {
35
int i, type1, type2, ndim1, ndim2, dims1[GA_MAX_DIM], dims2[GA_MAX_DIM];
36
int alo[GA_MAX_DIM], ahi[GA_MAX_DIM], blo[GA_MAX_DIM], bhi[GA_MAX_DIM];
38
NGA_Inquire(mHandle, &type1, &ndim1, dims1);
39
NGA_Inquire(g_a.mHandle, &type2, &ndim2, dims2);
40
if(type1 != type2) isEqual = FALSE; // check type
41
if(GA_Compare_distr(mHandle, g_a.mHandle)) isEqual = FALSE;
42
NGA_Distribution(mHandle, GA_Nodeid(), alo, ahi);
43
NGA_Distribution(g_a.mHandle, GA_Nodeid(), blo, bhi);
44
if(ahi[0] != bhi[0]) isEqual = FALSE; // check process owns data?
46
if(ahi[0] >= 0) { // true => process owns data
47
void *ptr1 = NULL, *ptr2 = NULL;
52
NGA_Access(mHandle, alo, ahi, &ptr1, ld1);
53
NGA_Access(g_a.mHandle, blo, bhi, &ptr2, ld2);
55
// number of elements I own.
56
for(i=0; i<ndim1; i++) num += ahi[i] - alo[i] + 1;
61
if(((int *)ptr1)[i] != ((int *)ptr2)[i]) isEqual = FALSE;
64
if(((long *)ptr1)[i] != ((long *)ptr2)[i]) isEqual = FALSE;
67
if(((float *)ptr1)[i] != ((float *)ptr2)[i]) isEqual = FALSE;
70
if(((double *)ptr1)[i] != ((double *)ptr2)[i]) isEqual = FALSE;
73
if(((DoubleComplex *)ptr1)[i].real !=
74
((DoubleComplex *)ptr2)[i].real) isEqual = FALSE;
75
if(((DoubleComplex *)ptr1)[i].imag !=
76
((DoubleComplex *)ptr2)[i].imag) isEqual = FALSE;
78
NGA_Release(mHandle, alo, ahi);
79
NGA_Release(g_a.mHandle, blo, bhi);
82
GA_Lgop(&isEqual, 1, (char *)"*");
83
if(isEqual == TRUE) return TRUE;
88
GA::GlobalArray::operator!=(const GA::GlobalArray &g_a) const {
89
if(*this == g_a) return FALSE;