| 9 | #include "../../util/rmalloc.h" |
| 10 | |
| 11 | GrB_Info RG_Matrix_export |
| 12 | ( |
| 13 | GrB_Matrix *A, |
| 14 | RG_Matrix C |
| 15 | ) { |
| 16 | ASSERT(C != NULL); |
| 17 | ASSERT(A != NULL); |
| 18 | |
| 19 | GrB_Type t; |
| 20 | GrB_Index nrows; |
| 21 | GrB_Index ncols; |
| 22 | GrB_Index dp_nvals; |
| 23 | GrB_Index dm_nvals; |
| 24 | GrB_Matrix a = NULL; |
| 25 | GrB_Matrix m = RG_MATRIX_M(C); |
| 26 | GrB_Info info = GrB_SUCCESS; |
| 27 | GrB_Matrix dp = RG_MATRIX_DELTA_PLUS(C); |
| 28 | GrB_Matrix dm = RG_MATRIX_DELTA_MINUS(C); |
| 29 | |
| 30 | info = GxB_Matrix_type(&t, m); |
| 31 | ASSERT(info == GrB_SUCCESS); |
| 32 | |
| 33 | info = GrB_Matrix_nrows(&nrows, m); |
| 34 | ASSERT(info == GrB_SUCCESS); |
| 35 | |
| 36 | info = GrB_Matrix_ncols(&ncols, m); |
| 37 | ASSERT(info == GrB_SUCCESS); |
| 38 | |
| 39 | info = GrB_Matrix_new(&a, t, nrows, ncols); |
| 40 | ASSERT(info == GrB_SUCCESS); |
| 41 | |
| 42 | info = GrB_wait(dp, GrB_MATERIALIZE); |
| 43 | ASSERT(info == GrB_SUCCESS); |
| 44 | |
| 45 | info = GrB_wait(dm, GrB_MATERIALIZE); |
| 46 | ASSERT(info == GrB_SUCCESS); |
| 47 | |
| 48 | info = GrB_Matrix_nvals(&dp_nvals, dp); |
| 49 | ASSERT(info == GrB_SUCCESS); |
| 50 | info = GrB_Matrix_nvals(&dm_nvals, dm); |
| 51 | ASSERT(info == GrB_SUCCESS); |
| 52 | |
| 53 | bool additions = dp_nvals > 0; |
| 54 | bool deletions = dm_nvals > 0; |
| 55 | |
| 56 | //-------------------------------------------------------------------------- |
| 57 | // perform copy and deletions if needed |
| 58 | //-------------------------------------------------------------------------- |
| 59 | |
| 60 | // in case there are items to delete use mask otherwise just copy |
| 61 | GrB_Matrix mask = deletions ? dm : NULL; |
| 62 | GrB_Descriptor desc = deletions ? GrB_DESC_RSCT0 : GrB_DESC_RT0; |
| 63 | info = GrB_transpose(a, mask, NULL, m, desc); |
| 64 | ASSERT(info == GrB_SUCCESS); |
| 65 | |
| 66 | //-------------------------------------------------------------------------- |
| 67 | // perform additions |
| 68 | //-------------------------------------------------------------------------- |