1 //------------------------------------------------------------------------------
2 // GB_mex_qsort_3: sort using GB_qsort_3
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,K] = GB_mex_qsort_3 (I,J,K)"
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 != 3 || nargout != 3)
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 if (!mxIsClass (pargin [2], "int64"))
37 {
38 mexErrMsgTxt ("K must be a int64 array") ;
39 }
40
41 int64_t *I = mxGetData (pargin [0]) ;
42 int64_t n = (uint64_t) mxGetNumberOfElements (pargin [0]) ;
43
44 int64_t *J = mxGetData (pargin [1]) ;
45 if (n != (uint64_t) mxGetNumberOfElements (pargin [1]))
46 {
47 mexErrMsgTxt ("I and J must be the same length") ;
48 }
49
50 int64_t *K = mxGetData (pargin [2]) ;
51 if (n != (uint64_t) mxGetNumberOfElements (pargin [2]))
52 {
53 mexErrMsgTxt ("I and K must be the same length") ;
54 }
55
56 pargout [0] = GB_mx_create_full (n, 1, GrB_INT64) ;
57 int64_t *Iout = mxGetData (pargout [0]) ;
58 memcpy (Iout, I, n * sizeof (int64_t)) ;
59
60 pargout [1] = GB_mx_create_full (n, 1, GrB_INT64) ;
61 int64_t *Jout = mxGetData (pargout [1]) ;
62 memcpy (Jout, J, n * sizeof (int64_t)) ;
63
64 pargout [2] = GB_mx_create_full (n, 1, GrB_INT64) ;
65 int64_t *Kout = mxGetData (pargout [2]) ;
66 memcpy (Kout, K, n * sizeof (int64_t)) ;
67
68 GB_MEX_TIC ;
69
70 GB_qsort_3 (Iout, Jout, Kout, n) ;
71
72 GB_MEX_TOC ;
73 GB_mx_put_time ( ) ;
74 }
75
76