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