// Copyright (C) 2014-2015 National ICT Australia (NICTA) // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. // ------------------------------------------------------------------- // // Written by Conrad Sanderson - http://conradsanderson.id.au //! \addtogroup op_clamp //! @{ template inline void op_clamp::apply(Mat& out, const mtOp& in) { arma_extra_debug_sigprint(); typedef typename T1::elem_type eT; const Proxy P(in.m); if(P.is_alias(out) && (is_Mat::value == false)) { Mat tmp; op_clamp::apply_noalias(tmp, P, in.aux, in.aux_out_eT); out.steal_mem(tmp); } else { op_clamp::apply_noalias(out, P, in.aux, in.aux_out_eT); } } template inline void op_clamp::apply_noalias(Mat& out, const Proxy& P, const typename T1::elem_type min_val, const typename T1::elem_type max_val) { arma_extra_debug_sigprint(); typedef typename T1::elem_type eT; const uword n_rows = P.get_n_rows(); const uword n_cols = P.get_n_cols(); out.set_size(n_rows, n_cols); eT* out_mem = out.memptr(); if(Proxy::prefer_at_accessor == false) { const uword N = P.get_n_elem(); typename Proxy::ea_type A = P.get_ea(); uword j; for(j=1; j max_val) ? max_val : val_i); val_j = (val_j < min_val) ? min_val : ((val_j > max_val) ? max_val : val_j); (*out_mem) = val_i; out_mem++; (*out_mem) = val_j; out_mem++; } const uword i = j-1; if(i < N) { eT val_i = A[i]; val_i = (val_i < min_val) ? min_val : ((val_i > max_val) ? max_val : val_i); (*out_mem) = val_i; } } else { for(uword col=0; col max_val) ? max_val : val); (*out_mem) = val; out_mem++; } } } //! @}