1*4d3610e3SJacob Faibussowitsch #include <petsc/private/fortranimpl.h> 2*4d3610e3SJacob Faibussowitsch #include <petscsys.h> 3*4d3610e3SJacob Faibussowitsch 4*4d3610e3SJacob Faibussowitsch #if defined(PETSC_HAVE_FORTRAN_CAPS) 5*4d3610e3SJacob Faibussowitsch #define petsctimsort_ PETSCTIMSORT 6*4d3610e3SJacob Faibussowitsch #define petsctimsortwitharray_ PETSCTIMSORTWITHARRAY 7*4d3610e3SJacob Faibussowitsch #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 8*4d3610e3SJacob Faibussowitsch #define petsctimsort_ petsctimsort 9*4d3610e3SJacob Faibussowitsch #define petsctimsortwitharray_ petsctimsortwitharray 10*4d3610e3SJacob Faibussowitsch #endif 11*4d3610e3SJacob Faibussowitsch 12*4d3610e3SJacob Faibussowitsch struct fc_c { 13*4d3610e3SJacob Faibussowitsch void (*fcmp)(const void *a, const void *b, void *c, int *res); 14*4d3610e3SJacob Faibussowitsch void *fctx; 15*4d3610e3SJacob Faibussowitsch } fc_c; 16*4d3610e3SJacob Faibussowitsch 17*4d3610e3SJacob Faibussowitsch int cmp_via_fortran(const void *a, const void *b, void *ctx) 18*4d3610e3SJacob Faibussowitsch { 19*4d3610e3SJacob Faibussowitsch int result; 20*4d3610e3SJacob Faibussowitsch struct fc_c *fc = (struct fc_c *)ctx; 21*4d3610e3SJacob Faibussowitsch fc->fcmp(a, b, fc->fctx, &result); 22*4d3610e3SJacob Faibussowitsch return result; 23*4d3610e3SJacob Faibussowitsch } 24*4d3610e3SJacob Faibussowitsch 25*4d3610e3SJacob Faibussowitsch PETSC_EXTERN void petsctimsort_(PetscInt *n, void *arr, size_t *size, void (*cmp)(const void *, const void *, void *, int *), void *ctx, PetscErrorCode *ierr) 26*4d3610e3SJacob Faibussowitsch { 27*4d3610e3SJacob Faibussowitsch struct fc_c fc = {cmp, ctx}; 28*4d3610e3SJacob Faibussowitsch *ierr = PetscTimSort(*n,arr,*size,cmp_via_fortran,&fc); 29*4d3610e3SJacob Faibussowitsch } 30*4d3610e3SJacob Faibussowitsch 31*4d3610e3SJacob Faibussowitsch PETSC_EXTERN void petsctimsortwitharray_(PetscInt *n, void *arr, size_t *asize, void *barr, size_t *bsize, void (*cmp)(const void *, const void *, void *, int *), void *ctx, PetscErrorCode *ierr) 32*4d3610e3SJacob Faibussowitsch { 33*4d3610e3SJacob Faibussowitsch struct fc_c fc = {cmp, ctx}; 34*4d3610e3SJacob Faibussowitsch *ierr = PetscTimSortWithArray(*n,arr,*asize,barr,*bsize,cmp_via_fortran,&fc); 35*4d3610e3SJacob Faibussowitsch } 36