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) |
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 }
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 }