Chris@49: // Copyright (C) 2008-2010 NICTA (www.nicta.com.au) Chris@49: // Copyright (C) 2008-2010 Conrad Sanderson Chris@49: // Chris@49: // This Source Code Form is subject to the terms of the Mozilla Public Chris@49: // License, v. 2.0. If a copy of the MPL was not distributed with this Chris@49: // file, You can obtain one at http://mozilla.org/MPL/2.0/. Chris@49: Chris@49: Chris@49: //! \addtogroup unwrap_cube Chris@49: //! @{ Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: class unwrap_cube Chris@49: { Chris@49: public: Chris@49: Chris@49: typedef typename T1::elem_type eT; Chris@49: Chris@49: inline Chris@49: unwrap_cube(const T1& A) Chris@49: : M(A) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: } Chris@49: Chris@49: const Cube M; Chris@49: }; Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: class unwrap_cube< Cube > Chris@49: { Chris@49: public: Chris@49: Chris@49: inline Chris@49: unwrap_cube(const Cube& A) Chris@49: : M(A) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: } Chris@49: Chris@49: const Cube& M; Chris@49: }; Chris@49: Chris@49: Chris@49: Chris@49: // Chris@49: // Chris@49: // Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: class unwrap_cube_check Chris@49: { Chris@49: typedef typename T1::elem_type eT; Chris@49: Chris@49: inline Chris@49: unwrap_cube_check(const T1& A, const Cube&) Chris@49: : M(A) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_type_check(( is_arma_cube_type::value == false )); Chris@49: } Chris@49: Chris@49: const Cube M; Chris@49: }; Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: class unwrap_cube_check< Cube > Chris@49: { Chris@49: public: Chris@49: Chris@49: inline Chris@49: unwrap_cube_check(const Cube& A, const Cube& B) Chris@49: : M_local( (&A == &B) ? new Cube(A) : 0 ) Chris@49: , M ( (&A == &B) ? (*M_local) : A ) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: } Chris@49: Chris@49: Chris@49: inline Chris@49: ~unwrap_cube_check() Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: if(M_local) Chris@49: { Chris@49: delete M_local; Chris@49: } Chris@49: } Chris@49: Chris@49: Chris@49: // the order below is important Chris@49: const Cube* M_local; Chris@49: const Cube& M; Chris@49: Chris@49: }; Chris@49: Chris@49: Chris@49: Chris@49: //! @}