1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
//------------------------------------------------------------------------------
// GrB_Matrix_exportSize: determine sizes of arrays for GrB_Matrix_export
//------------------------------------------------------------------------------
// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//------------------------------------------------------------------------------
#include "GB_transpose.h"
#define GB_FREE_ALL ;
GrB_Info GrB_Matrix_exportSize // determine sizes of user arrays for export
(
GrB_Index *Ap_len, // # of entries required for Ap (not # of bytes)
GrB_Index *Ai_len, // # of entries required for Ai (not # of bytes)
GrB_Index *Ax_len, // # of entries required for Ax (not # of bytes)
GrB_Format format, // export format
GrB_Matrix A // matrix to export
)
{
//--------------------------------------------------------------------------
// check inputs
//--------------------------------------------------------------------------
GB_WHERE1 ("GrB_Matrix_exportSize (&Ap_len, &Ai_len, &Ax_len, format, A)") ;
GB_RETURN_IF_NULL_OR_FAULTY (A) ;
GB_RETURN_IF_NULL (Ap_len) ;
GB_RETURN_IF_NULL (Ai_len) ;
GB_RETURN_IF_NULL (Ax_len) ;
GrB_Info info ;
GrB_Index nvals ;
GB_OK (GB_nvals (&nvals, A, Context)) ;
(*Ax_len) = nvals ;
//--------------------------------------------------------------------------
// determine the sizes of Ap and Ai for each format
//--------------------------------------------------------------------------
switch (format)
{
case GrB_CSR_FORMAT :
(*Ap_len) = GB_NROWS (A) + 1 ;
(*Ai_len) = nvals ;
break ;
case GrB_CSC_FORMAT :
(*Ap_len) = GB_NCOLS (A) + 1 ;
(*Ai_len) = nvals ;
break ;
// case GrB_DENSE_ROW_FORMAT :
// case GrB_DENSE_COL_FORMAT :
// (*Ap_len) = 0 ;
// (*Ai_len) = 0 ;
// if (!GB_is_dense (A))
// {
// // A must dense or full
// return (GrB_INVALID_VALUE) ;
// }
// break ;
case GrB_COO_FORMAT :
(*Ap_len) = nvals ;
(*Ai_len) = nvals ;
break ;
default :
// unknown format
return (GrB_INVALID_VALUE) ;
}
#pragma omp flush
return (GrB_SUCCESS) ;
}
|