1 //------------------------------------------------------------------------------
2 // GB_mex_qsort_2: sort using GB_qsort_2
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 "[I,J] = qsort (I,J)"
13 
mexFunction(int nargout,mxArray * pargout[],int nargin,const mxArray * pargin[])14 void mexFunction
15 (
16     int nargout,
17     mxArray *pargout [ ],
18     int nargin,
19     const mxArray *pargin [ ]
20 )
21 {
22 
23     // check inputs
24     if (nargin != 2 || nargout != 2)
25     {
26         mexErrMsgTxt ("Usage: " USAGE) ;
27     }
28     if (!mxIsClass (pargin [0], "int64"))
29     {
30         mexErrMsgTxt ("I must be a int64 array") ;
31     }
32     if (!mxIsClass (pargin [1], "int64"))
33     {
34         mexErrMsgTxt ("J must be a int64 array") ;
35     }
36 
37     int64_t *I = mxGetData (pargin [0]) ;
38     int64_t n = (uint64_t) mxGetNumberOfElements (pargin [0]) ;
39 
40     int64_t *J = mxGetData (pargin [1]) ;
41     if (n != (uint64_t) mxGetNumberOfElements (pargin [1]))
42     {
43         mexErrMsgTxt ("I and J must be the same length") ;
44     }
45 
46     pargout [0] = GB_mx_create_full (n, 1, GrB_INT64) ;
47     int64_t *Iout = mxGetData (pargout [0]) ;
48     memcpy (Iout, I, n * sizeof (int64_t)) ;
49 
50     pargout [1] = GB_mx_create_full (n, 1, GrB_INT64) ;
51     int64_t *Jout = mxGetData (pargout [1]) ;
52     memcpy (Jout, J, n * sizeof (int64_t)) ;
53 
54     GB_MEX_TIC ;
55 
56     GB_qsort_2 (Iout, Jout, n) ;
57 
58     GB_MEX_TOC ;
59     GB_mx_put_time ( ) ;
60 }
61 
62