op_median_proto.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2010 NICTA and the authors listed below
00002 // http://nicta.com.au
00003 // 
00004 // Authors:
00005 // - Conrad Sanderson (conradsand at ieee dot org)
00006 // 
00007 // This file is part of the Armadillo C++ library.
00008 // It is provided without any warranty of fitness
00009 // for any purpose. You can redistribute this file
00010 // and/or modify it under the terms of the GNU
00011 // Lesser General Public License (LGPL) as published
00012 // by the Free Software Foundation, either version 3
00013 // of the License or (at your option) any later version.
00014 // (see http://www.opensource.org/licenses for more info)
00015 
00016 
00017 //! \addtogroup op_median
00018 //! @{
00019 
00020 
00021 template<typename T>
00022 struct arma_cx_median_packet
00023   {
00024   T   val;
00025   u32 index;
00026   };
00027 
00028 
00029 
00030 template<typename T>
00031 inline
00032 bool
00033 operator< (const arma_cx_median_packet<T>& A, const arma_cx_median_packet<T>& B)
00034   {
00035   return A.val < B.val;
00036   }
00037 
00038 
00039 
00040 //! Class for finding median values of a matrix
00041 class op_median
00042   {
00043   public:
00044   
00045   template<typename eT>
00046   inline static eT              direct_median(std::vector<eT>& X);
00047   
00048   template<typename eT>
00049   inline static eT              direct_median(const eT* X, const u32 n_elem);
00050   
00051   template<typename eT>
00052   inline static eT              direct_median(const subview<eT>& X);
00053   
00054   template<typename eT>
00055   inline static eT              direct_median(const diagview<eT>& X);
00056   
00057   template<typename T1>
00058   inline static void apply(Mat<typename T1::elem_type>& out, const Op<T1,op_median>& in);
00059   
00060   
00061   //
00062   // for complex numbers
00063   
00064   template<typename T>
00065   inline static void direct_cx_median_index(u32& out_index1, u32& out_index2, std::vector< arma_cx_median_packet<T> >& X);
00066   
00067   template<typename T>
00068   inline static void direct_cx_median_index(u32& out_index1, u32& out_index2, const std::complex<T>* X, const u32 n_elem);
00069   
00070   template<typename T>
00071   inline static void direct_cx_median_index(u32& out_index1, u32& out_index2, const subview< std::complex<T> >& X);
00072   
00073   template<typename T>
00074   inline static void direct_cx_median_index(u32& out_index1, u32& out_index2, const diagview< std::complex<T> >& X);
00075   
00076   template<typename T, typename T1>
00077   inline static void apply(Mat< std::complex<T> >& out, const Op<T1,op_median>& in);
00078   
00079   
00080   };
00081 
00082 //! @}