Op_sort

Classes

class  arma_qsort_helper< eT >
class  arma_qsort_helper< std::complex< T > >
class  op_sort

Functions

template<typename eT >
static void op_sort::direct_sort (eT *X, const u32 N, const u32 sort_type=0)
template<typename T1 >
static void op_sort::apply (Mat< typename T1::elem_type > &out, const Op< T1, op_sort > &in)

Function Documentation

template<typename eT >
void op_sort::direct_sort ( eT *  X,
const u32  N,
const u32  sort_type = 0 
) [inline, static, inherited]

Definition at line 149 of file op_sort_meat.hpp.

Referenced by apply().

00150   {
00151   arma_extra_debug_sigprint();
00152   
00153   if(sort_type == 0)
00154     {
00155     std::qsort(X, n_elem, sizeof(eT), arma_qsort_helper<eT>::ascend_compare);
00156     }
00157   else
00158     {
00159     std::qsort(X, n_elem, sizeof(eT), arma_qsort_helper<eT>::descend_compare);
00160     }
00161   }

template<typename T1 >
void op_sort::apply ( Mat< typename T1::elem_type > &  out,
const Op< T1, op_sort > &  in 
) [inline, static, inherited]

Definition at line 168 of file op_sort_meat.hpp.

References Mat< eT >::at(), Op< T1, op_type >::aux_u32_a, Op< T1, op_type >::aux_u32_b, Mat< eT >::colptr(), Mat< eT >::copy_size(), direct_sort(), Mat< eT >::is_finite(), Op< T1, op_type >::m, Mat< eT >::memptr(), podarray< T1 >::memptr(), Mat< eT >::n_cols, Mat< eT >::n_elem, and Mat< eT >::n_rows.

00169   {
00170   arma_extra_debug_sigprint();
00171   
00172   typedef typename T1::elem_type eT;
00173   
00174   const unwrap<T1>   tmp(in.m);
00175   const Mat<eT>& X = tmp.M;
00176   
00177   const u32 sort_type = in.aux_u32_a;
00178   const u32 dim       = in.aux_u32_b;
00179   
00180   arma_debug_check( (X.is_finite() == false), "sort(): given object has non-finite elements"     );
00181   arma_debug_check( (sort_type > 1),          "sort(): incorrect usage. sort_type must be 0 or 1");
00182   arma_debug_check( (dim > 1),                "sort(): incorrect usage. dim must be 0 or 1"      );
00183   
00184   
00185   if(dim == 0)  // column-wise
00186     {
00187     arma_extra_debug_print("op_sort::apply(), dim = 0");
00188     
00189     out = X;
00190     
00191     for(u32 col=0; col<out.n_cols; ++col)
00192       {
00193       op_sort::direct_sort( out.colptr(col), out.n_rows, sort_type );
00194       }
00195     }
00196   else
00197   if(dim == 1)  // row-wise
00198     {
00199     if(X.n_rows != 1)  // not a row vector
00200       {
00201       arma_extra_debug_print("op_sort::apply(), dim = 1, generic");
00202       
00203       //out.set_size(X.n_rows, X.n_cols);
00204       out.copy_size(X);
00205       
00206       podarray<eT> tmp_array(X.n_cols);
00207       
00208       for(u32 row=0; row<out.n_rows; ++row)
00209         {
00210         
00211         for(u32 col=0; col<out.n_cols; ++col)
00212           {
00213           tmp_array[col] = X.at(row,col);
00214           }
00215         
00216         op_sort::direct_sort( tmp_array.memptr(), out.n_cols, sort_type );
00217         
00218         for(u32 col=0; col<out.n_cols; ++col)
00219           {
00220           out.at(row,col) = tmp_array[col];
00221           }
00222         
00223         }
00224       }
00225     else  // a row vector
00226       {
00227       arma_extra_debug_print("op_sort::apply(), dim = 1, vector specific");
00228       
00229       out = X;
00230       op_sort::direct_sort(out.memptr(), out.n_elem, sort_type);
00231       }
00232     }
00233   
00234   }