Mercurial > hg > segmenter-vamp-plugin
diff armadillo-2.4.4/include/armadillo_bits/unwrap.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/unwrap.hpp Wed Apr 11 09:27:06 2012 +0100 @@ -0,0 +1,1483 @@ +// Copyright (C) 2008-2011 NICTA (www.nicta.com.au) +// Copyright (C) 2008-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 unwrap +//! @{ + + + +template<typename T1> +class unwrap + { + public: + + typedef typename T1::elem_type eT; + + inline unwrap(const T1& A) // TODO: change this to Base ? + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Mat<eT> M; + }; + + + +template<typename eT> +class unwrap< Mat<eT> > + { + public: + + inline unwrap(const Mat<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Mat<eT>& M; + }; + + + +template<typename eT> +class unwrap< Row<eT> > + { + public: + + inline unwrap(const Row<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Row<eT>& M; + }; + + + +template<typename eT> +class unwrap< Col<eT> > + { + public: + + inline unwrap(const Col<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Col<eT>& M; + }; + + + +template<typename out_eT, typename T1, typename T2, typename glue_type> +class unwrap< mtGlue<out_eT, T1, T2, glue_type> > + { + public: + + inline unwrap(const mtGlue<out_eT, T1, T2, glue_type>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Mat<out_eT> M; + }; + + +template<typename out_eT, typename T1, typename op_type> +class unwrap< mtOp<out_eT, T1, op_type> > + { + public: + + inline unwrap(const mtOp<out_eT, T1, op_type>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + const Mat<out_eT> M; + }; + + + +// +// +// + + +template<typename T1> +class unwrap_check + { + public: + + typedef typename T1::elem_type eT; + + inline + unwrap_check(const T1& A, const Mat<eT>& B) + : M(A) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~unwrap_check() + { + arma_extra_debug_sigprint(); + } + + const Mat<eT> M; + }; + + + +template<typename eT> +class unwrap_check< Mat<eT> > + { + public: + + inline + unwrap_check(const Mat<eT>& A, const Mat<eT>& B) + : M_local( (&A == &B) ? new Mat<eT>(A) : 0 ) + , M ( (&A == &B) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class unwrap_check< Row<eT> > + { + public: + + inline + unwrap_check(const Row<eT>& A, const Mat<eT>& B) + : M_local( (&A == reinterpret_cast<const Row<eT>*>(&B)) ? new Row<eT>(A) : 0 ) + , M ( (&A == reinterpret_cast<const Row<eT>*>(&B)) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Row<eT>* M_local; + const Row<eT>& M; + }; + + + +template<typename eT> +class unwrap_check< Col<eT> > + { + public: + + inline + unwrap_check(const Col<eT>& A, const Mat<eT>& B) + : M_local( (&A == reinterpret_cast<const Col<eT>*>(&B)) ? new Col<eT>(A) : 0 ) + , M ( (&A == reinterpret_cast<const Col<eT>*>(&B)) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Col<eT>* M_local; + const Col<eT>& M; + + }; + + + +// +// +// + + + +template<typename T1> +class unwrap_check_mixed + { + public: + + typedef typename T1::elem_type eT1; + + template<typename eT2> + inline + unwrap_check_mixed(const T1& A, const Mat<eT2>& B) + : M(A) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~unwrap_check_mixed() + { + arma_extra_debug_sigprint(); + } + + const Mat<eT1> M; + }; + + + +template<typename eT1> +class unwrap_check_mixed< Mat<eT1> > + { + public: + + template<typename eT2> + inline + unwrap_check_mixed(const Mat<eT1>& A, const Mat<eT2>& B) + : M_local( (void_ptr(&A) == void_ptr(&B)) ? new Mat<eT1>(A) : 0 ) + , M ( (void_ptr(&A) == void_ptr(&B)) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check_mixed() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Mat<eT1>* M_local; + const Mat<eT1>& M; + }; + + + +template<typename eT1> +class unwrap_check_mixed< Row<eT1> > + { + public: + + template<typename eT2> + inline + unwrap_check_mixed(const Row<eT1>& A, const Mat<eT2>& B) + : M_local( (void_ptr(&A) == void_ptr(&B)) ? new Row<eT1>(A) : 0 ) + , M ( (void_ptr(&A) == void_ptr(&B)) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check_mixed() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Row<eT1>* M_local; + const Row<eT1>& M; + }; + + + +template<typename eT1> +class unwrap_check_mixed< Col<eT1> > + { + public: + + template<typename eT2> + inline + unwrap_check_mixed(const Col<eT1>& A, const Mat<eT2>& B) + : M_local( (void_ptr(&A) == void_ptr(&B)) ? new Col<eT1>(A) : 0 ) + , M ( (void_ptr(&A) == void_ptr(&B)) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~unwrap_check_mixed() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + // the order below is important + const Col<eT1>* M_local; + const Col<eT1>& M; + }; + + + +// + + + +template<typename T1> +class partial_unwrap + { + public: + + typedef typename T1::elem_type eT; + + inline partial_unwrap(const T1& A) // TODO: change this to Base ? + : M(A) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap< Mat<eT> > + { + public: + + inline + partial_unwrap(const Mat<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Row<eT> > + { + public: + + inline + partial_unwrap(const Row<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Col<eT> > + { + public: + + inline + partial_unwrap(const Col<eT>& A) + : M(A) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap< Op<T1, op_htrans> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap(const Op<T1,op_htrans>& A) + : M(A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Mat<eT>, op_htrans> > + { + public: + + inline + partial_unwrap(const Op< Mat<eT>, op_htrans>& A) + : M(A.m) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Row<eT>, op_htrans> > + { + public: + + inline + partial_unwrap(const Op< Row<eT>, op_htrans>& A) + : M(A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Col<eT>, op_htrans> > + { + public: + + inline + partial_unwrap(const Op< Col<eT>, op_htrans>& A) + : M(A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap< Op<T1, op_htrans2> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap(const Op<T1,op_htrans2>& A) + : val(A.aux) + , M (A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + const eT val; + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Mat<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap(const Op< Mat<eT>, op_htrans2>& A) + : val(A.aux) + , M (A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Row<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap(const Op< Row<eT>, op_htrans2>& A) + : val(A.aux) + , M (A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< Op< Col<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap(const Op< Col<eT>, op_htrans2>& A) + : val(A.aux) + , M (A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap< eOp<T1, eop_scalar_times> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap(const eOp<T1,eop_scalar_times>& A) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap< eOp<Mat<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap(const eOp<Mat<eT>,eop_scalar_times>& A) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< eOp<Row<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap(const eOp<Row<eT>,eop_scalar_times>& A) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap< eOp<Col<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap(const eOp<Col<eT>,eop_scalar_times>& A) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +// + + + +template<typename T1> +class partial_unwrap_check + { + public: + + typedef typename T1::elem_type eT; + + inline partial_unwrap_check(const T1& A, const Mat<eT>& B) + : M(A) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap_check< Mat<eT> > + { + public: + + inline + partial_unwrap_check(const Mat<eT>& A, const Mat<eT>& B) + : M_local ( (&A == &B) ? new Mat<eT>(A) : 0 ) + , M ( (&A == &B) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Row<eT> > + { + public: + + inline + partial_unwrap_check(const Row<eT>& A, const Mat<eT>& B) + : M_local ( (&A == &B) ? new Mat<eT>(A) : 0 ) + , M ( (&A == &B) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Col<eT> > + { + public: + + inline + partial_unwrap_check(const Col<eT>& A, const Mat<eT>& B) + : M_local ( (&A == &B) ? new Mat<eT>(A) : 0 ) + , M ( (&A == &B) ? (*M_local) : A ) + { + arma_extra_debug_sigprint(); + } + + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = false; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap_check< Op<T1, op_htrans> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap_check(const Op<T1,op_htrans>& A, const Mat<eT>& B) + : M(A.m) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Mat<eT>, op_htrans> > + { + public: + + inline + partial_unwrap_check(const Op< Mat<eT>, op_htrans>& A, const Mat<eT>& B) + : M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Row<eT>, op_htrans> > + { + public: + + inline + partial_unwrap_check(const Op< Row<eT>, op_htrans>& A, const Mat<eT>& B) + : M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Col<eT>, op_htrans> > + { + public: + + inline + partial_unwrap_check(const Op< Col<eT>, op_htrans>& A, const Mat<eT>& B) + : M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return eT(1); } + + + static const bool do_trans = true; + static const bool do_times = false; + + // the order below is important + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap_check< Op<T1, op_htrans2> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap_check(const Op<T1,op_htrans2>& A, const Mat<eT>& B) + : val(A.aux) + , M (A.m) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + const eT val; + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Mat<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap_check(const Op< Mat<eT>, op_htrans2>& A, const Mat<eT>& B) + : val (A.aux) + , M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + // the order below is important + const eT val; + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Row<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap_check(const Op< Row<eT>, op_htrans2>& A, const Mat<eT>& B) + : val (A.aux) + , M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + // the order below is important + const eT val; + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< Op< Col<eT>, op_htrans2> > + { + public: + + inline + partial_unwrap_check(const Op< Mat<eT>, op_htrans2>& A, const Mat<eT>& B) + : val (A.aux) + , M_local ( (&A.m == &B) ? new Mat<eT>(A.m) : 0 ) + , M ( (&A.m == &B) ? (*M_local) : A.m ) + { + arma_extra_debug_sigprint(); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + + if(M_local) + { + delete M_local; + } + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = true; + static const bool do_times = true; + + // the order below is important + const eT val; + const Mat<eT>* M_local; + const Mat<eT>& M; + }; + + + +template<typename T1> +class partial_unwrap_check< eOp<T1, eop_scalar_times> > + { + public: + + typedef typename T1::elem_type eT; + + inline + partial_unwrap_check(const eOp<T1,eop_scalar_times>& A, const Mat<eT>& B) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT> M; + }; + + + +template<typename eT> +class partial_unwrap_check< eOp<Mat<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap_check(const eOp<Mat<eT>,eop_scalar_times>& A, const Mat<eT>& B) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< eOp<Row<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap_check(const eOp<Row<eT>,eop_scalar_times>& A, const Mat<eT>& B) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +template<typename eT> +class partial_unwrap_check< eOp<Col<eT>, eop_scalar_times> > + { + public: + + inline + partial_unwrap_check(const eOp<Col<eT>,eop_scalar_times>& A, const Mat<eT>& B) + : val(A.aux) + , M (A.P.Q) + { + arma_extra_debug_sigprint(); + arma_ignore(B); + } + + inline + ~partial_unwrap_check() + { + arma_extra_debug_sigprint(); + } + + + inline eT get_val() const { return val; } + + + static const bool do_trans = false; + static const bool do_times = true; + + const eT val; + const Mat<eT>& M; + }; + + + +//! @}