File: sort1.c

    1   /*
    2    * File: sort1.c
    3    *
    4    * MATLAB Coder version            : 3.1
    5    * C/C++ source code generated on  : 22-Apr-2021 15:58:03
    6    */
    7   
    8   /* Include Files */
    9   #include "rt_nonfinite.h"
   10   #include "matlabfindpeaks.h"
   11   #include "sort1.h"
   12   #include "sortIdx.h"
   13   #include "matlabfindpeaks_emxutil.h"
   14   #include "nonSingletonDim.h"
   15   
   16   /* Function Declarations */
   17   static void b_sort(emxArray_real_T *x, int dim, emxArray_int32_T *idx);
   18   
   19   /* Function Definitions */
   20   
   21   /*
   22    * Arguments    : emxArray_real_T *x
   23    *                int dim
   24    *                emxArray_int32_T *idx
   25    * Return Type  : void
   26    */
   27   static void b_sort(emxArray_real_T *x, int dim, emxArray_int32_T *idx)
   28   {
   29     int i5;
   30     emxArray_real_T *vwork;
   31     int vstride;
   32     int x_idx_0;
   33     int j;
   34     emxArray_int32_T *iidx;
   35     if (dim <= 1) {
   36       i5 = x->size[0];
   37     } else {
   38       i5 = 1;
   39     }
   40   
   41     emxInit_real_T(&vwork, 1);
   42     vstride = vwork->size[0];
   43     vwork->size[0] = i5;
   44     emxEnsureCapacity((emxArray__common *)vwork, vstride, (int)sizeof(double));
   45     x_idx_0 = x->size[0];
   46     vstride = idx->size[0];
   47     idx->size[0] = x_idx_0;
   48     emxEnsureCapacity((emxArray__common *)idx, vstride, (int)sizeof(int));
   49     vstride = 1;
   50     x_idx_0 = 1;
   51     while (x_idx_0 <= dim - 1) {
   52       vstride *= x->size[0];
   53       x_idx_0 = 2;
   54     }
   55   
   56     j = 0;
   57     emxInit_int32_T(&iidx, 1);
   58     while (j + 1 <= vstride) {
   59       for (x_idx_0 = 0; x_idx_0 + 1 <= i5; x_idx_0++) {
   60         vwork->data[x_idx_0] = x->data[j + x_idx_0 * vstride];
   61       }
   62   
   63       sortIdx(vwork, iidx);
   64       for (x_idx_0 = 0; x_idx_0 + 1 <= i5; x_idx_0++) {
   65         x->data[j + x_idx_0 * vstride] = vwork->data[x_idx_0];
   66         idx->data[j + x_idx_0 * vstride] = iidx->data[x_idx_0];
   67       }
   68   
   69       j++;
   70     }
   71   
   72     emxFree_int32_T(&iidx);
   73     emxFree_real_T(&vwork);
   74   }
   75   
   76   /*
   77    * Arguments    : emxArray_real_T *x
   78    * Return Type  : void
   79    */
   80   void c_sort(emxArray_real_T *x)
   81   {
   82     int dim;
   83     int i6;
   84     emxArray_real_T *vwork;
   85     int j;
   86     int vstride;
   87     int k;
   88     emxArray_int32_T *b_vwork;
   89     dim = nonSingletonDim(x);
   90     if (dim <= 1) {
   91       i6 = x->size[0];
   92     } else {
   93       i6 = 1;
   94     }
   95   
   96     emxInit_real_T(&vwork, 1);
   97     j = vwork->size[0];
   98     vwork->size[0] = i6;
   99     emxEnsureCapacity((emxArray__common *)vwork, j, (int)sizeof(double));
  100     vstride = 1;
  101     k = 1;
  102     while (k <= dim - 1) {
  103       vstride *= x->size[0];
  104       k = 2;
  105     }
  106   
  107     j = 0;
  108     emxInit_int32_T(&b_vwork, 1);
  109     while (j + 1 <= vstride) {
  110       for (k = 0; k + 1 <= i6; k++) {
  111         vwork->data[k] = x->data[j + k * vstride];
  112       }
  113   
  114       b_sortIdx(vwork, b_vwork);
  115       for (k = 0; k + 1 <= i6; k++) {
  116         x->data[j + k * vstride] = vwork->data[k];
  117       }
  118   
  119       j++;
  120     }
  121   
  122     emxFree_int32_T(&b_vwork);
  123     emxFree_real_T(&vwork);
  124   }
  125   
  126   /*
  127    * Arguments    : emxArray_real_T *x
  128    *                emxArray_int32_T *idx
  129    * Return Type  : void
  130    */
  131   void sort(emxArray_real_T *x, emxArray_int32_T *idx)
  132   {
  133     int i4;
  134     i4 = nonSingletonDim(x);
  135     b_sort(x, i4, idx);
  136   }
  137   
  138   /*
  139    * File trailer for sort1.c
  140    *
  141    * [EOF]
  142    */
  143