Chris@49: // Copyright (C) 2009-2012 NICTA (www.nicta.com.au) Chris@49: // Copyright (C) 2009-2012 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 op_relational Chris@49: //! @{ Chris@49: Chris@49: Chris@49: #undef operator_rel Chris@49: Chris@49: #undef arma_applier_mat_pre Chris@49: #undef arma_applier_mat_post Chris@49: Chris@49: #undef arma_applier_cube_pre Chris@49: #undef arma_applier_cube_post Chris@49: Chris@49: Chris@49: #define arma_applier_mat_pre(operator_rel) \ Chris@49: {\ Chris@49: typedef typename T1::elem_type eT;\ Chris@49: typedef typename Proxy::ea_type ea_type;\ Chris@49: \ Chris@49: const eT val = X.aux;\ Chris@49: \ Chris@49: const Proxy P(X.m);\ Chris@49: \ Chris@49: const uword n_rows = P.get_n_rows();\ Chris@49: const uword n_cols = P.get_n_cols();\ Chris@49: \ Chris@49: const bool bad_alias = ( Proxy::has_subview && P.is_alias(out) );\ Chris@49: \ Chris@49: if(bad_alias == false)\ Chris@49: {\ Chris@49: out.set_size(n_rows, n_cols);\ Chris@49: \ Chris@49: uword* out_mem = out.memptr();\ Chris@49: \ Chris@49: if(Proxy::prefer_at_accessor == false)\ Chris@49: {\ Chris@49: ea_type PA = P.get_ea();\ Chris@49: const uword n_elem = out.n_elem;\ Chris@49: \ Chris@49: for(uword i=0; i tmp(P.Q);\ Chris@49: \ Chris@49: out = (val) operator_rel (tmp);\ Chris@49: }\ Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: #define arma_applier_mat_post(operator_rel) \ Chris@49: {\ Chris@49: typedef typename T1::elem_type eT;\ Chris@49: typedef typename Proxy::ea_type ea_type;\ Chris@49: \ Chris@49: const eT val = X.aux;\ Chris@49: \ Chris@49: const Proxy P(X.m);\ Chris@49: \ Chris@49: const uword n_rows = P.get_n_rows();\ Chris@49: const uword n_cols = P.get_n_cols();\ Chris@49: \ Chris@49: const bool bad_alias = ( Proxy::has_subview && P.is_alias(out) );\ Chris@49: \ Chris@49: if(bad_alias == false)\ Chris@49: {\ Chris@49: out.set_size(n_rows, n_cols);\ Chris@49: \ Chris@49: uword* out_mem = out.memptr();\ Chris@49: \ Chris@49: if(Proxy::prefer_at_accessor == false)\ Chris@49: {\ Chris@49: ea_type PA = P.get_ea();\ Chris@49: const uword n_elem = out.n_elem;\ Chris@49: \ Chris@49: for(uword i=0; i tmp(P.Q);\ Chris@49: \ Chris@49: out = (tmp) operator_rel (val);\ Chris@49: }\ Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: #define arma_applier_cube_pre(operator_rel) \ Chris@49: {\ Chris@49: typedef typename T1::elem_type eT;\ Chris@49: typedef typename ProxyCube::ea_type ea_type;\ Chris@49: \ Chris@49: const eT val = X.aux;\ Chris@49: \ Chris@49: const ProxyCube P(X.m);\ Chris@49: \ Chris@49: const uword n_rows = P.get_n_rows();\ Chris@49: const uword n_cols = P.get_n_cols();\ Chris@49: const uword n_slices = P.get_n_slices();\ Chris@49: \ Chris@49: const bool bad_alias = ( ProxyCube::has_subview && P.is_alias(out) );\ Chris@49: \ Chris@49: if(bad_alias == false)\ Chris@49: {\ Chris@49: out.set_size(n_rows, n_cols, n_slices);\ Chris@49: \ Chris@49: uword* out_mem = out.memptr();\ Chris@49: \ Chris@49: if(ProxyCube::prefer_at_accessor == false)\ Chris@49: {\ Chris@49: ea_type PA = P.get_ea();\ Chris@49: const uword n_elem = out.n_elem;\ Chris@49: \ Chris@49: for(uword i=0; i::stored_type> tmp(P.Q);\ Chris@49: \ Chris@49: out = (val) operator_rel (tmp.M);\ Chris@49: }\ Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: #define arma_applier_cube_post(operator_rel) \ Chris@49: {\ Chris@49: typedef typename T1::elem_type eT;\ Chris@49: typedef typename ProxyCube::ea_type ea_type;\ Chris@49: \ Chris@49: const eT val = X.aux;\ Chris@49: \ Chris@49: const ProxyCube P(X.m);\ Chris@49: \ Chris@49: const uword n_rows = P.get_n_rows();\ Chris@49: const uword n_cols = P.get_n_cols();\ Chris@49: const uword n_slices = P.get_n_slices();\ Chris@49: \ Chris@49: const bool bad_alias = ( ProxyCube::has_subview && P.is_alias(out) );\ Chris@49: \ Chris@49: if(bad_alias == false)\ Chris@49: {\ Chris@49: out.set_size(n_rows, n_cols, n_slices);\ Chris@49: \ Chris@49: uword* out_mem = out.memptr();\ Chris@49: \ Chris@49: if(ProxyCube::prefer_at_accessor == false)\ Chris@49: {\ Chris@49: ea_type PA = P.get_ea();\ Chris@49: const uword n_elem = out.n_elem;\ Chris@49: \ Chris@49: for(uword i=0; i::stored_type> tmp(P.Q);\ Chris@49: \ Chris@49: out = (tmp.M) operator_rel (val);\ Chris@49: }\ Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lt_pre::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_pre( < ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gt_pre::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_pre( > ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lteq_pre::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_pre( <= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gteq_pre::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_pre( >= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lt_post::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( < ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gt_post::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( > ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lteq_post::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( <= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gteq_post::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( >= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_eq::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( == ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_noteq::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_mat_post( != ); 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: inline Chris@49: void Chris@49: op_rel_lt_pre::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_pre( < ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gt_pre::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_pre( > ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lteq_pre::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_pre( <= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gteq_pre::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_pre( >= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lt_post::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( < ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gt_post::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( > ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_lteq_post::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( <= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_gteq_post::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( >= ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_eq::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( == ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_rel_noteq::apply(Cube& out, const mtOpCube& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: arma_applier_cube_post( != ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: #undef arma_applier_mat_pre Chris@49: #undef arma_applier_mat_post Chris@49: Chris@49: #undef arma_applier_cube_pre Chris@49: #undef arma_applier_cube_post Chris@49: Chris@49: Chris@49: Chris@49: //! @}