Mercurial > hg > segmenter-vamp-plugin
diff armadillo-2.4.4/include/armadillo_bits/eGlue_meat.hpp @ 0:8b6102e2a9b0
Armadillo Library
author | maxzanoni76 <max.zanoni@eecs.qmul.ac.uk> |
---|---|
date | Wed, 11 Apr 2012 09:27:06 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/armadillo-2.4.4/include/armadillo_bits/eGlue_meat.hpp Wed Apr 11 09:27:06 2012 +0100 @@ -0,0 +1,111 @@ +// Copyright (C) 2010-2011 NICTA (www.nicta.com.au) +// Copyright (C) 2010-2011 Conrad Sanderson +// +// This file is part of the Armadillo C++ library. +// It is provided without any warranty of fitness +// for any purpose. You can redistribute this file +// and/or modify it under the terms of the GNU +// Lesser General Public License (LGPL) as published +// by the Free Software Foundation, either version 3 +// of the License or (at your option) any later version. +// (see http://www.opensource.org/licenses for more info) + + +//! \addtogroup eGlue +//! @{ + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +eGlue<T1,T2,eglue_type>::~eGlue() + { + arma_extra_debug_sigprint(); + } + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +eGlue<T1,T2,eglue_type>::eGlue(const T1& in_A, const T2& in_B) + : P1(in_A) + , P2(in_B) + { + arma_extra_debug_sigprint(); + + // arma_debug_assert_same_size( P1, P2, eglue_type::text() ); + arma_debug_assert_same_size + ( + P1.get_n_rows(), P1.get_n_cols(), + P2.get_n_rows(), P2.get_n_cols(), + eglue_type::text() + ); + } + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +uword +eGlue<T1,T2,eglue_type>::get_n_rows() const + { + return P1.get_n_rows(); + } + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +uword +eGlue<T1,T2,eglue_type>::get_n_cols() const + { + return P1.get_n_cols(); + } + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +uword +eGlue<T1,T2,eglue_type>::get_n_elem() const + { + return P1.get_n_elem(); + } + + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +typename T1::elem_type +eGlue<T1,T2,eglue_type>::operator[] (const uword i) const + { + typedef typename T1::elem_type eT; + + // the optimiser will keep only one return statement + + if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1[i] + P2[i]; } + else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1[i] - P2[i]; } + else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1[i] / P2[i]; } + else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1[i] * P2[i]; } + } + + +template<typename T1, typename T2, typename eglue_type> +arma_inline +typename T1::elem_type +eGlue<T1,T2,eglue_type>::at(const uword row, const uword col) const + { + typedef typename T1::elem_type eT; + + // the optimiser will keep only one return statement + + if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1.at(row,col) + P2.at(row,col); } + else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1.at(row,col) - P2.at(row,col); } + else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1.at(row,col) / P2.at(row,col); } + else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1.at(row,col) * P2.at(row,col); } + } + + + + +//! @}