1 //------------------------------------------------------------------------------
2 // GB_mex_bfs: v = bfs (A,s)
3 //------------------------------------------------------------------------------
4 
5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6 // SPDX-License-Identifier: Apache-2.0
7 
8 //------------------------------------------------------------------------------
9 
10 #include "GB_mex.h"
11 
12 #define USAGE "v = GB_mex_bfs (A,source)"
13 
14 #define FREE_ALL                            \
15 {                                           \
16     GrB_Matrix_free_(&A) ;                  \
17     GrB_Vector_free_(&v) ;                  \
18     GB_mx_put_global (true) ;               \
19 }
20 
mexFunction(int nargout,mxArray * pargout[],int nargin,const mxArray * pargin[])21 void mexFunction
22 (
23     int nargout,
24     mxArray *pargout [ ],
25     int nargin,
26     const mxArray *pargin [ ]
27 )
28 {
29 
30     bool malloc_debug = GB_mx_get_global (true) ;
31     GrB_Matrix A = NULL ;
32     GrB_Vector v = NULL ;
33 
34     // check inputs
35     if (nargout > 1 || nargin < 1 || nargin > 2)
36     {
37         mexErrMsgTxt ("Usage: " USAGE) ;
38     }
39 
40     // get A (shallow copy)
41     A = GB_mx_mxArray_to_Matrix (pargin [0], "A", false, false) ;
42     if (A == NULL && !mxIsEmpty (pargin [0]))
43     {
44         FREE_ALL ;
45         mexErrMsgTxt ("A failed") ;
46     }
47 
48     // get source (default is node 1)
49     GrB_Index GET_SCALAR (1, GrB_Index, source, 0) ;
50 
51     // convert source to zero-based
52     source-- ;
53     printf ("zero-based source node now %g\n", (double) source) ;
54 
55     // do the bfs
56     bfs5m (&v, A, source) ;
57 
58     // return v to MATLAB
59     pargout [0] = GB_mx_Vector_to_mxArray (&v, "v output from bfs", false) ;
60 
61     FREE_ALL ;
62 }
63 
64