BaseCube_bones.hpp   BaseCube_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup BaseCube //! \addtogroup BaseCube
//! @{ //! @{
//! Analog of the Base class, intended for cubes //! Analog of the Base class, intended for cubes
template<typename elem_type, typename derived> template<typename elem_type, typename derived>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 BaseCube_meat.hpp   BaseCube_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup BaseCube //! \addtogroup BaseCube
//! @{ //! @{
template<typename elem_type, typename derived> template<typename elem_type, typename derived>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Base_bones.hpp   Base_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Base //! \addtogroup Base
//! @{ //! @{
template<typename derived> template<typename derived>
struct Base_blas_elem_type struct Base_blas_elem_type
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Base_meat.hpp   Base_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Base //! \addtogroup Base
//! @{ //! @{
template<typename elem_type, typename derived> template<typename elem_type, typename derived>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Col_bones.hpp   Col_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Col //! \addtogroup Col
//! @{ //! @{
//! Class for column vectors (matrices with only one column) //! Class for column vectors (matrices with only one column)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Col_meat.hpp   Col_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Col //! \addtogroup Col
//! @{ //! @{
//! construct an empty column vector //! construct an empty column vector
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Cube_bones.hpp   Cube_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Cube //! \addtogroup Cube
//! @{ //! @{
struct Cube_prealloc struct Cube_prealloc
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Cube_meat.hpp   Cube_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Cube //! \addtogroup Cube
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
skipping to change at line 239 skipping to change at line 239
Cube<eT>::init Cube<eT>::init
( (
const BaseCube<typename Cube<eT>::pod_type,T1>& X, const BaseCube<typename Cube<eT>::pod_type,T1>& X,
const BaseCube<typename Cube<eT>::pod_type,T2>& Y const BaseCube<typename Cube<eT>::pod_type,T2>& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type T; typedef typename T1::elem_type T;
arma_type_check(( is_complex<eT>::value == false )); //!< compile-time arma_type_check(( is_complex<eT>::value == false )); //!< compile-time
abort if eT isn't std::complex abort if eT is not std::complex
arma_type_check(( is_complex< T>::value == true )); //!< compile-time arma_type_check(( is_complex< T>::value == true )); //!< compile-time
abort if T is std::complex abort if T is std::complex
arma_type_check(( is_same_type< std::complex<T>, eT >::value == false )); //!< compile-time abort if types are not compatible arma_type_check(( is_same_type< std::complex<T>, eT >::no )); //!< comp ile-time abort if types are not compatible
const ProxyCube<T1> PX(X.get_ref()); const ProxyCube<T1> PX(X.get_ref());
const ProxyCube<T2> PY(Y.get_ref()); const ProxyCube<T2> PY(Y.get_ref());
arma_debug_assert_same_size(PX, PY, "Cube()"); arma_debug_assert_same_size(PX, PY, "Cube()");
const uword local_n_rows = PX.get_n_rows(); const uword local_n_rows = PX.get_n_rows();
const uword local_n_cols = PX.get_n_cols(); const uword local_n_cols = PX.get_n_cols();
const uword local_n_slices = PX.get_n_slices(); const uword local_n_slices = PX.get_n_slices();
skipping to change at line 1136 skipping to change at line 1136
, n_cols(0) , n_cols(0)
, n_elem_slice(0) , n_elem_slice(0)
, n_slices(0) , n_slices(0)
, n_elem(0) , n_elem(0)
, mem_state(0) , mem_state(0)
, mat_ptrs() , mat_ptrs()
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
op_type::apply(*this, X); op_type::apply(*this, X);
} }
//! create a cube from OpCube, i.e. run the previously delayed unary operat ions //! create a cube from OpCube, i.e. run the previously delayed unary operat ions
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator=(const OpCube<T1, op_type>& X) Cube<eT>::operator=(const OpCube<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
op_type::apply(*this, X); op_type::apply(*this, X);
return *this; return *this;
} }
//! in-place cube addition, with the right-hand-side operand having delayed operations //! in-place cube addition, with the right-hand-side operand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator+=(const OpCube<T1, op_type>& X) Cube<eT>::operator+=(const OpCube<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
//! in-place cube subtraction, with the right-hand-side operand having dela yed operations //! in-place cube subtraction, with the right-hand-side operand having dela yed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator-=(const OpCube<T1, op_type>& X) Cube<eT>::operator-=(const OpCube<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
//! in-place cube element-wise multiplication, with the right-hand-side ope rand having delayed operations //! in-place cube element-wise multiplication, with the right-hand-side ope rand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator%=(const OpCube<T1, op_type>& X) Cube<eT>::operator%=(const OpCube<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
//! in-place cube element-wise division, with the right-hand-side operand h aving delayed operations //! in-place cube element-wise division, with the right-hand-side operand h aving delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator/=(const OpCube<T1, op_type>& X) Cube<eT>::operator/=(const OpCube<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
//! create a cube from eOpCube, i.e. run the previously delayed unary opera tions //! create a cube from eOpCube, i.e. run the previously delayed unary opera tions
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
skipping to change at line 1237 skipping to change at line 1237
, n_cols(X.get_n_cols()) , n_cols(X.get_n_cols())
, n_elem_slice(X.get_n_elem_slice()) , n_elem_slice(X.get_n_elem_slice())
, n_slices(X.get_n_slices()) , n_slices(X.get_n_slices())
, n_elem(X.get_n_elem()) , n_elem(X.get_n_elem())
, mem_state(0) , mem_state(0)
, mat_ptrs() , mat_ptrs()
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
init_cold(); init_cold();
eop_type::apply(*this, X); eop_type::apply(*this, X);
} }
//! create a cube from eOpCube, i.e. run the previously delayed unary opera tions //! create a cube from eOpCube, i.e. run the previously delayed unary opera tions
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator=(const eOpCube<T1, eop_type>& X) Cube<eT>::operator=(const eOpCube<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const bool bad_alias = ( X.P.has_subview && X.P.is_alias(*this) ); const bool bad_alias = ( X.P.has_subview && X.P.is_alias(*this) );
if(bad_alias == false) if(bad_alias == false)
{ {
init_warm(X.get_n_rows(), X.get_n_cols(), X.get_n_slices()); init_warm(X.get_n_rows(), X.get_n_cols(), X.get_n_slices());
eop_type::apply(*this, X); eop_type::apply(*this, X);
} }
else else
skipping to change at line 1282 skipping to change at line 1282
//! in-place cube addition, with the right-hand-side operand having delayed operations //! in-place cube addition, with the right-hand-side operand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator+=(const eOpCube<T1, eop_type>& X) Cube<eT>::operator+=(const eOpCube<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_plus(*this, X); eop_type::apply_inplace_plus(*this, X);
return *this; return *this;
} }
//! in-place cube subtraction, with the right-hand-side operand having dela yed operations //! in-place cube subtraction, with the right-hand-side operand having dela yed operations
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator-=(const eOpCube<T1, eop_type>& X) Cube<eT>::operator-=(const eOpCube<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_minus(*this, X); eop_type::apply_inplace_minus(*this, X);
return *this; return *this;
} }
//! in-place cube element-wise multiplication, with the right-hand-side ope rand having delayed operations //! in-place cube element-wise multiplication, with the right-hand-side ope rand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator%=(const eOpCube<T1, eop_type>& X) Cube<eT>::operator%=(const eOpCube<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_schur(*this, X); eop_type::apply_inplace_schur(*this, X);
return *this; return *this;
} }
//! in-place cube element-wise division, with the right-hand-side operand h aving delayed operations //! in-place cube element-wise division, with the right-hand-side operand h aving delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator/=(const eOpCube<T1, eop_type>& X) Cube<eT>::operator/=(const eOpCube<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_div(*this, X); eop_type::apply_inplace_div(*this, X);
return *this; return *this;
} }
//! EXPERIMENTAL //! EXPERIMENTAL
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
skipping to change at line 1453 skipping to change at line 1453
//! create a cube from Glue, i.e. run the previously delayed binary operati ons //! create a cube from Glue, i.e. run the previously delayed binary operati ons
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator=(const GlueCube<T1, T2, glue_type>& X) Cube<eT>::operator=(const GlueCube<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
glue_type::apply(*this, X); glue_type::apply(*this, X);
return *this; return *this;
} }
//! in-place cube addition, with the right-hand-side operands having delaye d operations //! in-place cube addition, with the right-hand-side operands having delaye d operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator+=(const GlueCube<T1, T2, glue_type>& X) Cube<eT>::operator+=(const GlueCube<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
//! in-place cube subtraction, with the right-hand-side operands having del ayed operations //! in-place cube subtraction, with the right-hand-side operands having del ayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator-=(const GlueCube<T1, T2, glue_type>& X) Cube<eT>::operator-=(const GlueCube<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
//! in-place cube element-wise multiplication, with the right-hand-side ope rands having delayed operations //! in-place cube element-wise multiplication, with the right-hand-side ope rands having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator%=(const GlueCube<T1, T2, glue_type>& X) Cube<eT>::operator%=(const GlueCube<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
//! in-place cube element-wise division, with the right-hand-side operands having delayed operations //! in-place cube element-wise division, with the right-hand-side operands having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator/=(const GlueCube<T1, T2, glue_type>& X) Cube<eT>::operator/=(const GlueCube<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Cube<eT> m(X); const Cube<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
//! create a cube from eGlue, i.e. run the previously delayed binary operat ions //! create a cube from eGlue, i.e. run the previously delayed binary operat ions
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
skipping to change at line 1545 skipping to change at line 1545
, n_cols(X.get_n_cols()) , n_cols(X.get_n_cols())
, n_elem_slice(X.get_n_elem_slice()) , n_elem_slice(X.get_n_elem_slice())
, n_slices(X.get_n_slices()) , n_slices(X.get_n_slices())
, n_elem(X.get_n_elem()) , n_elem(X.get_n_elem())
, mem_state(0) , mem_state(0)
, mat_ptrs() , mat_ptrs()
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
init_cold(); init_cold();
eglue_type::apply(*this, X); eglue_type::apply(*this, X);
} }
//! create a cube from Glue, i.e. run the previously delayed binary operati ons //! create a cube from Glue, i.e. run the previously delayed binary operati ons
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator=(const eGlueCube<T1, T2, eglue_type>& X) Cube<eT>::operator=(const eGlueCube<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const bool bad_alias = ( (X.P1.has_subview && X.P1.is_alias(*this)) || (X.P2.has_subview && X.P2.is_alias(*this)) ); const bool bad_alias = ( (X.P1.has_subview && X.P1.is_alias(*this)) || (X.P2.has_subview && X.P2.is_alias(*this)) );
if(bad_alias == false) if(bad_alias == false)
{ {
init_warm(X.get_n_rows(), X.get_n_cols(), X.get_n_slices()); init_warm(X.get_n_rows(), X.get_n_cols(), X.get_n_slices());
eglue_type::apply(*this, X); eglue_type::apply(*this, X);
} }
else else
skipping to change at line 1592 skipping to change at line 1592
//! in-place cube addition, with the right-hand-side operands having delaye d operations //! in-place cube addition, with the right-hand-side operands having delaye d operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator+=(const eGlueCube<T1, T2, eglue_type>& X) Cube<eT>::operator+=(const eGlueCube<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_plus(*this, X); eglue_type::apply_inplace_plus(*this, X);
return *this; return *this;
} }
//! in-place cube subtraction, with the right-hand-side operands having del ayed operations //! in-place cube subtraction, with the right-hand-side operands having del ayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator-=(const eGlueCube<T1, T2, eglue_type>& X) Cube<eT>::operator-=(const eGlueCube<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_minus(*this, X); eglue_type::apply_inplace_minus(*this, X);
return *this; return *this;
} }
//! in-place cube element-wise multiplication, with the right-hand-side ope rands having delayed operations //! in-place cube element-wise multiplication, with the right-hand-side ope rands having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator%=(const eGlueCube<T1, T2, eglue_type>& X) Cube<eT>::operator%=(const eGlueCube<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_schur(*this, X); eglue_type::apply_inplace_schur(*this, X);
return *this; return *this;
} }
//! in-place cube element-wise division, with the right-hand-side operands having delayed operations //! in-place cube element-wise division, with the right-hand-side operands having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Cube<eT>& const Cube<eT>&
Cube<eT>::operator/=(const eGlueCube<T1, T2, eglue_type>& X) Cube<eT>::operator/=(const eGlueCube<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_div(*this, X); eglue_type::apply_inplace_div(*this, X);
return *this; return *this;
} }
//! EXPERIMENTAL //! EXPERIMENTAL
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
 End of changes. 27 change blocks. 
62 lines changed or deleted 40 lines changed or added


 GenCube_bones.hpp   GenCube_bones.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup GenCube //! \addtogroup GenCube
//! @{ //! @{
//! support class for generator functions (eg. zeros, randu, randn, ...) //! support class for generator functions (eg. zeros, randu, randn, ...)
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 GenCube_meat.hpp   GenCube_meat.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Gen //! \addtogroup Gen
//! @{ //! @{
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
arma_inline arma_inline
skipping to change at line 33 skipping to change at line 33
GenCube<eT, gen_type>::~GenCube() GenCube<eT, gen_type>::~GenCube()
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
} }
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
arma_inline arma_inline
eT eT
GenCube<eT, gen_type>::generate() GenCube<eT, gen_type>::generate()
{ {
if(is_same_type<gen_type, gen_ones_full>::value == true) { return eT if(is_same_type<gen_type, gen_ones_full>::yes) { return eT(1);
(1); } }
else if(is_same_type<gen_type, gen_zeros >::value == true) { return eT else if(is_same_type<gen_type, gen_zeros >::yes) { return eT(0);
(0); } }
else if(is_same_type<gen_type, gen_randu >::value == true) { return eT else if(is_same_type<gen_type, gen_randu >::yes) { return eT(eop_aux_r
(eop_aux_randu<eT>()); } andu<eT>()); }
else if(is_same_type<gen_type, gen_randn >::value == true) { return eT else if(is_same_type<gen_type, gen_randn >::yes) { return eT(eop_aux_r
(eop_aux_randn<eT>()); } andn<eT>()); }
else { return eT else { return eT();
(); } }
} }
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
arma_inline arma_inline
eT eT
GenCube<eT, gen_type>::operator[](const uword) const GenCube<eT, gen_type>::operator[](const uword) const
{ {
return GenCube<eT, gen_type>::generate(); return GenCube<eT, gen_type>::generate();
} }
skipping to change at line 74 skipping to change at line 74
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
inline inline
void void
GenCube<eT, gen_type>::apply(Cube<eT>& out) const GenCube<eT, gen_type>::apply(Cube<eT>& out) const
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
// NOTE: we're assuming that the cube has already been set to the correct size; // NOTE: we're assuming that the cube has already been set to the correct size;
// this is done by either the Cube contructor or operator=() // this is done by either the Cube contructor or operator=()
if(is_same_type<gen_type, gen_ones_full>::value == true) { out.ones( if(is_same_type<gen_type, gen_ones_full>::yes) { out.ones(); }
); } else if(is_same_type<gen_type, gen_zeros >::yes) { out.zeros(); }
else if(is_same_type<gen_type, gen_zeros >::value == true) { out.zeros else if(is_same_type<gen_type, gen_randu >::yes) { out.randu(); }
(); } else if(is_same_type<gen_type, gen_randn >::yes) { out.randn(); }
else if(is_same_type<gen_type, gen_randu >::value == true) { out.randu
(); }
else if(is_same_type<gen_type, gen_randn >::value == true) { out.randn
(); }
} }
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
inline inline
void void
GenCube<eT, gen_type>::apply_inplace_plus(Cube<eT>& out) const GenCube<eT, gen_type>::apply_inplace_plus(Cube<eT>& out) const
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_debug_assert_same_size(out.n_rows, out.n_cols, out.n_slices, n_rows, n_cols, n_slices, "addition"); arma_debug_assert_same_size(out.n_rows, out.n_cols, out.n_slices, n_rows, n_cols, n_slices, "addition");
 End of changes. 4 change blocks. 
19 lines changed or deleted 15 lines changed or added


 Gen_bones.hpp   Gen_bones.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Gen //! \addtogroup Gen
//! @{ //! @{
//! support class for generator functions (eg. zeros, randu, randn, ...) //! support class for generator functions (eg. zeros, randu, randn, ...)
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Gen_meat.hpp   Gen_meat.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Gen //! \addtogroup Gen
//! @{ //! @{
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
arma_inline arma_inline
skipping to change at line 34 skipping to change at line 34
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
} }
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
Gen<T1, gen_type>::generate() Gen<T1, gen_type>::generate()
{ {
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_full>::value == true) { return eT if(is_same_type<gen_type, gen_ones_full>::yes) { return eT(1);
(1); } }
else if(is_same_type<gen_type, gen_zeros >::value == true) { return eT else if(is_same_type<gen_type, gen_zeros >::yes) { return eT(0);
(0); } }
else if(is_same_type<gen_type, gen_randu >::value == true) { return eT else if(is_same_type<gen_type, gen_randu >::yes) { return eT(eop_aux_r
(eop_aux_randu<eT>()); } andu<eT>()); }
else if(is_same_type<gen_type, gen_randn >::value == true) { return eT else if(is_same_type<gen_type, gen_randn >::yes) { return eT(eop_aux_r
(eop_aux_randn<eT>()); } andn<eT>()); }
else { return eT else { return eT();
(); } }
} }
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
Gen<T1, gen_type>::operator[](const uword ii) const Gen<T1, gen_type>::operator[](const uword ii) const
{ {
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
return ((ii % n_rows) == (ii / n_rows)) ? eT(1) : eT(0); return ((ii % n_rows) == (ii / n_rows)) ? eT(1) : eT(0);
} }
else else
{ {
return Gen<T1, gen_type>::generate(); return Gen<T1, gen_type>::generate();
} }
} }
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
Gen<T1, gen_type>::at(const uword row, const uword col) const Gen<T1, gen_type>::at(const uword row, const uword col) const
{ {
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
return (row == col) ? eT(1) : eT(0); return (row == col) ? eT(1) : eT(0);
} }
else else
{ {
return Gen<T1, gen_type>::generate(); return Gen<T1, gen_type>::generate();
} }
} }
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
skipping to change at line 93 skipping to change at line 93
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
void void
Gen<T1, gen_type>::apply(Mat<typename T1::elem_type>& out) const Gen<T1, gen_type>::apply(Mat<typename T1::elem_type>& out) const
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
// NOTE: we're assuming that the matrix has already been set to the corre ct size; // NOTE: we're assuming that the matrix has already been set to the corre ct size;
// this is done by either the Mat contructor or operator=() // this is done by either the Mat contructor or operator=()
if(is_same_type<gen_type, gen_ones_diag>::value == true) { out.eye() if(is_same_type<gen_type, gen_ones_diag>::yes) { out.eye(); }
; } else if(is_same_type<gen_type, gen_ones_full>::yes) { out.ones(); }
else if(is_same_type<gen_type, gen_ones_full>::value == true) { out.ones( else if(is_same_type<gen_type, gen_zeros >::yes) { out.zeros(); }
); } else if(is_same_type<gen_type, gen_randu >::yes) { out.randu(); }
else if(is_same_type<gen_type, gen_zeros >::value == true) { out.zeros else if(is_same_type<gen_type, gen_randn >::yes) { out.randn(); }
(); }
else if(is_same_type<gen_type, gen_randu >::value == true) { out.randu
(); }
else if(is_same_type<gen_type, gen_randn >::value == true) { out.randn
(); }
} }
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
void void
Gen<T1, gen_type>::apply_inplace_plus(Mat<typename T1::elem_type>& out) con st Gen<T1, gen_type>::apply_inplace_plus(Mat<typename T1::elem_type>& out) con st
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "addi tion"); arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "addi tion");
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
const uword N = (std::min)(n_rows, n_cols); const uword N = (std::min)(n_rows, n_cols);
for(uword iq=0; iq < N; ++iq) for(uword iq=0; iq < N; ++iq)
{ {
out.at(iq,iq) += eT(1); out.at(iq,iq) += eT(1);
} }
} }
else else
{ {
skipping to change at line 154 skipping to change at line 154
inline inline
void void
Gen<T1, gen_type>::apply_inplace_minus(Mat<typename T1::elem_type>& out) co nst Gen<T1, gen_type>::apply_inplace_minus(Mat<typename T1::elem_type>& out) co nst
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "subt raction"); arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "subt raction");
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
const uword N = (std::min)(n_rows, n_cols); const uword N = (std::min)(n_rows, n_cols);
for(uword iq=0; iq < N; ++iq) for(uword iq=0; iq < N; ++iq)
{ {
out.at(iq,iq) -= eT(1); out.at(iq,iq) -= eT(1);
} }
} }
else else
{ {
skipping to change at line 197 skipping to change at line 197
inline inline
void void
Gen<T1, gen_type>::apply_inplace_schur(Mat<typename T1::elem_type>& out) co nst Gen<T1, gen_type>::apply_inplace_schur(Mat<typename T1::elem_type>& out) co nst
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "elem ent-wise multiplication"); arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "elem ent-wise multiplication");
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
const uword N = (std::min)(n_rows, n_cols); const uword N = (std::min)(n_rows, n_cols);
for(uword iq=0; iq < N; ++iq) for(uword iq=0; iq < N; ++iq)
{ {
for(uword row=0; row < iq; ++row) { out.at(row,iq) = eT(0); } for(uword row=0; row < iq; ++row) { out.at(row,iq) = eT(0); }
for(uword row=iq+1; row < n_rows; ++row) { out.at(row,iq) = eT(0); } for(uword row=iq+1; row < n_rows; ++row) { out.at(row,iq) = eT(0); }
} }
} }
else else
skipping to change at line 241 skipping to change at line 241
inline inline
void void
Gen<T1, gen_type>::apply_inplace_div(Mat<typename T1::elem_type>& out) cons t Gen<T1, gen_type>::apply_inplace_div(Mat<typename T1::elem_type>& out) cons t
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "elem ent-wise division"); arma_debug_assert_same_size(out.n_rows, out.n_cols, n_rows, n_cols, "elem ent-wise division");
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<gen_type, gen_ones_diag>::value == true) if(is_same_type<gen_type, gen_ones_diag>::yes)
{ {
const uword N = (std::min)(n_rows, n_cols); const uword N = (std::min)(n_rows, n_cols);
for(uword iq=0; iq < N; ++iq) for(uword iq=0; iq < N; ++iq)
{ {
const eT zero = eT(0); const eT zero = eT(0);
for(uword row=0; row < iq; ++row) { out.at(row,iq) /= zero; } for(uword row=0; row < iq; ++row) { out.at(row,iq) /= zero; }
for(uword row=iq+1; row < n_rows; ++row) { out.at(row,iq) /= zero; } for(uword row=iq+1; row < n_rows; ++row) { out.at(row,iq) /= zero; }
} }
 End of changes. 10 change blocks. 
27 lines changed or deleted 22 lines changed or added


 GlueCube_bones.hpp   GlueCube_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup GlueCube //! \addtogroup GlueCube
//! @{ //! @{
//! analog of the Glue class, intended for Cube objects //! analog of the Glue class, intended for Cube objects
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 GlueCube_meat.hpp   GlueCube_meat.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup GlueCube //! \addtogroup GlueCube
//! @{ //! @{
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Glue_bones.hpp   Glue_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Glue //! \addtogroup Glue
//! @{ //! @{
//! Class for storing data required for delayed binary operations, //! Class for storing data required for delayed binary operations,
//! such as the operands (e.g. two matrices) and the binary operator (e.g. addition). //! such as the operands (e.g. two matrices) and the binary operator (e.g. addition).
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Glue_meat.hpp   Glue_meat.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Glue //! \addtogroup Glue
//! @{ //! @{
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Mat_bones.hpp   Mat_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Mat //! \addtogroup Mat
//! @{ //! @{
//! Dense matrix class //! Dense matrix class
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Mat_meat.hpp   Mat_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Mat //! \addtogroup Mat
//! @{ //! @{
template<typename eT> template<typename eT>
skipping to change at line 612 skipping to change at line 612
Mat<eT>::init Mat<eT>::init
( (
const Base<typename Mat<eT>::pod_type, T1>& X, const Base<typename Mat<eT>::pod_type, T1>& X,
const Base<typename Mat<eT>::pod_type, T2>& Y const Base<typename Mat<eT>::pod_type, T2>& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type T; typedef typename T1::elem_type T;
arma_type_check(( is_complex<eT>::value == false )); //!< compile-time arma_type_check(( is_complex<eT>::value == false )); //!< compile-time
abort if eT isn't std::complex abort if eT is not std::complex
arma_type_check(( is_complex< T>::value == true )); //!< compile-time arma_type_check(( is_complex< T>::value == true )); //!< compile-time
abort if T is std::complex abort if T is std::complex
arma_type_check(( is_same_type< std::complex<T>, eT >::value == false )); //!< compile-time abort if types are not compatible arma_type_check(( is_same_type< std::complex<T>, eT >::no )); //!< comp ile-time abort if types are not compatible
const Proxy<T1> PX(X.get_ref()); const Proxy<T1> PX(X.get_ref());
const Proxy<T2> PY(Y.get_ref()); const Proxy<T2> PY(Y.get_ref());
arma_debug_assert_same_size(PX, PY, "Mat()"); arma_debug_assert_same_size(PX, PY, "Mat()");
const uword local_n_rows = PX.get_n_rows(); const uword local_n_rows = PX.get_n_rows();
const uword local_n_cols = PX.get_n_cols(); const uword local_n_cols = PX.get_n_cols();
init_warm(local_n_rows, local_n_cols); init_warm(local_n_rows, local_n_cols);
skipping to change at line 3175 skipping to change at line 3175
Mat<eT>::Mat(const Gen<T1, gen_type>& X) Mat<eT>::Mat(const Gen<T1, gen_type>& X)
: n_rows(X.n_rows) : n_rows(X.n_rows)
, n_cols(X.n_cols) , n_cols(X.n_cols)
, n_elem(n_rows*n_cols) , n_elem(n_rows*n_cols)
, vec_state(0) , vec_state(0)
, mem_state(0) , mem_state(0)
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
init_cold(); init_cold();
X.apply(*this); X.apply(*this);
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator=(const Gen<T1, gen_type>& X) Mat<eT>::operator=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
init_warm(X.n_rows, X.n_cols); init_warm(X.n_rows, X.n_cols);
X.apply(*this); X.apply(*this);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator+=(const Gen<T1, gen_type>& X) Mat<eT>::operator+=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
X.apply_inplace_plus(*this); X.apply_inplace_plus(*this);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator-=(const Gen<T1, gen_type>& X) Mat<eT>::operator-=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
X.apply_inplace_minus(*this); X.apply_inplace_minus(*this);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator*=(const Gen<T1, gen_type>& X) Mat<eT>::operator*=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Mat<eT> tmp(X); const Mat<eT> tmp(X);
return (*this).operator*=(tmp); return (*this).operator*=(tmp);
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator%=(const Gen<T1, gen_type>& X) Mat<eT>::operator%=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
X.apply_inplace_schur(*this); X.apply_inplace_schur(*this);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename gen_type> template<typename T1, typename gen_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator/=(const Gen<T1, gen_type>& X) Mat<eT>::operator/=(const Gen<T1, gen_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
X.apply_inplace_div(*this); X.apply_inplace_div(*this);
return *this; return *this;
} }
//! create a matrix from Op, i.e. run the previously delayed unary operatio ns //! create a matrix from Op, i.e. run the previously delayed unary operatio ns
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
Mat<eT>::Mat(const Op<T1, op_type>& X) Mat<eT>::Mat(const Op<T1, op_type>& X)
: n_rows(0) : n_rows(0)
, n_cols(0) , n_cols(0)
, n_elem(0) , n_elem(0)
, vec_state(0) , vec_state(0)
, mem_state(0) , mem_state(0)
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
op_type::apply(*this, X); op_type::apply(*this, X);
} }
//! create a matrix from Op, i.e. run the previously delayed unary operatio ns //! create a matrix from Op, i.e. run the previously delayed unary operatio ns
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator=(const Op<T1, op_type>& X) Mat<eT>::operator=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
op_type::apply(*this, X); op_type::apply(*this, X);
return *this; return *this;
} }
//! in-place matrix addition, with the right-hand-side operand having delay ed operations //! in-place matrix addition, with the right-hand-side operand having delay ed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator+=(const Op<T1, op_type>& X) Mat<eT>::operator+=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
//! in-place matrix subtraction, with the right-hand-side operand having de layed operations //! in-place matrix subtraction, with the right-hand-side operand having de layed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator-=(const Op<T1, op_type>& X) Mat<eT>::operator-=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
//! in-place matrix multiplication, with the right-hand-side operand having delayed operations //! in-place matrix multiplication, with the right-hand-side operand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator*=(const Op<T1, op_type>& X) Mat<eT>::operator*=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
glue_times::apply_inplace(*this, X); glue_times::apply_inplace(*this, X);
return *this; return *this;
} }
//! in-place matrix element-wise multiplication, with the right-hand-side o perand having delayed operations //! in-place matrix element-wise multiplication, with the right-hand-side o perand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator%=(const Op<T1, op_type>& X) Mat<eT>::operator%=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
//! in-place matrix element-wise division, with the right-hand-side operand having delayed operations //! in-place matrix element-wise division, with the right-hand-side operand having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator/=(const Op<T1, op_type>& X) Mat<eT>::operator/=(const Op<T1, op_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
//! create a matrix from eOp, i.e. run the previously delayed unary operati ons //! create a matrix from eOp, i.e. run the previously delayed unary operati ons
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
Mat<eT>::Mat(const eOp<T1, eop_type>& X) Mat<eT>::Mat(const eOp<T1, eop_type>& X)
: n_rows(X.get_n_rows()) : n_rows(X.get_n_rows())
, n_cols(X.get_n_cols()) , n_cols(X.get_n_cols())
, n_elem(X.get_n_elem()) , n_elem(X.get_n_elem())
, vec_state(0) , vec_state(0)
, mem_state(0) , mem_state(0)
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
init_cold(); init_cold();
eop_type::apply(*this, X); eop_type::apply(*this, X);
} }
//! create a matrix from eOp, i.e. run the previously delayed unary operati ons //! create a matrix from eOp, i.e. run the previously delayed unary operati ons
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator=(const eOp<T1, eop_type>& X) Mat<eT>::operator=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const bool bad_alias = (eOp<T1, eop_type>::proxy_type::has_subview && X .P.is_alias(*this)); const bool bad_alias = (eOp<T1, eop_type>::proxy_type::has_subview && X .P.is_alias(*this));
if(bad_alias == false) if(bad_alias == false)
{ {
init_warm(X.get_n_rows(), X.get_n_cols()); init_warm(X.get_n_rows(), X.get_n_cols());
eop_type::apply(*this, X); eop_type::apply(*this, X);
} }
else else
skipping to change at line 3449 skipping to change at line 3449
} }
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator+=(const eOp<T1, eop_type>& X) Mat<eT>::operator+=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_plus(*this, X); eop_type::apply_inplace_plus(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator-=(const eOp<T1, eop_type>& X) Mat<eT>::operator-=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_minus(*this, X); eop_type::apply_inplace_minus(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator*=(const eOp<T1, eop_type>& X) Mat<eT>::operator*=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
glue_times::apply_inplace(*this, X); glue_times::apply_inplace(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator%=(const eOp<T1, eop_type>& X) Mat<eT>::operator%=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_schur(*this, X); eop_type::apply_inplace_schur(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator/=(const eOp<T1, eop_type>& X) Mat<eT>::operator/=(const eOp<T1, eop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
eop_type::apply_inplace_div(*this, X); eop_type::apply_inplace_div(*this, X);
return *this; return *this;
} }
//! EXPERIMENTAL //! EXPERIMENTAL
template<typename eT> template<typename eT>
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
skipping to change at line 3631 skipping to change at line 3631
Mat<eT>::Mat(const Glue<T1, T2, glue_type>& X) Mat<eT>::Mat(const Glue<T1, T2, glue_type>& X)
: n_rows(0) : n_rows(0)
, n_cols(0) , n_cols(0)
, n_elem(0) , n_elem(0)
, vec_state(0) , vec_state(0)
, mem_state(0) , mem_state(0)
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
glue_type::apply(*this, X); glue_type::apply(*this, X);
} }
//! create a matrix from Glue, i.e. run the previously delayed binary opera tions //! create a matrix from Glue, i.e. run the previously delayed binary opera tions
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
glue_type::apply(*this, X); glue_type::apply(*this, X);
return *this; return *this;
} }
//! in-place matrix addition, with the right-hand-side operands having dela yed operations //! in-place matrix addition, with the right-hand-side operands having dela yed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator+=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator+=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
//! in-place matrix subtraction, with the right-hand-side operands having d elayed operations //! in-place matrix subtraction, with the right-hand-side operands having d elayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator-=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator-=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
//! in-place matrix multiplications, with the right-hand-side operands havi ng delayed operations //! in-place matrix multiplications, with the right-hand-side operands havi ng delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator*=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator*=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
glue_times::apply_inplace(*this, X); glue_times::apply_inplace(*this, X);
return *this; return *this;
} }
//! in-place matrix element-wise multiplication, with the right-hand-side o perands having delayed operations //! in-place matrix element-wise multiplication, with the right-hand-side o perands having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator%=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator%=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
//! in-place matrix element-wise division, with the right-hand-side operand s having delayed operations //! in-place matrix element-wise division, with the right-hand-side operand s having delayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator/=(const Glue<T1, T2, glue_type>& X) Mat<eT>::operator/=(const Glue<T1, T2, glue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const Mat<eT> m(X); const Mat<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
const Mat<eT>& const Mat<eT>&
skipping to change at line 3779 skipping to change at line 3779
Mat<eT>::Mat(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::Mat(const eGlue<T1, T2, eglue_type>& X)
: n_rows(X.get_n_rows()) : n_rows(X.get_n_rows())
, n_cols(X.get_n_cols()) , n_cols(X.get_n_cols())
, n_elem(X.get_n_elem()) , n_elem(X.get_n_elem())
, vec_state(0) , vec_state(0)
, mem_state(0) , mem_state(0)
, mem() , mem()
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
init_cold(); init_cold();
eglue_type::apply(*this, X); eglue_type::apply(*this, X);
} }
//! create a matrix from eGlue, i.e. run the previously delayed binary oper ations //! create a matrix from eGlue, i.e. run the previously delayed binary oper ations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
const bool bad_alias = const bool bad_alias =
( (
(eGlue<T1, T2, eglue_type>::proxy1_type::has_subview && X.P1.is_alias (*this)) (eGlue<T1, T2, eglue_type>::proxy1_type::has_subview && X.P1.is_alias (*this))
|| ||
(eGlue<T1, T2, eglue_type>::proxy2_type::has_subview && X.P2.is_alias (*this)) (eGlue<T1, T2, eglue_type>::proxy2_type::has_subview && X.P2.is_alias (*this))
); );
if(bad_alias == false) if(bad_alias == false)
{ {
skipping to change at line 3833 skipping to change at line 3833
//! in-place matrix addition, with the right-hand-side operands having dela yed operations //! in-place matrix addition, with the right-hand-side operands having dela yed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator+=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator+=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_plus(*this, X); eglue_type::apply_inplace_plus(*this, X);
return *this; return *this;
} }
//! in-place matrix subtraction, with the right-hand-side operands having d elayed operations //! in-place matrix subtraction, with the right-hand-side operands having d elayed operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator-=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator-=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_minus(*this, X); eglue_type::apply_inplace_minus(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator*=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator*=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
glue_times::apply_inplace(*this, X); glue_times::apply_inplace(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator%=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator%=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_schur(*this, X); eglue_type::apply_inplace_schur(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
inline inline
const Mat<eT>& const Mat<eT>&
Mat<eT>::operator/=(const eGlue<T1, T2, eglue_type>& X) Mat<eT>::operator/=(const eGlue<T1, T2, eglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
lse )); arma_type_check(( is_same_type< eT, typename T2::elem_type >::no ));
arma_type_check(( is_same_type< eT, typename T2::elem_type >::value == fa
lse ));
eglue_type::apply_inplace_div(*this, X); eglue_type::apply_inplace_div(*this, X);
return *this; return *this;
} }
//! EXPERIMENTAL: create a matrix from mtGlue, i.e. run the previously dela yed binary operations //! EXPERIMENTAL: create a matrix from mtGlue, i.e. run the previously dela yed binary operations
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
Mat<eT>::Mat(const mtGlue<eT, T1, T2, glue_type>& X) Mat<eT>::Mat(const mtGlue<eT, T1, T2, glue_type>& X)
 End of changes. 39 change blocks. 
83 lines changed or deleted 55 lines changed or added


 OpCube_bones.hpp   OpCube_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup OpCube //! \addtogroup OpCube
//! @{ //! @{
//! Analog of the Op class, intended for cubes //! Analog of the Op class, intended for cubes
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 OpCube_meat.hpp   OpCube_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup OpCube //! \addtogroup OpCube
//! @{ //! @{
template<typename T1, typename op_type> template<typename T1, typename op_type>
OpCube<T1, op_type>::OpCube(const BaseCube<typename T1::elem_type, T1>& in_ m) OpCube<T1, op_type>::OpCube(const BaseCube<typename T1::elem_type, T1>& in_ m)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Op_bones.hpp   Op_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Op //! \addtogroup Op
//! @{ //! @{
//! Class for storing data required for delayed unary operations, //! Class for storing data required for delayed unary operations,
//! such as the operand (e.g. the matrix to which the operation is to be ap plied) and the unary operator (e.g. inverse). //! such as the operand (e.g. the matrix to which the operation is to be ap plied) and the unary operator (e.g. inverse).
skipping to change at line 30 skipping to change at line 30
template<typename T1, typename op_type> template<typename T1, typename op_type>
class Op : public Base<typename T1::elem_type, Op<T1, op_type> > class Op : public Base<typename T1::elem_type, Op<T1, op_type> >
{ {
public: public:
typedef typename T1::elem_type elem_type; typedef typename T1::elem_type elem_type;
typedef typename get_pod_type<elem_type>::result pod_type; typedef typename get_pod_type<elem_type>::result pod_type;
static const bool is_row = ( T1::is_col && (is_same_type<op_type, op_stra ns>::value || is_same_type<op_type, op_htrans>::value || is_same_type<op_ty pe, op_htrans2>::value) ); static const bool is_row = ( T1::is_col && (is_same_type<op_type, op_stra ns>::value || is_same_type<op_type, op_htrans>::value || is_same_type<op_ty pe, op_htrans2>::value) );
static const bool is_col = ( T1::is_row && (is_same_type<op_type, op_stra ns>::value || is_same_type<op_type, op_htrans>::value || is_same_type<op_ty pe, op_htrans2>::value) ) || (is_same_type<op_type, op_diagvec>::value); static const bool is_col = ( T1::is_row && (is_same_type<op_type, op_stra ns>::value || is_same_type<op_type, op_htrans>::value || is_same_type<op_ty pe, op_htrans2>::value) ) || (is_same_type<op_type, op_diagvec>::value) || (is_same_type<op_type, op_vectorise_col>::value);
inline explicit Op(const T1& in_m); inline explicit Op(const T1& in_m);
inline Op(const T1& in_m, const elem_type in_aux); inline Op(const T1& in_m, const elem_type in_aux);
inline Op(const T1& in_m, const elem_type in_aux, const uword in_aux_uword_a, const uword in_aux_uword_b); inline Op(const T1& in_m, const elem_type in_aux, const uword in_aux_uword_a, const uword in_aux_uword_b);
inline Op(const T1& in_m, const uword in_aux_uword_a, const uword in_aux_uword_b); inline Op(const T1& in_m, const uword in_aux_uword_a, const uword in_aux_uword_b);
inline Op(const T1& in_m, const uword in_aux_uword_a, const uword in_aux_uword_b, const uword in_aux_uword_c, const char junk); inline Op(const T1& in_m, const uword in_aux_uword_a, const uword in_aux_uword_b, const uword in_aux_uword_c, const char junk);
inline ~Op(); inline ~Op();
arma_aligned const T1& m; //!< storage of reference to t he operand (eg. a matrix) arma_aligned const T1& m; //!< storage of reference to t he operand (eg. a matrix)
arma_aligned elem_type aux; //!< storage of auxiliary data , user defined format arma_aligned elem_type aux; //!< storage of auxiliary data , user defined format
 End of changes. 3 change blocks. 
2 lines changed or deleted 2 lines changed or added


 Op_meat.hpp   Op_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Op //! \addtogroup Op
//! @{ //! @{
template<typename T1, typename op_type> template<typename T1, typename op_type>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Proxy.hpp   Proxy.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Proxy //! \addtogroup Proxy
//! @{ //! @{
// ea_type is the "element accessor" type, // ea_type is the "element accessor" type,
// which can provide access to elements via operator[] // which can provide access to elements via operator[]
skipping to change at line 1112 skipping to change at line 1112
arma_inline ea_type get_ea() const { return Proxy_htrans2 ::get_ea(); } arma_inline ea_type get_ea() const { return Proxy_htrans2 ::get_ea(); }
arma_inline aligned_ea_type get_aligned_ea() const { return Proxy_htrans2 ::get_aligned_ea(); } arma_inline aligned_ea_type get_aligned_ea() const { return Proxy_htrans2 ::get_aligned_ea(); }
template<typename eT2> template<typename eT2>
arma_inline bool is_alias(const Mat<eT2>& X) const { return Proxy_htrans2 ::is_alias(X); } arma_inline bool is_alias(const Mat<eT2>& X) const { return Proxy_htrans2 ::is_alias(X); }
arma_inline bool is_aligned() const { return Proxy_htrans2::is_aligned(); } arma_inline bool is_aligned() const { return Proxy_htrans2::is_aligned(); }
}; };
template<typename T1>
class Proxy< Op<T1, op_vectorise_col> >
{
public:
typedef typename T1::elem_type elem_type;
typedef typename get_pod_type<elem_type>::result pod_type;
typedef Mat<elem_type> stored_type;
typedef const elem_type* ea_type;
typedef const Mat<elem_type>& aligned_ea_type;
static const bool prefer_at_accessor = false;
static const bool has_subview = true;
static const bool is_fixed = false;
static const bool fake_mat = true;
static const bool is_row = false;
static const bool is_col = true;
arma_aligned const unwrap<T1> U;
arma_aligned const Mat<elem_type> Q;
inline explicit Proxy(const Op<T1, op_vectorise_col>& A)
: U(A.m)
, Q(const_cast<elem_type*>(U.M.memptr()), U.M.n_elem, 1, false, false)
{
arma_extra_debug_sigprint();
}
arma_inline uword get_n_rows() const { return Q.n_rows; }
arma_inline uword get_n_cols() const { return 1; }
arma_inline uword get_n_elem() const { return Q.n_elem; }
arma_inline elem_type operator[] (const uword i) const { r
eturn Q[i]; }
arma_inline elem_type at (const uword row, const uword) const { r
eturn Q[row]; }
arma_inline elem_type at_alt (const uword i) const { r
eturn Q.at_alt(i); }
arma_inline ea_type get_ea() const { return Q.memptr(); }
arma_inline aligned_ea_type get_aligned_ea() const { return Q; }
template<typename eT2>
arma_inline bool is_alias(const Mat<eT2>& X) const { return ( void_ptr(&X
) == void_ptr(&(U.M)) ); }
arma_inline bool is_aligned() const { return memory::is_aligned(Q.memptr(
)); }
};
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
class Proxy< Glue<T1, T2, glue_type> > class Proxy< Glue<T1, T2, glue_type> >
{ {
public: public:
typedef typename T1::elem_type elem_type; typedef typename T1::elem_type elem_type;
typedef typename get_pod_type<elem_type>::result pod_type; typedef typename get_pod_type<elem_type>::result pod_type;
typedef Mat<elem_type> stored_type; typedef Mat<elem_type> stored_type;
typedef const elem_type* ea_type; typedef const elem_type* ea_type;
typedef const Mat<elem_type>& aligned_ea_type; typedef const Mat<elem_type>& aligned_ea_type;
 End of changes. 3 change blocks. 
1 lines changed or deleted 52 lines changed or added


 ProxyCube.hpp   ProxyCube.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup ProxyCube //! \addtogroup ProxyCube
//! @{ //! @{
template<typename T1> template<typename T1>
class ProxyCube class ProxyCube
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Row_bones.hpp   Row_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Row //! \addtogroup Row
//! @{ //! @{
//! Class for row vectors (matrices with only one row) //! Class for row vectors (matrices with only one row)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 Row_meat.hpp   Row_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup Row //! \addtogroup Row
//! @{ //! @{
//! construct an empty row vector //! construct an empty row vector
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 SpBase_bones.hpp   SpBase_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup SpBase //! \addtogroup SpBase
//! @{ //! @{
template<typename elem_type, typename derived> template<typename elem_type, typename derived>
struct SpBase struct SpBase
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 SpBase_meat.hpp   SpBase_meat.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup SpBase //! \addtogroup SpBase
//! @{ //! @{
template<typename elem_type, typename derived> template<typename elem_type, typename derived>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 SpMat_meat.hpp   SpMat_meat.hpp 
skipping to change at line 601 skipping to change at line 601
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type T; typedef typename T1::elem_type T;
// Make sure eT is complex and T is not (compile-time check). // Make sure eT is complex and T is not (compile-time check).
arma_type_check(( is_complex<eT>::value == false )); arma_type_check(( is_complex<eT>::value == false ));
arma_type_check(( is_complex< T>::value == true )); arma_type_check(( is_complex< T>::value == true ));
// Compile-time abort if types are not compatible. // Compile-time abort if types are not compatible.
arma_type_check(( is_same_type< std::complex<T>, eT >::value == false )); arma_type_check(( is_same_type< std::complex<T>, eT >::no ));
const unwrap_spmat<T1> tmp1(A.get_ref()); const unwrap_spmat<T1> tmp1(A.get_ref());
const unwrap_spmat<T2> tmp2(B.get_ref()); const unwrap_spmat<T2> tmp2(B.get_ref());
const SpMat<T>& X = tmp1.M; const SpMat<T>& X = tmp1.M;
const SpMat<T>& Y = tmp2.M; const SpMat<T>& Y = tmp2.M;
arma_debug_assert_same_size(X.n_rows, X.n_cols, Y.n_rows, Y.n_cols, "SpMa t()"); arma_debug_assert_same_size(X.n_rows, X.n_cols, Y.n_rows, Y.n_cols, "SpMa t()");
const uword l_n_rows = X.n_rows; const uword l_n_rows = X.n_rows;
skipping to change at line 1317 skipping to change at line 1317
, n_cols(0) , n_cols(0)
, n_elem(0) , n_elem(0)
, n_nonzero(0) , n_nonzero(0)
, vec_state(0) , vec_state(0)
, values(NULL) // set in application of sparse operation , values(NULL) // set in application of sparse operation
, row_indices(NULL) , row_indices(NULL)
, col_ptrs(NULL) , col_ptrs(NULL)
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
spop_type::apply(*this, X); spop_type::apply(*this, X);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
spop_type::apply(*this, X); spop_type::apply(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator+=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator+=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator-=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator-=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator*=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator*=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator*=(m); return (*this).operator*=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator%=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator%=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator/=(const SpOp<T1, spop_type>& X) SpMat<eT>::operator/=(const SpOp<T1, spop_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
SpMat<eT>::SpMat(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::SpMat(const SpGlue<T1, T2, spglue_type>& X)
skipping to change at line 1427 skipping to change at line 1427
, n_cols(0) , n_cols(0)
, n_elem(0) , n_elem(0)
, n_nonzero(0) , n_nonzero(0)
, vec_state(0) , vec_state(0)
, values(NULL) // extra element set in application of sparse glue , values(NULL) // extra element set in application of sparse glue
, row_indices(NULL) , row_indices(NULL)
, col_ptrs(NULL) , col_ptrs(NULL)
{ {
arma_extra_debug_sigprint_this(this); arma_extra_debug_sigprint_this(this);
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
spglue_type::apply(*this, X); spglue_type::apply(*this, X);
} }
template<typename eT> template<typename eT>
template<typename T1, typename spop_type> template<typename T1, typename spop_type>
inline inline
SpMat<eT>::SpMat(const mtSpOp<eT, T1, spop_type>& X) SpMat<eT>::SpMat(const mtSpOp<eT, T1, spop_type>& X)
: n_rows(0) : n_rows(0)
, n_cols(0) , n_cols(0)
skipping to change at line 1536 skipping to change at line 1536
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
spglue_type::apply(*this, X); spglue_type::apply(*this, X);
return *this; return *this;
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator+=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator+=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator+=(m); return (*this).operator+=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator-=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator-=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator-=(m); return (*this).operator-=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator*=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator*=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator*=(m); return (*this).operator*=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator%=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator%=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator%=(m); return (*this).operator%=(m);
} }
template<typename eT> template<typename eT>
template<typename T1, typename T2, typename spglue_type> template<typename T1, typename T2, typename spglue_type>
inline inline
const SpMat<eT>& const SpMat<eT>&
SpMat<eT>::operator/=(const SpGlue<T1, T2, spglue_type>& X) SpMat<eT>::operator/=(const SpGlue<T1, T2, spglue_type>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type< eT, typename T1::elem_type >::value == fa lse )); arma_type_check(( is_same_type< eT, typename T1::elem_type >::no ));
const SpMat<eT> m(X); const SpMat<eT> m(X);
return (*this).operator/=(m); return (*this).operator/=(m);
} }
template<typename eT> template<typename eT>
arma_inline arma_inline
SpSubview<eT> SpSubview<eT>
SpMat<eT>::row(const uword row_num) SpMat<eT>::row(const uword row_num)
 End of changes. 15 change blocks. 
15 lines changed or deleted 15 lines changed or added


 access.hpp   access.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup access //! \addtogroup access
//! @{ //! @{
class access class access
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arma_config.hpp   arma_config.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arma_config //! \addtogroup arma_config
//! @{ //! @{
struct arma_config struct arma_config
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arma_ostream_bones.hpp   arma_ostream_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arma_ostream //! \addtogroup arma_ostream
//! @{ //! @{
class arma_ostream_state class arma_ostream_state
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arma_ostream_meat.hpp   arma_ostream_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arma_ostream //! \addtogroup arma_ostream
//! @{ //! @{
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arma_static_check.hpp   arma_static_check.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arma_static_check //! \addtogroup arma_static_check
//! @{ //! @{
template<bool ERROR___INCORRECT_OR_UNSUPPORTED_TYPE> template<bool ERROR___INCORRECT_OR_UNSUPPORTED_TYPE>
struct arma_type_check_cxx1998 struct arma_type_check_cxx1998
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arma_version.hpp   arma_version.hpp 
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2013 Conrad Sanderson // Copyright (C) 2009-2013 Conrad Sanderson
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arma_version //! \addtogroup arma_version
//! @{ //! @{
#define ARMA_VERSION_MAJOR 3 #define ARMA_VERSION_MAJOR 3
#define ARMA_VERSION_MINOR 900 #define ARMA_VERSION_MINOR 909
#define ARMA_VERSION_PATCH 7 #define ARMA_VERSION_PATCH 1
#define ARMA_VERSION_NAME "Bavarian Sunflower" #define ARMA_VERSION_NAME "development version"
struct arma_version struct arma_version
{ {
static const unsigned int major = ARMA_VERSION_MAJOR; static const unsigned int major = ARMA_VERSION_MAJOR;
static const unsigned int minor = ARMA_VERSION_MINOR; static const unsigned int minor = ARMA_VERSION_MINOR;
static const unsigned int patch = ARMA_VERSION_PATCH; static const unsigned int patch = ARMA_VERSION_PATCH;
static static
inline inline
std::string std::string
 End of changes. 3 change blocks. 
4 lines changed or deleted 4 lines changed or added


 armadillo   armadillo 
skipping to change at line 32 skipping to change at line 32
#include <complex> #include <complex>
#include <vector> #include <vector>
#include "armadillo_bits/config.hpp" #include "armadillo_bits/config.hpp"
#include "armadillo_bits/compiler_setup.hpp" #include "armadillo_bits/compiler_setup.hpp"
#include "armadillo_bits/undefine_conflicts.hpp" #include "armadillo_bits/undefine_conflicts.hpp"
#if defined(ARMA_USE_CXX11) #if defined(ARMA_USE_CXX11)
#include <initializer_list> #include <initializer_list>
#include <cstdint> #include <cstdint>
// TODO: extend wall_clock class to use C++11 chrono library
#endif #endif
#if !defined(ARMA_HAVE_GETTIMEOFDAY) && !defined(ARMA_USE_BOOST_DATE) #if !defined(ARMA_HAVE_GETTIMEOFDAY) && !defined(ARMA_USE_BOOST_DATE)
#include <ctime> #include <ctime>
#endif #endif
#if defined(ARMA_HAVE_GETTIMEOFDAY) #if defined(ARMA_HAVE_GETTIMEOFDAY)
#include <sys/time.h> #include <sys/time.h>
#undef ARMA_USE_BOOST_DATE #undef ARMA_USE_BOOST_DATE
#endif #endif
skipping to change at line 55 skipping to change at line 56
#endif #endif
#if defined(ARMA_USE_TBB_ALLOC) #if defined(ARMA_USE_TBB_ALLOC)
#include <tbb/scalable_allocator.h> #include <tbb/scalable_allocator.h>
#endif #endif
#if defined(ARMA_USE_MKL_ALLOC) #if defined(ARMA_USE_MKL_ALLOC)
#include <mkl_service.h> #include <mkl_service.h>
#endif #endif
#if defined(ARMA_HAVE_STD_TR1) #if !defined(ARMA_USE_CXX11)
// TODO: add handling of this functionality when use of C++11 is enabled #if defined(ARMA_HAVE_STD_TR1)
#include <tr1/cmath> #include <tr1/cmath>
#include <tr1/complex> #include <tr1/complex>
#elif defined(ARMA_USE_BOOST) #elif defined(ARMA_USE_BOOST)
#include <boost/math/complex.hpp> #include <boost/math/complex.hpp>
#include <boost/math/special_functions/acosh.hpp> #include <boost/math/special_functions/acosh.hpp>
#include <boost/math/special_functions/asinh.hpp> #include <boost/math/special_functions/asinh.hpp>
#include <boost/math/special_functions/atanh.hpp> #include <boost/math/special_functions/atanh.hpp>
#endif
#endif #endif
#if defined(ARMA_USE_BOOST) #if defined(ARMA_EXTRA_DEBUG)
#if defined(ARMA_EXTRA_DEBUG) #if !defined(ARMA_HAVE_STD_SNPRINTF)
#include <boost/format.hpp> #if defined(ARMA_USE_CXX11)
#include <boost/current_function.hpp> #include <cstdio>
#define ARMA_USE_BOOST_FORMAT #define ARMA_HAVE_STD_SNPRINTF
#elif defined(ARMA_USE_BOOST)
#include <boost/format.hpp>
#define ARMA_USE_BOOST_FORMAT
#endif
#endif #endif
#endif #endif
#include "armadillo_bits/include_atlas.hpp" #include "armadillo_bits/include_atlas.hpp"
#if defined(ARMA_USE_HDF5) #if defined(ARMA_USE_HDF5)
#include <hdf5.h> #include <hdf5.h>
#endif #endif
//! \namespace arma namespace for Armadillo classes and functions //! \namespace arma namespace for Armadillo classes and functions
skipping to change at line 195 skipping to change at line 201
#include "armadillo_bits/op_min_bones.hpp" #include "armadillo_bits/op_min_bones.hpp"
#include "armadillo_bits/op_mean_bones.hpp" #include "armadillo_bits/op_mean_bones.hpp"
#include "armadillo_bits/op_median_bones.hpp" #include "armadillo_bits/op_median_bones.hpp"
#include "armadillo_bits/op_sort_bones.hpp" #include "armadillo_bits/op_sort_bones.hpp"
#include "armadillo_bits/op_sum_bones.hpp" #include "armadillo_bits/op_sum_bones.hpp"
#include "armadillo_bits/op_stddev_bones.hpp" #include "armadillo_bits/op_stddev_bones.hpp"
#include "armadillo_bits/op_strans_bones.hpp" #include "armadillo_bits/op_strans_bones.hpp"
#include "armadillo_bits/op_var_bones.hpp" #include "armadillo_bits/op_var_bones.hpp"
#include "armadillo_bits/op_repmat_bones.hpp" #include "armadillo_bits/op_repmat_bones.hpp"
#include "armadillo_bits/op_reshape_bones.hpp" #include "armadillo_bits/op_reshape_bones.hpp"
#include "armadillo_bits/op_vectorise_bones.hpp"
#include "armadillo_bits/op_resize_bones.hpp" #include "armadillo_bits/op_resize_bones.hpp"
#include "armadillo_bits/op_cov_bones.hpp" #include "armadillo_bits/op_cov_bones.hpp"
#include "armadillo_bits/op_cor_bones.hpp" #include "armadillo_bits/op_cor_bones.hpp"
#include "armadillo_bits/op_shuffle_bones.hpp" #include "armadillo_bits/op_shuffle_bones.hpp"
#include "armadillo_bits/op_prod_bones.hpp" #include "armadillo_bits/op_prod_bones.hpp"
#include "armadillo_bits/op_pinv_bones.hpp" #include "armadillo_bits/op_pinv_bones.hpp"
#include "armadillo_bits/op_dotext_bones.hpp" #include "armadillo_bits/op_dotext_bones.hpp"
#include "armadillo_bits/op_flip_bones.hpp" #include "armadillo_bits/op_flip_bones.hpp"
#include "armadillo_bits/op_princomp_bones.hpp" #include "armadillo_bits/op_princomp_bones.hpp"
#include "armadillo_bits/op_misc_bones.hpp" #include "armadillo_bits/op_misc_bones.hpp"
skipping to change at line 372 skipping to change at line 379
#include "armadillo_bits/fn_var.hpp" #include "armadillo_bits/fn_var.hpp"
#include "armadillo_bits/fn_sort.hpp" #include "armadillo_bits/fn_sort.hpp"
#include "armadillo_bits/fn_sort_index.hpp" #include "armadillo_bits/fn_sort_index.hpp"
#include "armadillo_bits/fn_strans.hpp" #include "armadillo_bits/fn_strans.hpp"
#include "armadillo_bits/fn_chol.hpp" #include "armadillo_bits/fn_chol.hpp"
#include "armadillo_bits/fn_qr.hpp" #include "armadillo_bits/fn_qr.hpp"
#include "armadillo_bits/fn_svd.hpp" #include "armadillo_bits/fn_svd.hpp"
#include "armadillo_bits/fn_solve.hpp" #include "armadillo_bits/fn_solve.hpp"
#include "armadillo_bits/fn_repmat.hpp" #include "armadillo_bits/fn_repmat.hpp"
#include "armadillo_bits/fn_reshape.hpp" #include "armadillo_bits/fn_reshape.hpp"
#include "armadillo_bits/fn_vectorise.hpp"
#include "armadillo_bits/fn_resize.hpp" #include "armadillo_bits/fn_resize.hpp"
#include "armadillo_bits/fn_cov.hpp" #include "armadillo_bits/fn_cov.hpp"
#include "armadillo_bits/fn_cor.hpp" #include "armadillo_bits/fn_cor.hpp"
#include "armadillo_bits/fn_shuffle.hpp" #include "armadillo_bits/fn_shuffle.hpp"
#include "armadillo_bits/fn_prod.hpp" #include "armadillo_bits/fn_prod.hpp"
#include "armadillo_bits/fn_eps.hpp" #include "armadillo_bits/fn_eps.hpp"
#include "armadillo_bits/fn_pinv.hpp" #include "armadillo_bits/fn_pinv.hpp"
#include "armadillo_bits/fn_rank.hpp" #include "armadillo_bits/fn_rank.hpp"
#include "armadillo_bits/fn_kron.hpp" #include "armadillo_bits/fn_kron.hpp"
#include "armadillo_bits/fn_flip.hpp" #include "armadillo_bits/fn_flip.hpp"
skipping to change at line 410 skipping to change at line 418
#include "armadillo_bits/fn_spones.hpp" #include "armadillo_bits/fn_spones.hpp"
#include "armadillo_bits/fn_sprandn.hpp" #include "armadillo_bits/fn_sprandn.hpp"
#include "armadillo_bits/fn_sprandu.hpp" #include "armadillo_bits/fn_sprandu.hpp"
// misc stuff // misc stuff
#include "armadillo_bits/hdf5_misc.hpp" #include "armadillo_bits/hdf5_misc.hpp"
#include "armadillo_bits/fft_engine.hpp" #include "armadillo_bits/fft_engine.hpp"
// //
// class meat // classes implementing various forms of dense matrix multiplication
#include "armadillo_bits/mul_gemv.hpp"
#include "armadillo_bits/mul_gemm.hpp"
#include "armadillo_bits/mul_gemm_mixed.hpp"
#include "armadillo_bits/mul_syrk.hpp"
#include "armadillo_bits/mul_herk.hpp"
#include "armadillo_bits/gemv.hpp" //
#include "armadillo_bits/gemm.hpp" // class meat
#include "armadillo_bits/gemm_mixed.hpp"
#include "armadillo_bits/eop_core_meat.hpp" #include "armadillo_bits/eop_core_meat.hpp"
#include "armadillo_bits/eglue_core_meat.hpp" #include "armadillo_bits/eglue_core_meat.hpp"
#include "armadillo_bits/cond_rel_meat.hpp" #include "armadillo_bits/cond_rel_meat.hpp"
#include "armadillo_bits/arrayops_meat.hpp" #include "armadillo_bits/arrayops_meat.hpp"
#include "armadillo_bits/podarray_meat.hpp" #include "armadillo_bits/podarray_meat.hpp"
#include "armadillo_bits/auxlib_meat.hpp" #include "armadillo_bits/auxlib_meat.hpp"
#include "armadillo_bits/injector_meat.hpp" #include "armadillo_bits/injector_meat.hpp"
skipping to change at line 470 skipping to change at line 483
#include "armadillo_bits/op_min_meat.hpp" #include "armadillo_bits/op_min_meat.hpp"
#include "armadillo_bits/op_mean_meat.hpp" #include "armadillo_bits/op_mean_meat.hpp"
#include "armadillo_bits/op_median_meat.hpp" #include "armadillo_bits/op_median_meat.hpp"
#include "armadillo_bits/op_sort_meat.hpp" #include "armadillo_bits/op_sort_meat.hpp"
#include "armadillo_bits/op_sum_meat.hpp" #include "armadillo_bits/op_sum_meat.hpp"
#include "armadillo_bits/op_stddev_meat.hpp" #include "armadillo_bits/op_stddev_meat.hpp"
#include "armadillo_bits/op_strans_meat.hpp" #include "armadillo_bits/op_strans_meat.hpp"
#include "armadillo_bits/op_var_meat.hpp" #include "armadillo_bits/op_var_meat.hpp"
#include "armadillo_bits/op_repmat_meat.hpp" #include "armadillo_bits/op_repmat_meat.hpp"
#include "armadillo_bits/op_reshape_meat.hpp" #include "armadillo_bits/op_reshape_meat.hpp"
#include "armadillo_bits/op_vectorise_meat.hpp"
#include "armadillo_bits/op_resize_meat.hpp" #include "armadillo_bits/op_resize_meat.hpp"
#include "armadillo_bits/op_cov_meat.hpp" #include "armadillo_bits/op_cov_meat.hpp"
#include "armadillo_bits/op_cor_meat.hpp" #include "armadillo_bits/op_cor_meat.hpp"
#include "armadillo_bits/op_shuffle_meat.hpp" #include "armadillo_bits/op_shuffle_meat.hpp"
#include "armadillo_bits/op_prod_meat.hpp" #include "armadillo_bits/op_prod_meat.hpp"
#include "armadillo_bits/op_pinv_meat.hpp" #include "armadillo_bits/op_pinv_meat.hpp"
#include "armadillo_bits/op_dotext_meat.hpp" #include "armadillo_bits/op_dotext_meat.hpp"
#include "armadillo_bits/op_flip_meat.hpp" #include "armadillo_bits/op_flip_meat.hpp"
#include "armadillo_bits/op_princomp_meat.hpp" #include "armadillo_bits/op_princomp_meat.hpp"
#include "armadillo_bits/op_misc_meat.hpp" #include "armadillo_bits/op_misc_meat.hpp"
 End of changes. 8 change blocks. 
18 lines changed or deleted 32 lines changed or added


 arrayops_bones.hpp   arrayops_bones.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arrayops //! \addtogroup arrayops
//! @{ //! @{
class arrayops class arrayops
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 arrayops_meat.hpp   arrayops_meat.hpp 
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2013 Conrad Sanderson // Copyright (C) 2011-2013 Conrad Sanderson
// Copyright (C) 2011-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup arrayops //! \addtogroup arrayops
//! @{ //! @{
template<typename eT> template<typename eT>
arma_hot arma_hot
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 atlas_bones.hpp   atlas_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au) // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifdef ARMA_USE_ATLAS #ifdef ARMA_USE_ATLAS
//! \namespace atlas namespace for ATLAS functions (imported from the globa l namespace) //! \namespace atlas namespace for ATLAS functions (imported from the globa l namespace)
namespace atlas namespace atlas
{ {
using ::CblasColMajor; using ::CblasColMajor;
using ::CblasNoTrans; using ::CblasNoTrans;
using ::CblasTrans; using ::CblasTrans;
using ::CblasConjTrans; using ::CblasConjTrans;
using ::CblasLower;
using ::CblasUpper;
#if defined(ARMA_USE_WRAPPER) #if defined(ARMA_USE_WRAPPER)
extern "C" extern "C"
{ {
float wrapper_cblas_sdot(const int N, const float *X, const int incX, const float *Y, const int incY); float wrapper_cblas_sdot(const int N, const float *X, const int incX, const float *Y, const int incY);
double wrapper_cblas_ddot(const int N, const double *X, const int incX, const double *Y, const int incY); double wrapper_cblas_ddot(const int N, const double *X, const int incX, const double *Y, const int incY);
void wrapper_cblas_cdotu_sub(const int N, const void *X, const int incX , const void *Y, const int incY, void *dotu); void wrapper_cblas_cdotu_sub(const int N, const void *X, const int incX , const void *Y, const int incY, void *dotu);
void wrapper_cblas_zdotu_sub(const int N, const void *X, const int incX , const void *Y, const int incY, void *dotu); void wrapper_cblas_zdotu_sub(const int N, const void *X, const int incX , const void *Y, const int incY, void *dotu);
skipping to change at line 57 skipping to change at line 59
const double *A, const int lda, const double * B, const int ldb, const double beta, double *C, const int ldc); const double *A, const int lda, const double * B, const int ldb, const double beta, double *C, const int ldc);
void wrapper_cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS _TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, void wrapper_cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS _TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB,
const int M, const int N, const int K, const v oid *alpha, const int M, const int N, const int K, const v oid *alpha,
const void *A, const int lda, const void *B, c onst int ldb, const void *beta, void *C, const int ldc); const void *A, const int lda, const void *B, c onst int ldb, const void *beta, void *C, const int ldc);
void wrapper_cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS _TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, void wrapper_cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS _TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB,
const int M, const int N, const int K, const v oid *alpha, const int M, const int N, const int K, const v oid *alpha,
const void *A, const int lda, const void *B, c onst int ldb, const void *beta, void *C, const int ldc); const void *A, const int lda, const void *B, c onst int ldb, const void *beta, void *C, const int ldc);
void wrapper_cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS
_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
const int N, const int K, const float alpha,
const float *A, const int lda, const float bet
a, float *C, const int ldc);
void wrapper_cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS
_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
const int N, const int K, const double alpha,
const double *A, const int lda, const double b
eta, double *C, const int ldc);
void wrapper_cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS
_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
const int N, const int K, const float alpha,
const void *A, const int lda, const float beta
, void *C, const int ldc);
void wrapper_cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS
_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans,
const int N, const int K, const double alpha,
const void *A, const int lda, const double bet
a, void *C, const int ldc);
int wrapper_clapack_sgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, float *A, const int lda, int *ipiv); int wrapper_clapack_sgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, float *A, const int lda, int *ipiv);
int wrapper_clapack_dgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, double *A, const int lda, int *ipiv); int wrapper_clapack_dgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, double *A, const int lda, int *ipiv);
int wrapper_clapack_cgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, void *A, const int lda, int *ipiv); int wrapper_clapack_cgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, void *A, const int lda, int *ipiv);
int wrapper_clapack_zgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, void *A, const int lda, int *ipiv); int wrapper_clapack_zgetrf(const enum CBLAS_ORDER Order, const int M, c onst int N, void *A, const int lda, int *ipiv);
int wrapper_clapack_sgetri(const enum CBLAS_ORDER Order, const int N, f loat *A, const int lda, const int *ipiv); int wrapper_clapack_sgetri(const enum CBLAS_ORDER Order, const int N, f loat *A, const int lda, const int *ipiv);
int wrapper_clapack_dgetri(const enum CBLAS_ORDER Order, const int N, d ouble *A, const int lda, const int *ipiv); int wrapper_clapack_dgetri(const enum CBLAS_ORDER Order, const int N, d ouble *A, const int lda, const int *ipiv);
int wrapper_clapack_cgetri(const enum CBLAS_ORDER Order, const int N, v oid *A, const int lda, const int *ipiv); int wrapper_clapack_cgetri(const enum CBLAS_ORDER Order, const int N, v oid *A, const int lda, const int *ipiv);
int wrapper_clapack_zgetri(const enum CBLAS_ORDER Order, const int N, v oid *A, const int lda, const int *ipiv); int wrapper_clapack_zgetri(const enum CBLAS_ORDER Order, const int N, v oid *A, const int lda, const int *ipiv);
 End of changes. 3 change blocks. 
2 lines changed or deleted 28 lines changed or added


 atlas_wrapper.hpp   atlas_wrapper.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au) // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifdef ARMA_USE_ATLAS #ifdef ARMA_USE_ATLAS
//! \namespace atlas namespace for ATLAS functions (imported from the globa l namespace) //! \namespace atlas namespace for ATLAS functions (imported from the globa l namespace)
namespace atlas namespace atlas
{ {
skipping to change at line 158 skipping to change at line 158
else else
if(is_supported_complex_double<eT>::value == true) if(is_supported_complex_double<eT>::value == true)
{ {
typedef std::complex<double> T; typedef std::complex<double> T;
arma_atlas(cblas_zgemm)(Order, TransA, TransB, M, N, K, (const T*)&al pha, (const T*)A, lda, (const T*)B, ldb, (const T*)&beta, (T*)C, ldc); arma_atlas(cblas_zgemm)(Order, TransA, TransB, M, N, K, (const T*)&al pha, (const T*)A, lda, (const T*)B, ldb, (const T*)&beta, (T*)C, ldc);
} }
} }
template<typename eT> template<typename eT>
inline inline
void
cblas_syrk
(
const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CB
LAS_TRANSPOSE Trans,
const int N, const int K, const double alpha,
const double* A, const int lda, const double beta, double* C, const int
ldc
)
{
arma_type_check((is_supported_blas_type<eT>::value == false));
if(is_float<eT>::value == true)
{
typedef float T;
arma_atlas(cblas_ssyrk)(Order, Uplo, Trans, N, K, (const T)alpha, (co
nst T*)A, lda, (const T)beta, (T*)C, ldc);
}
else
if(is_double<eT>::value == true)
{
typedef double T;
arma_atlas(cblas_dsyrk)(Order, Uplo, Trans, N, K, (const T)alpha, (co
nst T*)A, lda, (const T)beta, (T*)C, ldc);
}
}
template<typename T>
inline
void
cblas_herk
(
const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CB
LAS_TRANSPOSE Trans,
const int N, const int K, const T alpha,
const std::complex<T>* A, const int lda, const T beta, std::complex<T>*
C, const int ldc
)
{
arma_type_check((is_supported_blas_type<T>::value == false));
if(is_float<T>::value == true)
{
typedef float TT;
typedef std::complex<float> cx_TT;
arma_atlas(cblas_cherk)(Order, Uplo, Trans, N, K, (const TT)alpha, (c
onst cx_TT*)A, lda, (const TT)beta, (cx_TT*)C, ldc);
}
else
if(is_double<T>::value == true)
{
typedef double TT;
typedef std::complex<double> cx_TT;
arma_atlas(cblas_zherk)(Order, Uplo, Trans, N, K, (const TT)alpha, (c
onst cx_TT*)A, lda, (const TT)beta, (cx_TT*)C, ldc);
}
}
template<typename eT>
inline
int int
clapack_getrf clapack_getrf
( (
const enum CBLAS_ORDER Order, const int M, const int N, const enum CBLAS_ORDER Order, const int M, const int N,
eT *A, const int lda, int *ipiv eT *A, const int lda, int *ipiv
) )
{ {
arma_type_check((is_supported_blas_type<eT>::value == false)); arma_type_check((is_supported_blas_type<eT>::value == false));
if(is_float<eT>::value == true) if(is_float<eT>::value == true)
 End of changes. 2 change blocks. 
2 lines changed or deleted 64 lines changed or added


 auxlib_bones.hpp   auxlib_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009 Edmund Highcock // Copyright (C) 2009 Edmund Highcock
// Copyright (C) 2011 James Sanders // Copyright (C) 2011 James Sanders
// Copyright (C) 2012 Eric Jon Sundstrom // Copyright (C) 2012 Eric Jon Sundstrom
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup auxlib //! \addtogroup auxlib
//! @{ //! @{
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 auxlib_meat.hpp   auxlib_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2009 Edmund Highcock // Copyright (C) 2009 Edmund Highcock
// Copyright (C) 2011 James Sanders // Copyright (C) 2011 James Sanders
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// Copyright (C) 2012 Eric Jon Sundstrom // Copyright (C) 2012 Eric Jon Sundstrom
// Copyright (C) 2012 Michael McNeil Forbes // Copyright (C) 2012 Michael McNeil Forbes
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 blas_bones.hpp   blas_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au) // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifdef ARMA_USE_BLAS #ifdef ARMA_USE_BLAS
#if !defined(ARMA_BLAS_CAPITALS) #if !defined(ARMA_BLAS_CAPITALS)
#define arma_sdot sdot #define arma_sdot sdot
skipping to change at line 25 skipping to change at line 25
#define arma_sgemv sgemv #define arma_sgemv sgemv
#define arma_dgemv dgemv #define arma_dgemv dgemv
#define arma_cgemv cgemv #define arma_cgemv cgemv
#define arma_zgemv zgemv #define arma_zgemv zgemv
#define arma_sgemm sgemm #define arma_sgemm sgemm
#define arma_dgemm dgemm #define arma_dgemm dgemm
#define arma_cgemm cgemm #define arma_cgemm cgemm
#define arma_zgemm zgemm #define arma_zgemm zgemm
#define arma_ssyrk ssyrk
#define arma_dsyrk dsyrk
#define arma_cherk cherk
#define arma_zherk zherk
#else #else
#define arma_sdot SDOT #define arma_sdot SDOT
#define arma_ddot DDOT #define arma_ddot DDOT
#define arma_sgemv SGEMV #define arma_sgemv SGEMV
#define arma_dgemv DGEMV #define arma_dgemv DGEMV
#define arma_cgemv CGEMV #define arma_cgemv CGEMV
#define arma_zgemv ZGEMV #define arma_zgemv ZGEMV
#define arma_sgemm SGEMM #define arma_sgemm SGEMM
#define arma_dgemm DGEMM #define arma_dgemm DGEMM
#define arma_cgemm CGEMM #define arma_cgemm CGEMM
#define arma_zgemm ZGEMM #define arma_zgemm ZGEMM
#define arma_ssyrk SSYRK
#define arma_dsyrk DSYRK
#define arma_cherk CHERK
#define arma_zherk ZHERK
#endif #endif
extern "C" extern "C"
{ {
float arma_fortran(arma_sdot)(blas_int* n, const float* x, blas_int* in cx, const float* y, blas_int* incy); float arma_fortran(arma_sdot)(blas_int* n, const float* x, blas_int* in cx, const float* y, blas_int* incy);
double arma_fortran(arma_ddot)(blas_int* n, const double* x, blas_int* in cx, const double* y, blas_int* incy); double arma_fortran(arma_ddot)(blas_int* n, const double* x, blas_int* in cx, const double* y, blas_int* incy);
void arma_fortran(arma_sgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const float* alpha, const float* A, const blas_int* ldA, c onst float* x, const blas_int* incx, const float* beta, float* y, const blas_int* incy); void arma_fortran(arma_sgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const float* alpha, const float* A, const blas_int* ldA, c onst float* x, const blas_int* incx, const float* beta, float* y, const blas_int* incy);
void arma_fortran(arma_dgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const double* alpha, const double* A, const blas_int* ldA, c onst double* x, const blas_int* incx, const double* beta, double* y, const blas_int* incy); void arma_fortran(arma_dgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const double* alpha, const double* A, const blas_int* ldA, c onst double* x, const blas_int* incx, const double* beta, double* y, const blas_int* incy);
void arma_fortran(arma_cgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const void* alpha, const void* A, const blas_int* ldA, c onst void* x, const blas_int* incx, const void* beta, void* y, const blas_int* incy); void arma_fortran(arma_cgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const void* alpha, const void* A, const blas_int* ldA, c onst void* x, const blas_int* incx, const void* beta, void* y, const blas_int* incy);
void arma_fortran(arma_zgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const void* alpha, const void* A, const blas_int* ldA, c onst void* x, const blas_int* incx, const void* beta, void* y, const blas_int* incy); void arma_fortran(arma_zgemv)(const char* transA, const blas_int* m, cons t blas_int* n, const void* alpha, const void* A, const blas_int* ldA, c onst void* x, const blas_int* incx, const void* beta, void* y, const blas_int* incy);
void arma_fortran(arma_sgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const float* alpha, const float* A, const blas_int* ldA, const float* B, const blas_int* ldB, const float* beta, float* C, const blas_int* ldC); void arma_fortran(arma_sgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const float* alpha, const float* A, const blas_int* ldA, const float* B, const blas_int* ldB, const float* beta, float* C, const blas_int* ldC);
void arma_fortran(arma_dgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const double* alpha, const double* A, const blas_int* ldA, const double* B, const blas_int* ldB, const double* beta, double* C, const blas_int* ldC); void arma_fortran(arma_dgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const double* alpha, const double* A, const blas_int* ldA, const double* B, const blas_int* ldB, const double* beta, double* C, const blas_int* ldC);
void arma_fortran(arma_cgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const void* alpha, const void* A, const blas_int* ldA, const void* B, const blas_int* ldB, const void* beta, void* C, const blas_int* ldC); void arma_fortran(arma_cgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const void* alpha, const void* A, const blas_int* ldA, const void* B, const blas_int* ldB, const void* beta, void* C, const blas_int* ldC);
void arma_fortran(arma_zgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const void* alpha, const void* A, const blas_int* ldA, const void* B, const blas_int* ldB, const void* beta, void* C, const blas_int* ldC); void arma_fortran(arma_zgemm)(const char* transA, const char* transB, con st blas_int* m, const blas_int* n, const blas_int* k, const void* alpha, const void* A, const blas_int* ldA, const void* B, const blas_int* ldB, const void* beta, void* C, const blas_int* ldC);
void arma_fortran(arma_ssyrk)(const char* uplo, const char* transA, const
blas_int* n, const blas_int* k, const float* alpha, const float* A, cons
t blas_int* ldA, const float* beta, float* C, const blas_int* ldC);
void arma_fortran(arma_dsyrk)(const char* uplo, const char* transA, const
blas_int* n, const blas_int* k, const double* alpha, const double* A, cons
t blas_int* ldA, const double* beta, double* C, const blas_int* ldC);
void arma_fortran(arma_cherk)(const char* uplo, const char* transA, const
blas_int* n, const blas_int* k, const float* alpha, const void* A, cons
t blas_int* ldA, const float* beta, void* C, const blas_int* ldC);
void arma_fortran(arma_zherk)(const char* uplo, const char* transA, const
blas_int* n, const blas_int* k, const double* alpha, const void* A, cons
t blas_int* ldA, const double* beta, void* C, const blas_int* ldC);
// void arma_fortran(arma_dswap)(const blas_int* n, double* x, const bl as_int* incx, double* y, const blas_int* incy); // void arma_fortran(arma_dswap)(const blas_int* n, double* x, const bl as_int* incx, double* y, const blas_int* incy);
// void arma_fortran(arma_dscal)(const blas_int* n, const double* alpha , double* x, const blas_int* incx); // void arma_fortran(arma_dscal)(const blas_int* n, const double* alpha , double* x, const blas_int* incx);
// void arma_fortran(arma_dcopy)(const blas_int* n, const double* x, co nst blas_int* incx, double* y, const blas_int* incy); // void arma_fortran(arma_dcopy)(const blas_int* n, const double* x, co nst blas_int* incx, double* y, const blas_int* incy);
// void arma_fortran(arma_daxpy)(const blas_int* n, const double* alpha , const double* x, const blas_int* incx, double* y, const blas_int* incy); // void arma_fortran(arma_daxpy)(const blas_int* n, const double* alpha , const double* x, const blas_int* incx, double* y, const blas_int* incy);
// void arma_fortran(arma_dger )(const blas_int* m, const blas_int* n, const double* alpha, const double* x, const blas_int* incx, const double* y , const blas_int* incy, double* A, const blas_int* ldA); // void arma_fortran(arma_dger )(const blas_int* m, const blas_int* n, const double* alpha, const double* x, const blas_int* incx, const double* y , const blas_int* incy, double* A, const blas_int* ldA);
} }
#endif #endif
 End of changes. 4 change blocks. 
2 lines changed or deleted 28 lines changed or added


 blas_wrapper.hpp   blas_wrapper.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au) // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifdef ARMA_USE_BLAS #ifdef ARMA_USE_BLAS
//! \namespace blas namespace for BLAS functions //! \namespace blas namespace for BLAS functions
namespace blas namespace blas
{ {
skipping to change at line 82 skipping to change at line 82
if(is_supported_complex_double<eT>::value == true) if(is_supported_complex_double<eT>::value == true)
{ {
typedef std::complex<double> T; typedef std::complex<double> T;
arma_fortran(arma_zgemm)(transA, transB, m, n, k, (const T*)alpha, (c onst T*)A, ldA, (const T*)B, ldB, (const T*)beta, (T*)C, ldC); arma_fortran(arma_zgemm)(transA, transB, m, n, k, (const T*)alpha, (c onst T*)A, ldA, (const T*)B, ldB, (const T*)beta, (T*)C, ldC);
} }
} }
template<typename eT> template<typename eT>
inline inline
void
syrk(const char* uplo, const char* transA, const blas_int* n, const blas_
int* k, const eT* alpha, const eT* A, const blas_int* ldA, const eT* beta,
eT* C, const blas_int* ldC)
{
arma_type_check((is_supported_blas_type<eT>::value == false));
if(is_float<eT>::value == true)
{
typedef float T;
arma_fortran(arma_ssyrk)(uplo, transA, n, k, (const T*)alpha, (const
T*)A, ldA, (const T*)beta, (T*)C, ldC);
}
else
if(is_double<eT>::value == true)
{
typedef double T;
arma_fortran(arma_dsyrk)(uplo, transA, n, k, (const T*)alpha, (const
T*)A, ldA, (const T*)beta, (T*)C, ldC);
}
}
template<typename T>
inline
void
herk(const char* uplo, const char* transA, const blas_int* n, const blas_
int* k, const T* alpha, const std::complex<T>* A, const blas_int* ldA, cons
t T* beta, std::complex<T>* C, const blas_int* ldC)
{
arma_type_check((is_supported_blas_type<T>::value == false));
if(is_float<T>::value == true)
{
typedef float TT;
typedef std::complex<float> cx_TT;
arma_fortran(arma_cherk)(uplo, transA, n, k, (const TT*)alpha, (const
cx_TT*)A, ldA, (const TT*)beta, (cx_TT*)C, ldC);
}
else
if(is_double<T>::value == true)
{
typedef double TT;
typedef std::complex<double> cx_TT;
arma_fortran(arma_zherk)(uplo, transA, n, k, (const TT*)alpha, (const
cx_TT*)A, ldA, (const TT*)beta, (cx_TT*)C, ldC);
}
}
template<typename eT>
inline
eT eT
dot(const uword n_elem, const eT* x, const eT* y) dot(const uword n_elem, const eT* x, const eT* y)
{ {
arma_type_check((is_supported_blas_type<eT>::value == false)); arma_type_check((is_supported_blas_type<eT>::value == false));
if(is_float<eT>::value == true) if(is_float<eT>::value == true)
{ {
#if defined(ARMA_BLAS_SDOT_BUG) #if defined(ARMA_BLAS_SDOT_BUG)
{ {
if(n_elem == 0) { return eT(0); } if(n_elem == 0) { return eT(0); }
 End of changes. 2 change blocks. 
2 lines changed or deleted 54 lines changed or added


 cmath_wrap.hpp   cmath_wrap.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au) // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup cmath_wrap //! \addtogroup cmath_wrap
//! @{ //! @{
// //
// wrappers for isfinite // wrappers for isfinite
skipping to change at line 30 skipping to change at line 30
arma_ignore(val); arma_ignore(val);
return true; return true;
} }
template<> template<>
arma_inline arma_inline
bool bool
arma_isfinite(float x) arma_isfinite(float x)
{ {
#if defined(ARMA_HAVE_STD_ISFINITE) #if defined(ARMA_HAVE_STD_ISFINITE) || defined(ARMA_USE_CXX11)
{ {
return (std::isfinite(x) != 0); return (std::isfinite(x) != 0);
} }
#else #else
{ {
const bool x_is_inf = ( (x == x) && ((x - x) != float(0)) ); const bool x_is_inf = ( (x == x) && ((x - x) != float(0)) );
const bool x_is_nan = (x != x); const bool x_is_nan = (x != x);
return ( (x_is_inf == false) && (x_is_nan == false) ); return ( (x_is_inf == false) && (x_is_nan == false) );
} }
#endif #endif
} }
template<> template<>
arma_inline arma_inline
bool bool
arma_isfinite(double x) arma_isfinite(double x)
{ {
#if defined(ARMA_HAVE_STD_ISFINITE) #if defined(ARMA_HAVE_STD_ISFINITE) || defined(ARMA_USE_CXX11)
{ {
return (std::isfinite(x) != 0); return (std::isfinite(x) != 0);
} }
#else #else
{ {
const bool x_is_inf = ( (x == x) && ((x - x) != double(0)) ); const bool x_is_inf = ( (x == x) && ((x - x) != double(0)) );
const bool x_is_nan = (x != x); const bool x_is_nan = (x != x);
return ( (x_is_inf == false) && (x_is_nan == false) ); return ( (x_is_inf == false) && (x_is_nan == false) );
} }
skipping to change at line 82 skipping to change at line 82
else else
{ {
return true; return true;
} }
} }
// //
// wrappers for trigonometric functions // wrappers for trigonometric functions
// //
// Wherever possible, try to use TR1 versions of the functions below, // Wherever possible, try to use TR1 or C++11 versions of the functions bel ow,
// otherwise fall back to Boost Math. // otherwise fall back to Boost Math.
// //
// complex acos // complex acos
// complex asin // complex asin
// complex atan // complex atan
// //
// real acosh // real acosh
// real asinh // real asinh
// real atanh // real atanh
// //
skipping to change at line 108 skipping to change at line 108
// If TR1 not present and Boost math not present, // If TR1 not present and Boost math not present,
// we have our own rudimentary versions of: // we have our own rudimentary versions of:
// //
// real acosh // real acosh
// real asinh // real asinh
// real atanh // real atanh
#if defined(ARMA_USE_BOOST) #if defined(ARMA_USE_BOOST)
#define arma_boost_wrap(trig_fn, val) ( (boost::math::trig_fn)(val) ) #define arma_boost_wrap(trig_fn, val) ( (boost::math::trig_fn)(val) )
#else #else
#define arma_boost_wrap(trig_fn, val) ( arma_stop( #trig_fn "(): need Boo st libraries" ), val ) #define arma_boost_wrap(trig_fn, val) ( arma_stop( #trig_fn "(): need C++ 11 or Boost libraries" ), val )
#endif #endif
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_acos(const std::complex<T>& x) arma_acos(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::acos(x); return std::tr1::acos(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::acos(x);
}
#else #else
{ {
return arma_boost_wrap(acos, x); return arma_boost_wrap(acos, x);
} }
#endif #endif
} }
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_asin(const std::complex<T>& x) arma_asin(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::asin(x); return std::tr1::asin(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::asin(x);
}
#else #else
{ {
return arma_boost_wrap(asin, x); return arma_boost_wrap(asin, x);
} }
#endif #endif
} }
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_atan(const std::complex<T>& x) arma_atan(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::atan(x); return std::tr1::atan(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::atan(x);
}
#else #else
{ {
return arma_boost_wrap(atan, x); return arma_boost_wrap(atan, x);
} }
#endif #endif
} }
template<typename eT> template<typename eT>
arma_inline arma_inline
eT eT
arma_acosh(const eT x) arma_acosh(const eT x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::acosh(x); return std::tr1::acosh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::acosh(x);
}
#elif defined(ARMA_USE_BOOST) #elif defined(ARMA_USE_BOOST)
{ {
return boost::math::acosh(x); return boost::math::acosh(x);
} }
#else #else
{ {
if(x >= eT(1)) if(x >= eT(1))
{ {
// http://functions.wolfram.com/ElementaryFunctions/ArcCosh/02/ // http://functions.wolfram.com/ElementaryFunctions/ArcCosh/02/
return std::log( x + std::sqrt(x*x - eT(1)) ); return std::log( x + std::sqrt(x*x - eT(1)) );
skipping to change at line 203 skipping to change at line 219
template<typename eT> template<typename eT>
arma_inline arma_inline
eT eT
arma_asinh(const eT x) arma_asinh(const eT x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::asinh(x); return std::tr1::asinh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::asinh(x);
}
#elif defined(ARMA_USE_BOOST) #elif defined(ARMA_USE_BOOST)
{ {
return boost::math::asinh(x); return boost::math::asinh(x);
} }
#else #else
{ {
// http://functions.wolfram.com/ElementaryFunctions/ArcSinh/02/ // http://functions.wolfram.com/ElementaryFunctions/ArcSinh/02/
return std::log( x + std::sqrt(x*x + eT(1)) ); return std::log( x + std::sqrt(x*x + eT(1)) );
} }
#endif #endif
skipping to change at line 224 skipping to change at line 244
template<typename eT> template<typename eT>
arma_inline arma_inline
eT eT
arma_atanh(const eT x) arma_atanh(const eT x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::atanh(x); return std::tr1::atanh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::atanh(x);
}
#elif defined(ARMA_USE_BOOST) #elif defined(ARMA_USE_BOOST)
{ {
return boost::math::atanh(x); return boost::math::atanh(x);
} }
#else #else
{ {
if( (x >= eT(-1)) && (x <= eT(+1)) ) if( (x >= eT(-1)) && (x <= eT(+1)) )
{ {
// http://functions.wolfram.com/ElementaryFunctions/ArcTanh/02/ // http://functions.wolfram.com/ElementaryFunctions/ArcTanh/02/
return std::log( ( eT(1)+x ) / ( eT(1)-x ) ) / eT(2); return std::log( ( eT(1)+x ) / ( eT(1)-x ) ) / eT(2);
skipping to change at line 259 skipping to change at line 283
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_acosh(const std::complex<T>& x) arma_acosh(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::acosh(x); return std::tr1::acosh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::acosh(x);
}
#else #else
{ {
return arma_boost_wrap(acosh, x); return arma_boost_wrap(acosh, x);
} }
#endif #endif
} }
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_asinh(const std::complex<T>& x) arma_asinh(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::asinh(x); return std::tr1::asinh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::asinh(x);
}
#else #else
{ {
return arma_boost_wrap(asinh, x); return arma_boost_wrap(asinh, x);
} }
#endif #endif
} }
template<typename T> template<typename T>
arma_inline arma_inline
std::complex<T> std::complex<T>
arma_atanh(const std::complex<T>& x) arma_atanh(const std::complex<T>& x)
{ {
#if defined(ARMA_HAVE_STD_TR1) #if defined(ARMA_HAVE_STD_TR1)
{ {
return std::tr1::atanh(x); return std::tr1::atanh(x);
} }
#elif defined(ARMA_USE_CXX11)
{
return std::atanh(x);
}
#else #else
{ {
return arma_boost_wrap(atanh, x); return arma_boost_wrap(atanh, x);
} }
#endif #endif
} }
#undef arma_boost_wrap #undef arma_boost_wrap
//! @} //! @}
 End of changes. 14 change blocks. 
6 lines changed or deleted 42 lines changed or added


 compiler_setup.hpp   compiler_setup.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#define arma_hot #define arma_hot
#define arma_cold #define arma_cold
#define arma_pure #define arma_pure
#define arma_const #define arma_const
#define arma_aligned #define arma_aligned
skipping to change at line 68 skipping to change at line 68
#define ARMA_USE_U64S64 #define ARMA_USE_U64S64
#endif #endif
#endif #endif
#if defined(ARMA_64BIT_WORD) #if defined(ARMA_64BIT_WORD)
#if !defined(ARMA_USE_U64S64) #if !defined(ARMA_USE_U64S64)
#define ARMA_USE_U64S64 #define ARMA_USE_U64S64
#endif #endif
#endif #endif
#if defined (__GNUG__)
#define ARMA_FNSIG __PRETTY_FUNCTION__
#elif defined (_MSC_VER)
#define ARMA_FNSIG __FUNCSIG__
#elif defined(__INTEL_COMPILER)
#define ARMA_FNSIG __FUNCTION__
#elif defined(ARMA_USE_CXX11)
#define ARMA_FNSIG __func__
#else
#define ARMA_FNSIG "(unknown)"
#endif
#if defined(__INTEL_COMPILER) #if defined(__INTEL_COMPILER)
#if (__INTEL_COMPILER < 1000) #if (__INTEL_COMPILER < 1000)
#error "*** Need a newer compiler ***" #error "*** Need a newer compiler ***"
#endif #endif
#if (__INTEL_COMPILER <= 1110) #if (__INTEL_COMPILER <= 1110)
#undef ARMA_HAVE_STD_ISFINITE #undef ARMA_HAVE_STD_ISFINITE
#endif #endif
 End of changes. 3 change blocks. 
1 lines changed or deleted 13 lines changed or added


 compiler_setup_post.hpp   compiler_setup_post.hpp 
// Copyright (C) 2013 NICTA (www.nicta.com.au)
// Copyright (C) 2013 Conrad Sanderson // Copyright (C) 2013 Conrad Sanderson
// Copyright (C) 2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#if defined(_MSC_VER) #if defined(_MSC_VER)
#pragma warning(pop) #pragma warning(pop)
#endif #endif
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 config.hpp   config.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#if !defined(ARMA_USE_LAPACK) #if !defined(ARMA_USE_LAPACK)
#define ARMA_USE_LAPACK #define ARMA_USE_LAPACK
//// Uncomment the above line if you have LAPACK or a high-speed replacemen t for LAPACK, //// Uncomment the above line if you have LAPACK or a high-speed replacemen t for LAPACK,
//// such as Intel MKL, AMD ACML, or the Accelerate framework. //// such as Intel MKL, AMD ACML, or the Accelerate framework.
//// LAPACK is required for matrix decompositions (eg. SVD) and matrix inve rse. //// LAPACK is required for matrix decompositions (eg. SVD) and matrix inve rse.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 constants.hpp   constants.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup constants //! \addtogroup constants
//! @{ //! @{
namespace priv namespace priv
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 constants_compat.hpp   constants_compat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup constants_compat //! \addtogroup constants_compat
//! @{ //! @{
// the Math and Phy classes are kept for compatibility with old code; // the Math and Phy classes are kept for compatibility with old code;
// for new code, use the Datum class instead // for new code, use the Datum class instead
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 debug.hpp   debug.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup debug //! \addtogroup debug
//! @{ //! @{
template<typename T> template<typename T>
skipping to change at line 960 skipping to change at line 960
{ {
if(A.n_cols != B.n_rows) if(A.n_cols != B.n_rows)
{ {
arma_stop( arma_incompat_size_string(A.n_rows, A.n_cols, B.n_rows, B.n_ cols, x) ); arma_stop( arma_incompat_size_string(A.n_rows, A.n_cols, B.n_rows, B.n_ cols, x) );
} }
} }
// //
// macros // macros
#define ARMA_STRING1(x) #x // #define ARMA_STRING1(x) #x
#define ARMA_STRING2(x) ARMA_STRING1(x) // #define ARMA_STRING2(x) ARMA_STRING1(x)
#define ARMA_FILELINE __FILE__ ": " ARMA_STRING2(__LINE__) // #define ARMA_FILELINE __FILE__ ": " ARMA_STRING2(__LINE__)
#if defined (__GNUG__)
#define ARMA_FNSIG __PRETTY_FUNCTION__
#elif defined (_MSC_VER)
#define ARMA_FNSIG __FUNCSIG__
#elif defined (ARMA_USE_BOOST)
#define ARMA_FNSIG BOOST_CURRENT_FUNCTION
#elif defined (ARMA_USE_CXX11)
#define ARMA_FNSIG __func__
#else
#define ARMA_FNSIG "(unknown)"
#endif
#if !defined(ARMA_NO_DEBUG) && !defined(NDEBUG) #if !defined(ARMA_NO_DEBUG) && !defined(NDEBUG)
#define arma_debug_print arma_print #define arma_debug_print arma_print
#define arma_debug_warn arma_warn #define arma_debug_warn arma_warn
#define arma_debug_check arma_check #define arma_debug_check arma_check
#define arma_debug_set_error arma_set_error #define arma_debug_set_error arma_set_error
#define arma_debug_assert_same_size arma_assert_same_size #define arma_debug_assert_same_size arma_assert_same_size
#define arma_debug_assert_mul_size arma_assert_mul_size #define arma_debug_assert_mul_size arma_assert_mul_size
#define arma_debug_assert_trans_mul_size arma_assert_trans_mul_size #define arma_debug_assert_trans_mul_size arma_assert_trans_mul_size
 End of changes. 3 change blocks. 
16 lines changed or deleted 4 lines changed or added


 eGlueCube_bones.hpp   eGlueCube_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eGlueCube //! \addtogroup eGlueCube
//! @{ //! @{
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
class eGlueCube : public BaseCube<typename T1::elem_type, eGlueCube<T1, T2, eglue_type> > class eGlueCube : public BaseCube<typename T1::elem_type, eGlueCube<T1, T2, eglue_type> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eGlueCube_meat.hpp   eGlueCube_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eGlueCube //! \addtogroup eGlueCube
//! @{ //! @{
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
skipping to change at line 83 skipping to change at line 83
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlueCube<T1,T2,eglue_type>::operator[] (const uword i) const eGlueCube<T1,T2,eglue_type>::operator[] (const uword i) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1[i] + P2[i
[i] + P2[i]; } ]; }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1[i] - P2[i
[i] - P2[i]; } ]; }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1[i] / P2[i
[i] / P2[i]; } ]; }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1[i] * P2[i
[i] * P2[i]; } ]; }
else return eT(0); else return eT(0);
} }
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlueCube<T1,T2,eglue_type>::at(const uword row, const uword col, const uwo rd slice) const eGlueCube<T1,T2,eglue_type>::at(const uword row, const uword col, const uwo rd slice) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1.at(row,co
.at(row,col,slice) + P2.at(row,col,slice); } l,slice) + P2.at(row,col,slice); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1.at(row,co
.at(row,col,slice) - P2.at(row,col,slice); } l,slice) - P2.at(row,col,slice); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1.at(row,co
.at(row,col,slice) / P2.at(row,col,slice); } l,slice) / P2.at(row,col,slice); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1.at(row,co
.at(row,col,slice) * P2.at(row,col,slice); } l,slice) * P2.at(row,col,slice); }
else return eT(0); else return eT(0);
} }
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlueCube<T1,T2,eglue_type>::at_alt(const uword i) const eGlueCube<T1,T2,eglue_type>::at_alt(const uword i) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1.at_alt(i)
.at_alt(i) + P2.at_alt(i); } + P2.at_alt(i); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1.at_alt(i)
.at_alt(i) - P2.at_alt(i); } - P2.at_alt(i); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1.at_alt(i)
.at_alt(i) / P2.at_alt(i); } / P2.at_alt(i); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1.at_alt(i)
.at_alt(i) * P2.at_alt(i); } * P2.at_alt(i); }
else return eT(0); else return eT(0);
} }
//! @} //! @}
 End of changes. 5 change blocks. 
25 lines changed or deleted 25 lines changed or added


 eGlue_bones.hpp   eGlue_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eGlue //! \addtogroup eGlue
//! @{ //! @{
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
class eGlue : public Base<typename T1::elem_type, eGlue<T1, T2, eglue_type> > class eGlue : public Base<typename T1::elem_type, eGlue<T1, T2, eglue_type> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eGlue_meat.hpp   eGlue_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eGlue //! \addtogroup eGlue
//! @{ //! @{
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
skipping to change at line 68 skipping to change at line 68
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlue<T1,T2,eglue_type>::operator[] (const uword ii) const eGlue<T1,T2,eglue_type>::operator[] (const uword ii) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1[ii] + P2[
[ii] + P2[ii]; } ii]; }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1[ii] - P2[
[ii] - P2[ii]; } ii]; }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1[ii] / P2[
[ii] / P2[ii]; } ii]; }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1[ii] * P2[
[ii] * P2[ii]; } ii]; }
else return eT(0); else return eT(0);
} }
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlue<T1,T2,eglue_type>::at(const uword row, const uword col) const eGlue<T1,T2,eglue_type>::at(const uword row, const uword col) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1.at(row,co
.at(row,col) + P2.at(row,col); } l) + P2.at(row,col); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1.at(row,co
.at(row,col) - P2.at(row,col); } l) - P2.at(row,col); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1.at(row,co
.at(row,col) / P2.at(row,col); } l) / P2.at(row,col); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1.at(row,co
.at(row,col) * P2.at(row,col); } l) * P2.at(row,col); }
else return eT(0); else return eT(0);
} }
template<typename T1, typename T2, typename eglue_type> template<typename T1, typename T2, typename eglue_type>
arma_inline arma_inline
typename T1::elem_type typename T1::elem_type
eGlue<T1,T2,eglue_type>::at_alt(const uword ii) const eGlue<T1,T2,eglue_type>::at_alt(const uword ii) const
{ {
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
if(is_same_type<eglue_type, eglue_plus >::value == true) { return P1 if(is_same_type<eglue_type, eglue_plus >::yes) { return P1.at_alt(ii
.at_alt(ii) + P2.at_alt(ii); } ) + P2.at_alt(ii); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_minus>::yes) { return P1.at_alt(ii
.at_alt(ii) - P2.at_alt(ii); } ) - P2.at_alt(ii); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return P1 else if(is_same_type<eglue_type, eglue_div >::yes) { return P1.at_alt(ii
.at_alt(ii) / P2.at_alt(ii); } ) / P2.at_alt(ii); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return P1 else if(is_same_type<eglue_type, eglue_schur>::yes) { return P1.at_alt(ii
.at_alt(ii) * P2.at_alt(ii); } ) * P2.at_alt(ii); }
else return eT(0); else return eT(0);
} }
//! @} //! @}
 End of changes. 5 change blocks. 
25 lines changed or deleted 25 lines changed or added


 eOpCube_bones.hpp   eOpCube_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eOpCube //! \addtogroup eOpCube
//! @{ //! @{
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
class eOpCube : public BaseCube<typename T1::elem_type, eOpCube<T1, eop_typ e> > class eOpCube : public BaseCube<typename T1::elem_type, eOpCube<T1, eop_typ e> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eOpCube_meat.hpp   eOpCube_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eOpCube //! \addtogroup eOpCube
//! @{ //! @{
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
eOpCube<T1, eop_type>::eOpCube(const BaseCube<typename T1::elem_type, T1>& in_m) eOpCube<T1, eop_type>::eOpCube(const BaseCube<typename T1::elem_type, T1>& in_m)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eOp_bones.hpp   eOp_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eOp //! \addtogroup eOp
//! @{ //! @{
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
class eOp : public Base<typename T1::elem_type, eOp<T1, eop_type> > class eOp : public Base<typename T1::elem_type, eOp<T1, eop_type> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eOp_meat.hpp   eOp_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eOp //! \addtogroup eOp
//! @{ //! @{
template<typename T1, typename eop_type> template<typename T1, typename eop_type>
eOp<T1, eop_type>::eOp(const T1& in_m) eOp<T1, eop_type>::eOp(const T1& in_m)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eglue_core_bones.hpp   eglue_core_bones.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eglue_core //! \addtogroup eglue_core
//! @{ //! @{
template<typename eglue_type> template<typename eglue_type>
struct eglue_core struct eglue_core
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eglue_core_meat.hpp   eglue_core_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eglue_core //! \addtogroup eglue_core
//! @{ //! @{
#undef arma_applier_1u #undef arma_applier_1u
#undef arma_applier_1a #undef arma_applier_1a
skipping to change at line 173 skipping to change at line 173
//if( memory::is_aligned(out_mem) ) //if( memory::is_aligned(out_mem) )
if( memory::is_aligned(out_mem) && ((Proxy<T1>::is_fixed && Proxy<T2>:: is_fixed) ? (x.get_n_elem() >= 32) : true) ) if( memory::is_aligned(out_mem) && ((Proxy<T1>::is_fixed && Proxy<T2>:: is_fixed) ? (x.get_n_elem() >= 32) : true) )
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(=, +); } 1a(=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(=, -); } 1a(=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(=, /); } 1a(=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(=, *); } 1a(=, *); }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(=, +); } 1u(=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(=, -); } 1u(=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(=, /); } 1u(=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(=, *); } 1u(=, *); }
} }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(=, +); } (=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(=, -); } (=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(=, /); } (=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(=, *); } (=, *); }
} }
} }
else else
{ {
const uword n_rows = x.get_n_rows(); const uword n_rows = x.get_n_rows();
const uword n_cols = x.get_n_cols(); const uword n_cols = x.get_n_cols();
const Proxy<T1>& P1 = x.P1; const Proxy<T1>& P1 = x.P1;
const Proxy<T2>& P2 = x.P2; const Proxy<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_2(=,
plier_2(=, +); } +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_2(=,
plier_2(=, -); } -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_2(=,
plier_2(=, /); } /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_2(=,
plier_2(=, *); } *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_plus(Mat<typename T1::elem_type>& out , const eGlue<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_plus(Mat<typename T1::elem_type>& out , const eGlue<T1, T2, eglue_type>& x)
{ {
skipping to change at line 248 skipping to change at line 248
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(+=, +); } 1a(+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(+=, -); } 1a(+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(+=, /); } 1a(+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(+=, *); } 1a(+=, *); }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(+=, +); } 1u(+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(+=, -); } 1u(+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(+=, /); } 1u(+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(+=, *); } 1u(+=, *); }
} }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(+=, +); } (+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(+=, -); } (+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(+=, /); } (+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(+=, *); } (+=, *); }
} }
} }
else else
{ {
const Proxy<T1>& P1 = x.P1; const Proxy<T1>& P1 = x.P1;
const Proxy<T2>& P2 = x.P2; const Proxy<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_2(+=
plier_2(+=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_2(+=
plier_2(+=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_2(+=
plier_2(+=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_2(+=
plier_2(+=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_minus(Mat<typename T1::elem_type>& ou t, const eGlue<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_minus(Mat<typename T1::elem_type>& ou t, const eGlue<T1, T2, eglue_type>& x)
{ {
skipping to change at line 320 skipping to change at line 320
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(-=, +); } 1a(-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(-=, -); } 1a(-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(-=, /); } 1a(-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(-=, *); } 1a(-=, *); }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(-=, +); } 1u(-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(-=, -); } 1u(-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(-=, /); } 1u(-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(-=, *); } 1u(-=, *); }
} }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(-=, +); } (-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(-=, -); } (-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(-=, /); } (-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(-=, *); } (-=, *); }
} }
} }
else else
{ {
const Proxy<T1>& P1 = x.P1; const Proxy<T1>& P1 = x.P1;
const Proxy<T2>& P2 = x.P2; const Proxy<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_2(-=
plier_2(-=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_2(-=
plier_2(-=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_2(-=
plier_2(-=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_2(-=
plier_2(-=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_schur(Mat<typename T1::elem_type>& ou t, const eGlue<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_schur(Mat<typename T1::elem_type>& ou t, const eGlue<T1, T2, eglue_type>& x)
{ {
skipping to change at line 392 skipping to change at line 392
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(*=, +); } 1a(*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(*=, -); } 1a(*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(*=, /); } 1a(*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(*=, *); } 1a(*=, *); }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(*=, +); } 1u(*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(*=, -); } 1u(*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(*=, /); } 1u(*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(*=, *); } 1u(*=, *); }
} }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(*=, +); } (*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(*=, -); } (*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(*=, /); } (*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(*=, *); } (*=, *); }
} }
} }
else else
{ {
const Proxy<T1>& P1 = x.P1; const Proxy<T1>& P1 = x.P1;
const Proxy<T2>& P2 = x.P2; const Proxy<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_2(*=
plier_2(*=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_2(*=
plier_2(*=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_2(*=
plier_2(*=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_2(*=
plier_2(*=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_div(Mat<typename T1::elem_type>& out, const eGlue<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_div(Mat<typename T1::elem_type>& out, const eGlue<T1, T2, eglue_type>& x)
{ {
skipping to change at line 464 skipping to change at line 464
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename Proxy<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename Proxy<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(/=, +); } 1a(/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(/=, -); } 1a(/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(/=, /); } 1a(/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(/=, *); } 1a(/=, *); }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(/=, +); } 1u(/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(/=, -); } 1u(/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(/=, /); } 1u(/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(/=, *); } 1u(/=, *); }
} }
} }
else else
{ {
typename Proxy<T1>::ea_type P1 = x.P1.get_ea(); typename Proxy<T1>::ea_type P1 = x.P1.get_ea();
typename Proxy<T2>::ea_type P2 = x.P2.get_ea(); typename Proxy<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(/=, +); } (/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(/=, -); } (/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(/=, /); } (/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(/=, *); } (/=, *); }
} }
} }
else else
{ {
const Proxy<T1>& P1 = x.P1; const Proxy<T1>& P1 = x.P1;
const Proxy<T2>& P2 = x.P2; const Proxy<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_2(/=
plier_2(/=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_2(/=
plier_2(/=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_2(/=
plier_2(/=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_2(/=
plier_2(/=, *); } , *); }
} }
} }
// //
// cubes // cubes
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
skipping to change at line 537 skipping to change at line 537
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(=, +); } 1a(=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(=, -); } 1a(=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(=, /); } 1a(=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(=, *); } 1a(=, *); }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(=, +); } 1u(=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(=, -); } 1u(=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(=, /); } 1u(=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(=, *); } 1u(=, *); }
} }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(=, +); } (=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(=, -); } (=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(=, /); } (=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(=, *); } (=, *); }
} }
} }
else else
{ {
const uword n_rows = x.get_n_rows(); const uword n_rows = x.get_n_rows();
const uword n_cols = x.get_n_cols(); const uword n_cols = x.get_n_cols();
const uword n_slices = x.get_n_slices(); const uword n_slices = x.get_n_slices();
const ProxyCube<T1>& P1 = x.P1; const ProxyCube<T1>& P1 = x.P1;
const ProxyCube<T2>& P2 = x.P2; const ProxyCube<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_3(=,
plier_3(=, +); } +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_3(=,
plier_3(=, -); } -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_3(=,
plier_3(=, /); } /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_3(=,
plier_3(=, *); } *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_plus(Cube<typename T1::elem_type>& ou t, const eGlueCube<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_plus(Cube<typename T1::elem_type>& ou t, const eGlueCube<T1, T2, eglue_type>& x)
{ {
skipping to change at line 614 skipping to change at line 614
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(+=, +); } 1a(+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(+=, -); } 1a(+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(+=, /); } 1a(+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(+=, *); } 1a(+=, *); }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(+=, +); } 1u(+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(+=, -); } 1u(+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(+=, /); } 1u(+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(+=, *); } 1u(+=, *); }
} }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(+=, +); } (+=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(+=, -); } (+=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(+=, /); } (+=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(+=, *); } (+=, *); }
} }
} }
else else
{ {
const ProxyCube<T1>& P1 = x.P1; const ProxyCube<T1>& P1 = x.P1;
const ProxyCube<T2>& P2 = x.P2; const ProxyCube<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_3(+=
plier_3(+=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_3(+=
plier_3(+=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_3(+=
plier_3(+=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_3(+=
plier_3(+=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_minus(Cube<typename T1::elem_type>& o ut, const eGlueCube<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_minus(Cube<typename T1::elem_type>& o ut, const eGlueCube<T1, T2, eglue_type>& x)
{ {
skipping to change at line 687 skipping to change at line 687
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(-=, +); } 1a(-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(-=, -); } 1a(-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(-=, /); } 1a(-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(-=, *); } 1a(-=, *); }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(-=, +); } 1u(-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(-=, -); } 1u(-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(-=, /); } 1u(-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(-=, *); } 1u(-=, *); }
} }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(-=, +); } (-=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(-=, -); } (-=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(-=, /); } (-=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(-=, *); } (-=, *); }
} }
} }
else else
{ {
const ProxyCube<T1>& P1 = x.P1; const ProxyCube<T1>& P1 = x.P1;
const ProxyCube<T2>& P2 = x.P2; const ProxyCube<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_3(-=
plier_3(-=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_3(-=
plier_3(-=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_3(-=
plier_3(-=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_3(-=
plier_3(-=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_schur(Cube<typename T1::elem_type>& o ut, const eGlueCube<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_schur(Cube<typename T1::elem_type>& o ut, const eGlueCube<T1, T2, eglue_type>& x)
{ {
skipping to change at line 760 skipping to change at line 760
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(*=, +); } 1a(*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(*=, -); } 1a(*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(*=, /); } 1a(*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(*=, *); } 1a(*=, *); }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(*=, +); } 1u(*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(*=, -); } 1u(*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(*=, /); } 1u(*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(*=, *); } 1u(*=, *); }
} }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(*=, +); } (*=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(*=, -); } (*=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(*=, /); } (*=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(*=, *); } (*=, *); }
} }
} }
else else
{ {
const ProxyCube<T1>& P1 = x.P1; const ProxyCube<T1>& P1 = x.P1;
const ProxyCube<T2>& P2 = x.P2; const ProxyCube<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_3(*=
plier_3(*=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_3(*=
plier_3(*=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_3(*=
plier_3(*=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_3(*=
plier_3(*=, *); } , *); }
} }
} }
template<typename eglue_type> template<typename eglue_type>
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
eglue_core<eglue_type>::apply_inplace_div(Cube<typename T1::elem_type>& out , const eGlueCube<T1, T2, eglue_type>& x) eglue_core<eglue_type>::apply_inplace_div(Cube<typename T1::elem_type>& out , const eGlueCube<T1, T2, eglue_type>& x)
{ {
skipping to change at line 833 skipping to change at line 833
if(memory::is_aligned(out_mem)) if(memory::is_aligned(out_mem))
{ {
memory::mark_as_aligned(out_mem); memory::mark_as_aligned(out_mem);
if(x.P1.is_aligned() && x.P2.is_aligned()) if(x.P1.is_aligned() && x.P2.is_aligned())
{ {
typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea(); typename ProxyCube<T1>::aligned_ea_type P1 = x.P1.get_aligned_ea();
typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea(); typename ProxyCube<T2>::aligned_ea_type P2 = x.P2.get_aligned_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1a(/=, +); } 1a(/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1a(/=, -); } 1a(/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1a(/=, /); } 1a(/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1a(/=, *); } 1a(/=, *); }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arm if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_
a_applier_1u(/=, +); } 1u(/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arm else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_
a_applier_1u(/=, -); } 1u(/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arm else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_
a_applier_1u(/=, /); } 1u(/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arm else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_
a_applier_1u(/=, *); } 1u(/=, *); }
} }
} }
else else
{ {
typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea(); typename ProxyCube<T1>::ea_type P1 = x.P1.get_ea();
typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea(); typename ProxyCube<T2>::ea_type P2 = x.P2.get_ea();
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_1u
applier_1u(/=, +); } (/=, +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_1u
applier_1u(/=, -); } (/=, -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_1u
applier_1u(/=, /); } (/=, /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_1u
applier_1u(/=, *); } (/=, *); }
} }
} }
else else
{ {
const ProxyCube<T1>& P1 = x.P1; const ProxyCube<T1>& P1 = x.P1;
const ProxyCube<T2>& P2 = x.P2; const ProxyCube<T2>& P2 = x.P2;
if(is_same_type<eglue_type, eglue_plus >::value == true) { arma_ap if(is_same_type<eglue_type, eglue_plus >::yes) { arma_applier_3(/=
plier_3(/=, +); } , +); }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_minus>::yes) { arma_applier_3(/=
plier_3(/=, -); } , -); }
else if(is_same_type<eglue_type, eglue_div >::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_div >::yes) { arma_applier_3(/=
plier_3(/=, /); } , /); }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { arma_ap else if(is_same_type<eglue_type, eglue_schur>::yes) { arma_applier_3(/=
plier_3(/=, *); } , *); }
} }
} }
#undef arma_applier_1u #undef arma_applier_1u
#undef arma_applier_1a #undef arma_applier_1a
#undef arma_applier_2 #undef arma_applier_2
#undef arma_applier_3 #undef arma_applier_3
//! @} //! @}
 End of changes. 42 change blocks. 
321 lines changed or deleted 321 lines changed or added


 eop_aux.hpp   eop_aux.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eop_aux //! \addtogroup eop_aux
//! @{ //! @{
template<typename eT> template<typename eT>
struct eop_aux_randu struct eop_aux_randu
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eop_core_bones.hpp   eop_core_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eop_core //! \addtogroup eop_core
//! @{ //! @{
template<typename eop_type> template<typename eop_type>
class eop_core class eop_core
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 eop_core_meat.hpp   eop_core_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup eop_core //! \addtogroup eop_core
//! @{ //! @{
#undef arma_applier_1u #undef arma_applier_1u
#undef arma_applier_1a #undef arma_applier_1a
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 field_bones.hpp   field_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Ian Cullinan // Copyright (C) 2009-2010 Ian Cullinan
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup field //! \addtogroup field
//! @{ //! @{
struct field_prealloc_n_elem struct field_prealloc_n_elem
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 field_meat.hpp   field_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Ian Cullinan // Copyright (C) 2009-2010 Ian Cullinan
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup field //! \addtogroup field
//! @{ //! @{
template<typename oT> template<typename oT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_accu.hpp   fn_accu.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_accu //! \addtogroup fn_accu
//! @{ //! @{
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_as_scalar.hpp   fn_as_scalar.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_as_scalar //! \addtogroup fn_as_scalar
//! @{ //! @{
template<uword N> template<uword N>
struct as_scalar_redirect struct as_scalar_redirect
skipping to change at line 61 skipping to change at line 61
typename T1::elem_type typename T1::elem_type
as_scalar_redirect<2>::apply(const Glue<T1, T2, glue_times>& X) as_scalar_redirect<2>::apply(const Glue<T1, T2, glue_times>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
// T1 must result in a matrix with one row // T1 must result in a matrix with one row
// T2 must result in a matrix with one column // T2 must result in a matrix with one column
const bool has_all_mat = is_Mat<T1>::value && is_Mat<T const bool has_all_mat = (is_Mat<T1>::value || is_Mat_trans<T1>::v
2>::value; alue) && (is_Mat<T2>::value || is_Mat_trans<T2>::value);
const bool prefer_at_accessor = Proxy<T1>::prefer_at_accessor || Proxy<T2 const bool prefer_at_accessor = Proxy<T1>::prefer_at_accessor
>::prefer_at_accessor; || Proxy<T2>::prefer_at_accessor;
const bool do_partial_unwrap = has_all_mat || prefer_at_accessor; const bool do_partial_unwrap = has_all_mat || prefer_at_accessor;
if(do_partial_unwrap == true) if(do_partial_unwrap == true)
{ {
const partial_unwrap<T1> tmp1(X.A); const partial_unwrap<T1> tmp1(X.A);
const partial_unwrap<T2> tmp2(X.B); const partial_unwrap<T2> tmp2(X.B);
typedef typename partial_unwrap<T1>::stored_type TA; typedef typename partial_unwrap<T1>::stored_type TA;
typedef typename partial_unwrap<T2>::stored_type TB; typedef typename partial_unwrap<T2>::stored_type TB;
skipping to change at line 339 skipping to change at line 339
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
const eT a = as_scalar(X.P1.Q); const eT a = as_scalar(X.P1.Q);
const eT b = as_scalar(X.P2.Q); const eT b = as_scalar(X.P2.Q);
// the optimiser will keep only one return statement // the optimiser will keep only one return statement
if(is_same_type<eglue_type, eglue_plus >::value == true) { return a if(is_same_type<eglue_type, eglue_plus >::yes) { return a + b; }
+ b; } else if(is_same_type<eglue_type, eglue_minus>::yes) { return a - b; }
else if(is_same_type<eglue_type, eglue_minus>::value == true) { return a else if(is_same_type<eglue_type, eglue_div >::yes) { return a / b; }
- b; } else if(is_same_type<eglue_type, eglue_schur>::yes) { return a * b; }
else if(is_same_type<eglue_type, eglue_div >::value == true) { return a
/ b; }
else if(is_same_type<eglue_type, eglue_schur>::value == true) { return a
* b; }
} }
template<typename T1> template<typename T1>
inline inline
arma_warn_unused arma_warn_unused
typename T1::elem_type typename T1::elem_type
as_scalar(const BaseCube<typename T1::elem_type,T1>& X) as_scalar(const BaseCube<typename T1::elem_type,T1>& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 4 change blocks. 
13 lines changed or deleted 9 lines changed or added


 fn_chol.hpp   fn_chol.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_chol //! \addtogroup fn_chol
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_conv.hpp   fn_conv.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_conv //! \addtogroup fn_conv
//! @{ //! @{
//! Convolution, which is also equivalent to polynomial multiplication and FIR digital filtering. //! Convolution, which is also equivalent to polynomial multiplication and FIR digital filtering.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_conv_to.hpp   fn_conv_to.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_conv_to //! \addtogroup fn_conv_to
//! @{ //! @{
//! conversion from Armadillo Base and BaseCube objects to scalars //! conversion from Armadillo Base and BaseCube objects to scalars
//! (kept only for compatibility with old code; use as_scalar() instead for Base objects like Mat) //! (kept only for compatibility with old code; use as_scalar() instead for Base objects like Mat)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_cor.hpp   fn_cor.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_cor //! \addtogroup fn_cor
//! @{ //! @{
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_cov.hpp   fn_cov.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_cov //! \addtogroup fn_cov
//! @{ //! @{
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_cross.hpp   fn_cross.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_cross //! \addtogroup fn_cross
//! @{ //! @{
//! cross product (only valid for 3 dimensional vectors) //! cross product (only valid for 3 dimensional vectors)
template<typename T1, typename T2> template<typename T1, typename T2>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_cumsum.hpp   fn_cumsum.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_cumsum //! \addtogroup fn_cumsum
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_det.hpp   fn_det.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_det //! \addtogroup fn_det
//! @{ //! @{
//! determinant of mat //! determinant of mat
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_diagmat.hpp   fn_diagmat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_diagmat //! \addtogroup fn_diagmat
//! @{ //! @{
//! interpret a matrix or a vector as a diagonal matrix (i.e. off-diagonal entries are zero) //! interpret a matrix or a vector as a diagonal matrix (i.e. off-diagonal entries are zero)
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_diagvec.hpp   fn_diagvec.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_diagvec //! \addtogroup fn_diagvec
//! @{ //! @{
//! extract a diagonal from a matrix //! extract a diagonal from a matrix
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_dot.hpp   fn_dot.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_dot //! \addtogroup fn_dot
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_eig.hpp   fn_eig.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009 Edmund Highcock // Copyright (C) 2009 Edmund Highcock
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_eig //! \addtogroup fn_eig
//! @{ //! @{
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_elem.hpp   fn_elem.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_elem //! \addtogroup fn_elem
//! @{ //! @{
// //
// find // find
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_eps.hpp   fn_eps.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_eps //! \addtogroup fn_eps
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_eye.hpp   fn_eye.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_eye //! \addtogroup fn_eye
//! @{ //! @{
arma_inline arma_inline
const Gen<mat, gen_ones_diag> const Gen<mat, gen_ones_diag>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_flip.hpp   fn_flip.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_flip //! \addtogroup fn_flip
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_hist.hpp   fn_hist.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
template<typename T1> template<typename T1>
inline inline
const mtOp<uword,T1,op_hist> const mtOp<uword,T1,op_hist>
hist hist
( (
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_histc.hpp   fn_histc.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Boris Sabanin // Copyright (C) 2012 Boris Sabanin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
const mtGlue<uword,T1,T2,glue_histc> const mtGlue<uword,T1,T2,glue_histc>
histc histc
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_inv.hpp   fn_inv.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_inv //! \addtogroup fn_inv
//! @{ //! @{
//! delayed matrix inverse (general matrices) //! delayed matrix inverse (general matrices)
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_join.hpp   fn_join.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_join //! \addtogroup fn_join
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_kron.hpp   fn_kron.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_kron //! \addtogroup fn_kron
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_log_det.hpp   fn_log_det.hpp 
// Copyright (C) 2010-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2011 Conrad Sanderson // Copyright (C) 2010-2011 Conrad Sanderson
// Copyright (C) 2010-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_log_det //! \addtogroup fn_log_det
//! @{ //! @{
//! log determinant of mat //! log determinant of mat
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_lu.hpp   fn_lu.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_lu //! \addtogroup fn_lu
//! @{ //! @{
//! immediate lower upper decomposition, permutation info is embedded into L (similar to Matlab/Octave) //! immediate lower upper decomposition, permutation info is embedded into L (similar to Matlab/Octave)
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_max.hpp   fn_max.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_max //! \addtogroup fn_max
//! @{ //! @{
//! \brief //! \brief
//! Delayed 'maximum values' operation. //! Delayed 'maximum values' operation.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_mean.hpp   fn_mean.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_mean //! \addtogroup fn_mean
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_median.hpp   fn_median.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_median //! \addtogroup fn_median
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_min.hpp   fn_min.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_min //! \addtogroup fn_min
//! @{ //! @{
//! \brief //! \brief
//! Delayed 'minimum values' operation. //! Delayed 'minimum values' operation.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_misc.hpp   fn_misc.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_misc //! \addtogroup fn_misc
//! @{ //! @{
//! \brief //! \brief
//! Generate a vector with 'num' elements. //! Generate a vector with 'num' elements.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_norm.hpp   fn_norm.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_norm //! \addtogroup fn_norm
//! @{ //! @{
template<typename T1> template<typename T1>
arma_hot arma_hot
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_ones.hpp   fn_ones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_ones //! \addtogroup fn_ones
//! @{ //! @{
arma_inline arma_inline
const Gen<vec, gen_ones_full> const Gen<vec, gen_ones_full>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_pinv.hpp   fn_pinv.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_pinv //! \addtogroup fn_pinv
//! @{ //! @{
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_princomp.hpp   fn_princomp.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Dimitrios Bouzas // Copyright (C) 2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_princomp //! \addtogroup fn_princomp
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_prod.hpp   fn_prod.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_prod //! \addtogroup fn_prod
//! @{ //! @{
//! \brief //! \brief
//! Delayed product of elements of a matrix along a specified dimension (ei ther rows or columns). //! Delayed product of elements of a matrix along a specified dimension (ei ther rows or columns).
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_qr.hpp   fn_qr.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_qr //! \addtogroup fn_qr
//! @{ //! @{
//! QR decomposition //! QR decomposition
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_randn.hpp   fn_randn.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_randn //! \addtogroup fn_randn
//! @{ //! @{
inline inline
double double
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_randu.hpp   fn_randu.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_randu //! \addtogroup fn_randu
//! @{ //! @{
inline inline
double double
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_rank.hpp   fn_rank.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_rank //! \addtogroup fn_rank
//! @{ //! @{
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_repmat.hpp   fn_repmat.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_repmat //! \addtogroup fn_repmat
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_reshape.hpp   fn_reshape.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_reshape //! \addtogroup fn_reshape
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_resize.hpp   fn_resize.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_resize //! \addtogroup fn_resize
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_shuffle.hpp   fn_shuffle.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_shuffle //! \addtogroup fn_shuffle
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_solve.hpp   fn_solve.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_solve //! \addtogroup fn_solve
//! @{ //! @{
//! Solve a system of linear equations, i.e., A*X = B, where X is unknown. //! Solve a system of linear equations, i.e., A*X = B, where X is unknown.
//! For a square matrix A, this function is conceptually the same as X = in v(A)*B, //! For a square matrix A, this function is conceptually the same as X = in v(A)*B,
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_sort.hpp   fn_sort.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_sort //! \addtogroup fn_sort
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_sort_index.hpp   fn_sort_index.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_sort_index //! \addtogroup fn_sort_index
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
struct arma_sort_index_packet struct arma_sort_index_packet
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_stddev.hpp   fn_stddev.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_stddev //! \addtogroup fn_stddev
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_strans.hpp   fn_strans.hpp 
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2012 Conrad Sanderson // Copyright (C) 2011-2012 Conrad Sanderson
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_strans //! \addtogroup fn_strans
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_sum.hpp   fn_sum.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_sum //! \addtogroup fn_sum
//! @{ //! @{
//! \brief //! \brief
//! Delayed sum of elements of a matrix along a specified dimension (either rows or columns). //! Delayed sum of elements of a matrix along a specified dimension (either rows or columns).
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_svd.hpp   fn_svd.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_svd //! \addtogroup fn_svd
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_syl_lyap.hpp   fn_syl_lyap.hpp 
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2012 Conrad Sanderson // Copyright (C) 2011-2012 Conrad Sanderson
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_syl_lyap //! \addtogroup fn_syl_lyap
//! @{ //! @{
//! find the solution of the Sylvester equation AX + XB = C //! find the solution of the Sylvester equation AX + XB = C
template<typename T1, typename T2, typename T3> template<typename T1, typename T2, typename T3>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_symmat.hpp   fn_symmat.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_symmat //! \addtogroup fn_symmat
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_toeplitz.hpp   fn_toeplitz.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_toeplitz //! \addtogroup fn_toeplitz
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trace.hpp   fn_trace.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trace //! \addtogroup fn_trace
//! @{ //! @{
//! Immediate trace (sum of diagonal elements) of a square dense matrix //! Immediate trace (sum of diagonal elements) of a square dense matrix
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trans.hpp   fn_trans.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trans //! \addtogroup fn_trans
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trig.hpp   fn_trig.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trig //! \addtogroup fn_trig
//! @{ //! @{
// //
// trigonometric functions: // trigonometric functions:
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trimat.hpp   fn_trimat.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trimat //! \addtogroup fn_trimat
//! @{ //! @{
template<typename T1> template<typename T1>
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trunc_exp.hpp   fn_trunc_exp.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trunc_exp //! \addtogroup fn_trunc_exp
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_trunc_log.hpp   fn_trunc_log.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_trunc_log //! \addtogroup fn_trunc_log
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_unique.hpp   fn_unique.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Arnold Wiliem // Copyright (C) 2012 Arnold Wiliem
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
template<typename T1> template<typename T1>
inline inline
const Op<T1,op_unique> const Op<T1,op_unique>
unique unique
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_var.hpp   fn_var.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_var //! \addtogroup fn_var
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 fn_zeros.hpp   fn_zeros.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup fn_zeros //! \addtogroup fn_zeros
//! @{ //! @{
//! Generate a vector with all elements set to zero //! Generate a vector with all elements set to zero
arma_inline arma_inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 format_wrap.hpp   format_wrap.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup format_wrap //! \addtogroup format_wrap
//! @{ //! @{
//! \namespace arma_boost namespace for functions and classes which partial ly emulate Boost functionality //! \namespace arma_boost namespace for functions and classes which partial ly emulate Boost functionality
namespace arma_boost namespace arma_boost
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 forward_bones.hpp   forward_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
using std::cout; using std::cout;
using std::cerr; using std::cerr;
using std::endl; using std::endl;
using std::ios; using std::ios;
skipping to change at line 61 skipping to change at line 61
class op_strans; class op_strans;
class op_htrans; class op_htrans;
class op_htrans2; class op_htrans2;
class op_inv; class op_inv;
class op_sum; class op_sum;
class op_abs; class op_abs;
class op_diagmat; class op_diagmat;
class op_trimat; class op_trimat;
class op_diagvec; class op_diagvec;
class op_vectorise_col;
class eop_conj; class eop_conj;
class glue_times; class glue_times;
class glue_times_diag; class glue_times_diag;
class glue_rel_lt; class glue_rel_lt;
class glue_rel_gt; class glue_rel_gt;
class glue_rel_lteq; class glue_rel_lteq;
class glue_rel_gteq; class glue_rel_gteq;
 End of changes. 3 change blocks. 
1 lines changed or deleted 2 lines changed or added


 glue_conv_bones.hpp   glue_conv_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_conv //! \addtogroup glue_conv
//! @{ //! @{
class glue_conv class glue_conv
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_conv_meat.hpp   glue_conv_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_conv //! \addtogroup glue_conv
//! @{ //! @{
//! rudimentary implementation of the convolution operation //! rudimentary implementation of the convolution operation
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cor_bones.hpp   glue_cor_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cor //! \addtogroup glue_cor
//! @{ //! @{
class glue_cor class glue_cor
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cor_meat.hpp   glue_cor_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cor //! \addtogroup glue_cor
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cov_bones.hpp   glue_cov_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cov //! \addtogroup glue_cov
//! @{ //! @{
class glue_cov class glue_cov
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cov_meat.hpp   glue_cov_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cov //! \addtogroup glue_cov
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cross_bones.hpp   glue_cross_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cross //! \addtogroup glue_cross
//! @{ //! @{
class glue_cross class glue_cross
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_cross_meat.hpp   glue_cross_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_cross //! \addtogroup glue_cross
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_hist_bones.hpp   glue_hist_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
class glue_hist class glue_hist
{ {
public: public:
template<typename T1, typename T2> inline static void apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_hist>& in); template<typename T1, typename T2> inline static void apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_hist>& in);
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_hist_meat.hpp   glue_hist_meat.hpp 
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012-2013 Conrad Sanderson // Copyright (C) 2012-2013 Conrad Sanderson
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
void void
glue_hist::apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_hist>& in) glue_hist::apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_hist>& in)
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_histc_bones.hpp   glue_histc_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Boris Sabanin // Copyright (C) 2012 Boris Sabanin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
class glue_histc class glue_histc
{ {
public: public:
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_histc_meat.hpp   glue_histc_meat.hpp 
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012-2013 Conrad Sanderson // Copyright (C) 2012-2013 Conrad Sanderson
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Boris Sabanin // Copyright (C) 2012 Boris Sabanin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
void void
glue_histc::apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_histc>& in ) glue_histc::apply(Mat<uword>& out, const mtGlue<uword,T1,T2,glue_histc>& in )
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_join_bones.hpp   glue_join_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_join //! \addtogroup glue_join
//! @{ //! @{
class glue_join class glue_join
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_join_meat.hpp   glue_join_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_join //! \addtogroup glue_join
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_kron_bones.hpp   glue_kron_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_kron //! \addtogroup glue_kron
//! @{ //! @{
class glue_kron class glue_kron
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_kron_meat.hpp   glue_kron_meat.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_kron //! \addtogroup glue_kron
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_mixed_bones.hpp   glue_mixed_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_mixed //! \addtogroup glue_mixed
//! @{ //! @{
class glue_mixed_times class glue_mixed_times
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_mixed_meat.hpp   glue_mixed_meat.hpp 
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2013 Conrad Sanderson // Copyright (C) 2009-2013 Conrad Sanderson
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_mixed //! \addtogroup glue_mixed
//! @{ //! @{
//! matrix multiplication with different element types //! matrix multiplication with different element types
template<typename T1, typename T2> template<typename T1, typename T2>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_relational_bones.hpp   glue_relational_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_relational //! \addtogroup glue_relational
//! @{ //! @{
class glue_rel_lt class glue_rel_lt
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_relational_meat.hpp   glue_relational_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_relational //! \addtogroup glue_relational
//! @{ //! @{
#undef operator_rel #undef operator_rel
#undef operator_str #undef operator_str
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_solve_bones.hpp   glue_solve_bones.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_solve //! \addtogroup glue_solve
//! @{ //! @{
class glue_solve class glue_solve
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_solve_meat.hpp   glue_solve_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_solve //! \addtogroup glue_solve
//! @{ //! @{
template<typename eT, typename T2> template<typename eT, typename T2>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_times_bones.hpp   glue_times_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_times //! \addtogroup glue_times
//! @{ //! @{
//! \brief //! \brief
//! Template metaprogram depth_lhs //! Template metaprogram depth_lhs
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_times_meat.hpp   glue_times_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_times //! \addtogroup glue_times
//! @{ //! @{
template<bool is_eT_blas_type> template<bool is_eT_blas_type>
template<typename T1, typename T2> template<typename T1, typename T2>
skipping to change at line 276 skipping to change at line 276
} }
template<typename T1, typename T2> template<typename T1, typename T2>
arma_hot arma_hot
inline inline
void void
glue_times::apply_inplace_plus(Mat<typename T1::elem_type>& out, const Glue <T1, T2, glue_times>& X, const sword sign) glue_times::apply_inplace_plus(Mat<typename T1::elem_type>& out, const Glue <T1, T2, glue_times>& X, const sword sign)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename T1::elem_type eT; typedef typename T1::elem_type eT;
typedef typename get_pod_type<eT>::result T;
const partial_unwrap_check<T1> tmp1(X.A, out); const partial_unwrap_check<T1> tmp1(X.A, out);
const partial_unwrap_check<T2> tmp2(X.B, out); const partial_unwrap_check<T2> tmp2(X.B, out);
typedef typename partial_unwrap_check<T1>::stored_type TA; typedef typename partial_unwrap_check<T1>::stored_type TA;
typedef typename partial_unwrap_check<T2>::stored_type TB; typedef typename partial_unwrap_check<T2>::stored_type TB;
const TA& A = tmp1.M; const TA& A = tmp1.M;
const TB& B = tmp2.M; const TB& B = tmp2.M;
const bool do_trans_A = partial_unwrap_check<T1>::do_trans; const bool do_trans_A = partial_unwrap_check<T1>::do_trans;
const bool do_trans_B = partial_unwrap_check<T2>::do_trans; const bool do_trans_B = partial_unwrap_check<T2>::do_trans;
const bool use_alpha = partial_unwrap_check<T1>::do_times || partial_unwr ap_check<T2>::do_times || (sign < sword(0)); const bool use_alpha = partial_unwrap_check<T1>::do_times || partial_unwr ap_check<T2>::do_times || (sign < sword(0));
const eT alpha = use_alpha ? ( tmp1.get_val() * tmp2.get_val() * ( (sign > sword(0)) ? eT(1) : eT(-1) ) ) : eT(0); const eT alpha = use_alpha ? ( tmp1.get_val() * tmp2.get_val() * ( (sign > sword(0)) ? eT(1) : eT(-1) ) ) : eT(0);
arma_debug_assert_mul_size(A, B, do_trans_A, do_trans_B, "matrix multipli cation"); arma_debug_assert_mul_size(A, B, do_trans_A, do_trans_B, "matrix multipli cation");
const uword result_n_rows = (do_trans_A == false) ? (TA::is_row ? 1 : A.n _rows) : (TA::is_col ? 1 : A.n_cols); const uword result_n_rows = (do_trans_A == false) ? (TA::is_row ? 1 : A.n _rows) : (TA::is_col ? 1 : A.n_cols);
const uword result_n_cols = (do_trans_B == false) ? (TB::is_col ? 1 : B.n _cols) : (TB::is_row ? 1 : B.n_rows); const uword result_n_cols = (do_trans_B == false) ? (TB::is_col ? 1 : B.n _cols) : (TB::is_row ? 1 : B.n_rows);
arma_debug_assert_same_size(out.n_rows, out.n_cols, result_n_rows, result _n_cols, "addition"); arma_debug_assert_same_size(out.n_rows, out.n_cols, result_n_rows, result _n_cols, "addition");
if(out.n_elem > 0) if(out.n_elem == 0)
{ {
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == fal return;
se) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, false, true>::apply(out.memptr(), B, A.memptr(),
alpha, eT(1));
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<false, false, true>::apply(out.memptr(), A, B.memptr(),
alpha, eT(1));
}
else
{
gemm<false, false, false, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == tru
e) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, true>::apply(out.memptr(), B, A.memptr(),
alpha, eT(1));
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<false, true, true>::apply(out.memptr(), A, B.memptr(),
alpha, eT(1));
}
else
{
gemm<false, false, true, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == fals
e) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, false, true>::apply(out.memptr(), B, A.memptr(),
alpha, eT(1));
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<true, false, true>::apply(out.memptr(), A, B.memptr(),
alpha, eT(1));
}
else
{
gemm<true, false, false, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == true
) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, true>::apply(out.memptr(), B, A.memptr(), a
lpha, eT(1));
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<true, true, true>::apply(out.memptr(), A, B.memptr(), a
lpha, eT(1));
}
else
{
gemm<true, false, true, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == fals
e) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, true>::apply(out.memptr(), B, A.memptr(),
alpha, eT(1));
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, true>::apply(out.memptr(), A, B.memptr(),
alpha, eT(1));
}
else
{
gemm<false, true, false, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == true
) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, true>::apply(out.memptr(), B, A.memptr(), a
lpha, eT(1));
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, true>::apply(out.memptr(), A, B.memptr(), a
lpha, eT(1));
}
else
{
gemm<false, true, true, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == false
) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, true>::apply(out.memptr(), B, A.memptr(), a
lpha, eT(1));
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, false, true>::apply(out.memptr(), A, B.memptr(), a
lpha, eT(1));
}
else
{
gemm<true, true, false, true>::apply(out, A, B, alpha, eT(1));
}
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == true)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, true>::apply(out.memptr(), B, A.memptr(), al
pha, eT(1));
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, true>::apply(out.memptr(), A, B.memptr(), al
pha, eT(1));
}
else
{
gemm<true, true, true, true>::apply(out, A, B, alpha, eT(1));
}
}
} }
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == false
) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv
<true, false, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1
)); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
<false, false, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1
)); }
else { gemm
<false, false, false, true>::apply(out, A, B, alpha, eT(1
)); }
}
else
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == true)
)
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv
<true, true, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1)
); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
<false, true, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1)
); }
else { gemm
<false, false, true, true>::apply(out, A, B, alpha, eT(1)
); }
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == false)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gem
v<true, false, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1
)); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gem
v<true, false, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1
)); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syr
k<true, false, true>::apply(out, A, alpha, eT(1
)); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::yes) ) { her
k<true, false, true>::apply(out, A, T(0), T(1
)); }
else { gem
m<true, false, false, true>::apply(out, A, B, alpha, eT(1
)); }
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == true)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<true, true, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1))
; }
else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
<true, true, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1))
; }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syrk
<true, true, true>::apply(out, A, alpha, eT(1))
; }
else { gemm
<true, false, true, true>::apply(out, A, B, alpha, eT(1))
; }
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == false)
)
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gem
v<false, false, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1
)); }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gem
v<false, false, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1
)); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syr
k<false, false, true>::apply(out, A, alpha, eT(1
)); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::yes) ) { her
k<false, false, true>::apply(out, A, T(0), T(1
)); }
else { gem
m<false, true, false, true>::apply(out, A, B, alpha, eT(1
)); }
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == true)
)
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv
<false, true, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1))
; }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv
<false, true, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1))
; }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syrk
<false, true, true>::apply(out, A, alpha, eT(1))
; }
else { gemm
<false, true, true, true>::apply(out, A, B, alpha, eT(1))
; }
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == false)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<false, false, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1))
; }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv
<true, false, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1))
; }
else { gemm
<true, true, false, true>::apply(out, A, B, alpha, eT(1))
; }
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == true) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<false, true, true>::apply(out.memptr(), B, A.memptr(), alpha, eT(1));
}
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv
<true, true, true>::apply(out.memptr(), A, B.memptr(), alpha, eT(1));
}
else { gemm
<true, true, true, true>::apply(out, A, B, alpha, eT(1));
}
}
} }
template<typename eT, const bool do_trans_A, const bool do_trans_B, typenam e TA, typename TB> template<typename eT, const bool do_trans_A, const bool do_trans_B, typenam e TA, typename TB>
arma_inline arma_inline
uword uword
glue_times::mul_storage_cost(const TA& A, const TB& B) glue_times::mul_storage_cost(const TA& A, const TB& B)
{ {
const uword final_A_n_rows = (do_trans_A == false) ? ( TA::is_row ? 1 : A .n_rows ) : ( TA::is_col ? 1 : A.n_cols ); const uword final_A_n_rows = (do_trans_A == false) ? ( TA::is_row ? 1 : A .n_rows ) : ( TA::is_col ? 1 : A.n_cols );
const uword final_B_n_cols = (do_trans_B == false) ? ( TB::is_col ? 1 : B .n_cols ) : ( TB::is_row ? 1 : B.n_rows ); const uword final_B_n_cols = (do_trans_B == false) ? ( TB::is_col ? 1 : B .n_cols ) : ( TB::is_row ? 1 : B.n_rows );
skipping to change at line 482 skipping to change at line 411
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
//arma_debug_assert_mul_size(A, B, do_trans_A, do_trans_B, "matrix multip lication"); //arma_debug_assert_mul_size(A, B, do_trans_A, do_trans_B, "matrix multip lication");
arma_debug_assert_trans_mul_size<do_trans_A, do_trans_B>(A.n_rows, A.n_co ls, B.n_rows, B.n_cols, "matrix multiplication"); arma_debug_assert_trans_mul_size<do_trans_A, do_trans_B>(A.n_rows, A.n_co ls, B.n_rows, B.n_cols, "matrix multiplication");
const uword final_n_rows = (do_trans_A == false) ? (TA::is_row ? 1 : A.n_ rows) : (TA::is_col ? 1 : A.n_cols); const uword final_n_rows = (do_trans_A == false) ? (TA::is_row ? 1 : A.n_ rows) : (TA::is_col ? 1 : A.n_cols);
const uword final_n_cols = (do_trans_B == false) ? (TB::is_col ? 1 : B.n_ cols) : (TB::is_row ? 1 : B.n_rows); const uword final_n_cols = (do_trans_B == false) ? (TB::is_col ? 1 : B.n_ cols) : (TB::is_row ? 1 : B.n_rows);
out.set_size(final_n_rows, final_n_cols); out.set_size(final_n_rows, final_n_cols);
if( (A.n_elem > 0) && (B.n_elem > 0) ) if( (A.n_elem == 0) || (B.n_elem == 0) )
{ {
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == fal out.zeros();
se) ) return;
{ }
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) ) if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == false
{ ) )
gemv<true, false, false>::apply(out.memptr(), B, A.memptr() {
); if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv
} <true, false, false>::apply(out.memptr(), B, A.memptr()); }
else else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
if( (B.n_cols == 1) || (TB::is_col) ) <false, false, false>::apply(out.memptr(), A, B.memptr()); }
{ else { gemm
gemv<false, false, false>::apply(out.memptr(), A, B.memptr() <false, false, false, false>::apply(out, A, B ); }
);
}
else
{
gemm<false, false, false, false>::apply(out, A, B);
}
}
else
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == tru
e) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, false>::apply(out.memptr(), B, A.memptr(),
alpha);
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<false, true, false>::apply(out.memptr(), A, B.memptr(),
alpha);
}
else
{
gemm<false, false, true, false>::apply(out, A, B, alpha);
}
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == fals
e) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, false, false>::apply(out.memptr(), B, A.memptr())
;
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<true, false, false>::apply(out.memptr(), A, B.memptr())
;
}
else
{
gemm<true, false, false, false>::apply(out, A, B);
}
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == true
) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, false>::apply(out.memptr(), B, A.memptr(),
alpha);
}
else
if( (B.n_cols == 1) || (TB::is_col) )
{
gemv<true, true, false>::apply(out.memptr(), A, B.memptr(),
alpha);
}
else
{
gemm<true, false, true, false>::apply(out, A, B, alpha);
}
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == fals
e) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, false>::apply(out.memptr(), B, A.memptr())
;
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, false>::apply(out.memptr(), A, B.memptr())
;
}
else
{
gemm<false, true, false, false>::apply(out, A, B);
}
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == true
) )
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, false>::apply(out.memptr(), B, A.memptr(),
alpha);
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, false>::apply(out.memptr(), A, B.memptr(),
alpha);
}
else
{
gemm<false, true, true, false>::apply(out, A, B, alpha);
}
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == false
) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, false, false>::apply(out.memptr(), B, A.memptr());
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, false, false>::apply(out.memptr(), A, B.memptr());
}
else
{
gemm<true, true, false, false>::apply(out, A, B);
}
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == true)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_complex<eT>::value == fa
lse) )
{
gemv<false, true, false>::apply(out.memptr(), B, A.memptr(), a
lpha);
}
else
if( ((B.n_rows == 1) || (TB::is_row)) && (is_complex<eT>::value == fa
lse) )
{
gemv<true, true, false>::apply(out.memptr(), A, B.memptr(), a
lpha);
}
else
{
gemm<true, true, true, false>::apply(out, A, B, alpha);
}
}
} }
else else
if( (do_trans_A == false) && (do_trans_B == false) && (use_alpha == true) )
{ {
out.zeros(); if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv
<true, true, false>::apply(out.memptr(), B, A.memptr(), alpha); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
<false, true, false>::apply(out.memptr(), A, B.memptr(), alpha); }
else { gemm
<false, false, true, false>::apply(out, A, B, alpha); }
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == false)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gem
v<true, false, false>::apply(out.memptr(), B, A.memptr()); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gem
v<true, false, false>::apply(out.memptr(), A, B.memptr()); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syr
k<true, false, false>::apply(out, A ); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::yes) ) { her
k<true, false, false>::apply(out, A ); }
else { gem
m<true, false, false, false>::apply(out, A, B ); }
}
else
if( (do_trans_A == true) && (do_trans_B == false) && (use_alpha == true)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<true, true, false>::apply(out.memptr(), B, A.memptr(), alpha); }
else if( (B.n_cols == 1) || (TB::is_col) ) { gemv
<true, true, false>::apply(out.memptr(), A, B.memptr(), alpha); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syrk
<true, true, false>::apply(out, A, alpha); }
else { gemm
<true, false, true, false>::apply(out, A, B, alpha); }
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == false)
)
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gem
v<false, false, false>::apply(out.memptr(), B, A.memptr()); }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gem
v<false, false, false>::apply(out.memptr(), A, B.memptr()); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syr
k<false, false, false>::apply(out, A ); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::yes) ) { her
k<false, false, false>::apply(out, A ); }
else { gem
m<false, true, false, false>::apply(out, A, B ); }
}
else
if( (do_trans_A == false) && (do_trans_B == true) && (use_alpha == true)
)
{
if( ((A.n_rows == 1) || (TA::is_row)) && (is_cx<eT>::no) ) { gemv<
false, true, false>::apply(out.memptr(), B, A.memptr(), alpha); }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv<
false, true, false>::apply(out.memptr(), A, B.memptr(), alpha); }
else if( (void_ptr(&A) == void_ptr(&B)) && (is_cx<eT>::no) ) { syrk<
false, true, false>::apply(out, A, alpha); }
else { gemm<
false, true, true, false>::apply(out, A, B, alpha); }
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == false)
)
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<false, false, false>::apply(out.memptr(), B, A.memptr()); }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv
<true, false, false>::apply(out.memptr(), A, B.memptr()); }
else { gemm
<true, true, false, false>::apply(out, A, B ); }
}
else
if( (do_trans_A == true) && (do_trans_B == true) && (use_alpha == true) )
{
if( ((A.n_cols == 1) || (TA::is_col)) && (is_cx<eT>::no) ) { gemv
<false, true, false>::apply(out.memptr(), B, A.memptr(), alpha); }
else if( ((B.n_rows == 1) || (TB::is_row)) && (is_cx<eT>::no) ) { gemv
<true, true, false>::apply(out.memptr(), A, B.memptr(), alpha); }
else { gemm
<true, true, true, false>::apply(out, A, B, alpha); }
} }
} }
template template
< <
typename eT, typename eT,
const bool do_trans_A, const bool do_trans_A,
const bool do_trans_B, const bool do_trans_B,
const bool do_trans_C, const bool do_trans_C,
const bool use_alpha, const bool use_alpha,
 End of changes. 11 change blocks. 
345 lines changed or deleted 232 lines changed or added


 glue_toeplitz_bones.hpp   glue_toeplitz_bones.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_toeplitz //! \addtogroup glue_toeplitz
//! @{ //! @{
class glue_toeplitz class glue_toeplitz
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 glue_toeplitz_meat.hpp   glue_toeplitz_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup glue_toeplitz //! \addtogroup glue_toeplitz
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 include_atlas.hpp   include_atlas.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#if defined(ARMA_USE_ATLAS) #if defined(ARMA_USE_ATLAS)
#if !defined(ARMA_ATLAS_INCLUDE_DIR) #if !defined(ARMA_ATLAS_INCLUDE_DIR)
extern "C" extern "C"
{ {
#include <cblas.h> #include <cblas.h>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_chol_bones.hpp   op_chol_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_chol //! \addtogroup op_chol
//! @{ //! @{
class op_chol class op_chol
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_chol_meat.hpp   op_chol_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_chol //! \addtogroup op_chol
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cor_bones.hpp   op_cor_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cor //! \addtogroup op_cor
//! @{ //! @{
class op_cor class op_cor
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cor_meat.hpp   op_cor_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cor //! \addtogroup op_cor
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cov_bones.hpp   op_cov_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cov //! \addtogroup op_cov
//! @{ //! @{
class op_cov class op_cov
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cov_meat.hpp   op_cov_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cov //! \addtogroup op_cov
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cumsum_bones.hpp   op_cumsum_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cumsum //! \addtogroup op_cumsum
//! @{ //! @{
class op_cumsum_mat class op_cumsum_mat
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cumsum_meat.hpp   op_cumsum_meat.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cumsum //! \addtogroup op_cumsum
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cx_scalar_bones.hpp   op_cx_scalar_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cx_scalar //! \addtogroup op_cx_scalar
//! @{ //! @{
class op_cx_scalar_times class op_cx_scalar_times
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_cx_scalar_meat.hpp   op_cx_scalar_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_cx_scalar //! \addtogroup op_cx_scalar
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_diagmat_bones.hpp   op_diagmat_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_diagmat //! \addtogroup op_diagmat
//! @{ //! @{
class op_diagmat class op_diagmat
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_diagmat_meat.hpp   op_diagmat_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_diagmat //! \addtogroup op_diagmat
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_diagvec_bones.hpp   op_diagvec_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_diagvec //! \addtogroup op_diagvec
//! @{ //! @{
class op_diagvec class op_diagvec
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_diagvec_meat.hpp   op_diagvec_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_diagvec //! \addtogroup op_diagvec
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_dot_bones.hpp   op_dot_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_dot //! \addtogroup op_dot
//! @{ //! @{
//! \brief //! \brief
//! dot product operation //! dot product operation
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_dot_meat.hpp   op_dot_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_dot //! \addtogroup op_dot
//! @{ //! @{
//! for two arrays, generic version for non-complex values //! for two arrays, generic version for non-complex values
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_dotext_bones.hpp   op_dotext_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_dotext //! \addtogroup op_dotext
//! @{ //! @{
class op_dotext class op_dotext
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_dotext_meat.hpp   op_dotext_meat.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_dotext //! \addtogroup op_dotext
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_find_bones.hpp   op_find_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Dimitrios Bouzas // Copyright (C) 2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_find //! \addtogroup op_find
//! @{ //! @{
class op_find class op_find
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_find_meat.hpp   op_find_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Dimitrios Bouzas // Copyright (C) 2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_find //! \addtogroup op_find
//! @{ //! @{
template<typename T1> template<typename T1>
skipping to change at line 103 skipping to change at line 103
uword i,j; uword i,j;
for(i=0, j=1; j < n_elem; i+=2, j+=2) for(i=0, j=1; j < n_elem; i+=2, j+=2)
{ {
const eT tpi = PA[i]; const eT tpi = PA[i];
const eT tpj = PA[j]; const eT tpj = PA[j];
bool not_zero_i; bool not_zero_i;
bool not_zero_j; bool not_zero_j;
if(is_same_type<op_type, op_rel_lt_pre >::value == true) { no if(is_same_type<op_type, op_rel_lt_pre >::yes) { not_zero_i =
t_zero_i = (val < tpi); } (val < tpi); }
else if(is_same_type<op_type, op_rel_lt_post >::value == true) { no else if(is_same_type<op_type, op_rel_lt_post >::yes) { not_zero_i =
t_zero_i = (tpi < val); } (tpi < val); }
else if(is_same_type<op_type, op_rel_gt_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gt_pre >::yes) { not_zero_i =
t_zero_i = (val > tpi); } (val > tpi); }
else if(is_same_type<op_type, op_rel_gt_post >::value == true) { no else if(is_same_type<op_type, op_rel_gt_post >::yes) { not_zero_i =
t_zero_i = (tpi > val); } (tpi > val); }
else if(is_same_type<op_type, op_rel_lteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_lteq_pre >::yes) { not_zero_i =
t_zero_i = (val <= tpi); } (val <= tpi); }
else if(is_same_type<op_type, op_rel_lteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_lteq_post>::yes) { not_zero_i =
t_zero_i = (tpi <= val); } (tpi <= val); }
else if(is_same_type<op_type, op_rel_gteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gteq_pre >::yes) { not_zero_i =
t_zero_i = (val >= tpi); } (val >= tpi); }
else if(is_same_type<op_type, op_rel_gteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_gteq_post>::yes) { not_zero_i =
t_zero_i = (tpi >= val); } (tpi >= val); }
else if(is_same_type<op_type, op_rel_eq >::value == true) { no else if(is_same_type<op_type, op_rel_eq >::yes) { not_zero_i =
t_zero_i = (tpi == val); } (tpi == val); }
else if(is_same_type<op_type, op_rel_noteq >::value == true) { no else if(is_same_type<op_type, op_rel_noteq >::yes) { not_zero_i =
t_zero_i = (tpi != val); } (tpi != val); }
else not_zero_i = false; else not_zero_i = false;
if(is_same_type<op_type, op_rel_lt_pre >::value == true) { no if(is_same_type<op_type, op_rel_lt_pre >::yes) { not_zero_j =
t_zero_j = (val < tpj); } (val < tpj); }
else if(is_same_type<op_type, op_rel_lt_post >::value == true) { no else if(is_same_type<op_type, op_rel_lt_post >::yes) { not_zero_j =
t_zero_j = (tpj < val); } (tpj < val); }
else if(is_same_type<op_type, op_rel_gt_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gt_pre >::yes) { not_zero_j =
t_zero_j = (val > tpj); } (val > tpj); }
else if(is_same_type<op_type, op_rel_gt_post >::value == true) { no else if(is_same_type<op_type, op_rel_gt_post >::yes) { not_zero_j =
t_zero_j = (tpj > val); } (tpj > val); }
else if(is_same_type<op_type, op_rel_lteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_lteq_pre >::yes) { not_zero_j =
t_zero_j = (val <= tpj); } (val <= tpj); }
else if(is_same_type<op_type, op_rel_lteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_lteq_post>::yes) { not_zero_j =
t_zero_j = (tpj <= val); } (tpj <= val); }
else if(is_same_type<op_type, op_rel_gteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gteq_pre >::yes) { not_zero_j =
t_zero_j = (val >= tpj); } (val >= tpj); }
else if(is_same_type<op_type, op_rel_gteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_gteq_post>::yes) { not_zero_j =
t_zero_j = (tpj >= val); } (tpj >= val); }
else if(is_same_type<op_type, op_rel_eq >::value == true) { no else if(is_same_type<op_type, op_rel_eq >::yes) { not_zero_j =
t_zero_j = (tpj == val); } (tpj == val); }
else if(is_same_type<op_type, op_rel_noteq >::value == true) { no else if(is_same_type<op_type, op_rel_noteq >::yes) { not_zero_j =
t_zero_j = (tpj != val); } (tpj != val); }
else not_zero_j = false; else not_zero_j = false;
if(not_zero_i == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero_i == true) { indices_mem[n_nz] = i; ++n_nz; }
if(not_zero_j == true) { indices_mem[n_nz] = j; ++n_nz; } if(not_zero_j == true) { indices_mem[n_nz] = j; ++n_nz; }
} }
if(i < n_elem) if(i < n_elem)
{ {
bool not_zero; bool not_zero;
const eT tmp = PA[i]; const eT tmp = PA[i];
if(is_same_type<op_type, op_rel_lt_pre >::value == true) { no if(is_same_type<op_type, op_rel_lt_pre >::yes) { not_zero = (
t_zero = (val < tmp); } val < tmp); }
else if(is_same_type<op_type, op_rel_lt_post >::value == true) { no else if(is_same_type<op_type, op_rel_lt_post >::yes) { not_zero = (
t_zero = (tmp < val); } tmp < val); }
else if(is_same_type<op_type, op_rel_gt_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gt_pre >::yes) { not_zero = (
t_zero = (val > tmp); } val > tmp); }
else if(is_same_type<op_type, op_rel_gt_post >::value == true) { no else if(is_same_type<op_type, op_rel_gt_post >::yes) { not_zero = (
t_zero = (tmp > val); } tmp > val); }
else if(is_same_type<op_type, op_rel_lteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_lteq_pre >::yes) { not_zero = (
t_zero = (val <= tmp); } val <= tmp); }
else if(is_same_type<op_type, op_rel_lteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_lteq_post>::yes) { not_zero = (
t_zero = (tmp <= val); } tmp <= val); }
else if(is_same_type<op_type, op_rel_gteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gteq_pre >::yes) { not_zero = (
t_zero = (val >= tmp); } val >= tmp); }
else if(is_same_type<op_type, op_rel_gteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_gteq_post>::yes) { not_zero = (
t_zero = (tmp >= val); } tmp >= val); }
else if(is_same_type<op_type, op_rel_eq >::value == true) { no else if(is_same_type<op_type, op_rel_eq >::yes) { not_zero = (
t_zero = (tmp == val); } tmp == val); }
else if(is_same_type<op_type, op_rel_noteq >::value == true) { no else if(is_same_type<op_type, op_rel_noteq >::yes) { not_zero = (
t_zero = (tmp != val); } tmp != val); }
else not_zero = false; else not_zero = false;
if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; }
} }
} }
else else
{ {
const uword n_rows = A.get_n_rows(); const uword n_rows = A.get_n_rows();
const uword n_cols = A.get_n_cols(); const uword n_cols = A.get_n_cols();
uword i = 0; uword i = 0;
for(uword col=0; col < n_cols; ++col) for(uword col=0; col < n_cols; ++col)
for(uword row=0; row < n_rows; ++row) for(uword row=0; row < n_rows; ++row)
{ {
const eT tmp = A.at(row,col); const eT tmp = A.at(row,col);
bool not_zero; bool not_zero;
if(is_same_type<op_type, op_rel_lt_pre >::value == true) { no if(is_same_type<op_type, op_rel_lt_pre >::yes) { not_zero = (
t_zero = (val < tmp); } val < tmp); }
else if(is_same_type<op_type, op_rel_lt_post >::value == true) { no else if(is_same_type<op_type, op_rel_lt_post >::yes) { not_zero = (
t_zero = (tmp < val); } tmp < val); }
else if(is_same_type<op_type, op_rel_gt_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gt_pre >::yes) { not_zero = (
t_zero = (val > tmp); } val > tmp); }
else if(is_same_type<op_type, op_rel_gt_post >::value == true) { no else if(is_same_type<op_type, op_rel_gt_post >::yes) { not_zero = (
t_zero = (tmp > val); } tmp > val); }
else if(is_same_type<op_type, op_rel_lteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_lteq_pre >::yes) { not_zero = (
t_zero = (val <= tmp); } val <= tmp); }
else if(is_same_type<op_type, op_rel_lteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_lteq_post>::yes) { not_zero = (
t_zero = (tmp <= val); } tmp <= val); }
else if(is_same_type<op_type, op_rel_gteq_pre >::value == true) { no else if(is_same_type<op_type, op_rel_gteq_pre >::yes) { not_zero = (
t_zero = (val >= tmp); } val >= tmp); }
else if(is_same_type<op_type, op_rel_gteq_post>::value == true) { no else if(is_same_type<op_type, op_rel_gteq_post>::yes) { not_zero = (
t_zero = (tmp >= val); } tmp >= val); }
else if(is_same_type<op_type, op_rel_eq >::value == true) { no else if(is_same_type<op_type, op_rel_eq >::yes) { not_zero = (
t_zero = (tmp == val); } tmp == val); }
else if(is_same_type<op_type, op_rel_noteq >::value == true) { no else if(is_same_type<op_type, op_rel_noteq >::yes) { not_zero = (
t_zero = (tmp != val); } tmp != val); }
else not_zero = false; else not_zero = false;
if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; }
++i; ++i;
} }
} }
return n_nz; return n_nz;
} }
skipping to change at line 223 skipping to change at line 223
uword* indices_mem = indices.memptr(); uword* indices_mem = indices.memptr();
uword n_nz = 0; uword n_nz = 0;
for(uword i=0; i<n_elem; ++i) for(uword i=0; i<n_elem; ++i)
{ {
const eT tmp = PA[i]; const eT tmp = PA[i];
bool not_zero; bool not_zero;
if(is_same_type<op_type, op_rel_eq >::value == true) { not_zero if(is_same_type<op_type, op_rel_eq >::yes) { not_zero = (tmp ==
= (tmp == val); } val); }
else if(is_same_type<op_type, op_rel_noteq>::value == true) { not_zero else if(is_same_type<op_type, op_rel_noteq>::yes) { not_zero = (tmp !=
= (tmp != val); } val); }
else not_zero = false; else not_zero = false;
if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; }
} }
return n_nz; return n_nz;
} }
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
skipping to change at line 278 skipping to change at line 278
uword* indices_mem = indices.memptr(); uword* indices_mem = indices.memptr();
uword n_nz = 0; uword n_nz = 0;
for(uword i=0; i<n_elem; ++i) for(uword i=0; i<n_elem; ++i)
{ {
const eT1 tmp1 = PA[i]; const eT1 tmp1 = PA[i];
const eT2 tmp2 = PB[i]; const eT2 tmp2 = PB[i];
bool not_zero; bool not_zero;
if(is_same_type<glue_type, glue_rel_lt >::value == true) { not if(is_same_type<glue_type, glue_rel_lt >::yes) { not_zero = (t
_zero = (tmp1 < tmp2); } mp1 < tmp2); }
else if(is_same_type<glue_type, glue_rel_gt >::value == true) { not else if(is_same_type<glue_type, glue_rel_gt >::yes) { not_zero = (t
_zero = (tmp1 > tmp2); } mp1 > tmp2); }
else if(is_same_type<glue_type, glue_rel_lteq >::value == true) { not else if(is_same_type<glue_type, glue_rel_lteq >::yes) { not_zero = (t
_zero = (tmp1 <= tmp2); } mp1 <= tmp2); }
else if(is_same_type<glue_type, glue_rel_gteq >::value == true) { not else if(is_same_type<glue_type, glue_rel_gteq >::yes) { not_zero = (t
_zero = (tmp1 >= tmp2); } mp1 >= tmp2); }
else if(is_same_type<glue_type, glue_rel_eq >::value == true) { not else if(is_same_type<glue_type, glue_rel_eq >::yes) { not_zero = (t
_zero = (tmp1 == tmp2); } mp1 == tmp2); }
else if(is_same_type<glue_type, glue_rel_noteq >::value == true) { not else if(is_same_type<glue_type, glue_rel_noteq >::yes) { not_zero = (t
_zero = (tmp1 != tmp2); } mp1 != tmp2); }
else not_zero = false; else not_zero = false;
if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; }
} }
return n_nz; return n_nz;
} }
template<typename T1, typename T2, typename glue_type> template<typename T1, typename T2, typename glue_type>
inline inline
skipping to change at line 331 skipping to change at line 331
indices.set_size(n_elem, 1); indices.set_size(n_elem, 1);
uword* indices_mem = indices.memptr(); uword* indices_mem = indices.memptr();
uword n_nz = 0; uword n_nz = 0;
for(uword i=0; i<n_elem; ++i) for(uword i=0; i<n_elem; ++i)
{ {
bool not_zero; bool not_zero;
if(is_same_type<glue_type, glue_rel_eq >::value == true) { not if(is_same_type<glue_type, glue_rel_eq >::yes) { not_zero = (P
_zero = (PA[i] == PB[i]); } A[i] == PB[i]); }
else if(is_same_type<glue_type, glue_rel_noteq >::value == true) { not else if(is_same_type<glue_type, glue_rel_noteq >::yes) { not_zero = (P
_zero = (PA[i] != PB[i]); } A[i] != PB[i]); }
else not_zero = false; else not_zero = false;
if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; } if(not_zero == true) { indices_mem[n_nz] = i; ++n_nz; }
} }
return n_nz; return n_nz;
} }
template<typename T1> template<typename T1>
inline inline
 End of changes. 9 change blocks. 
101 lines changed or deleted 101 lines changed or added


 op_flip_bones.hpp   op_flip_bones.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_flip //! \addtogroup op_flip
//! @{ //! @{
class op_flipud class op_flipud
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_flip_meat.hpp   op_flip_meat.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_flip //! \addtogroup op_flip
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_hist_bones.hpp   op_hist_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_hist //! \addtogroup op_hist
//! @{ //! @{
class op_hist class op_hist
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_hist_meat.hpp   op_hist_meat.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_hist //! \addtogroup op_hist
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_htrans_bones.hpp   op_htrans_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_htrans //! \addtogroup op_htrans
//! @{ //! @{
//! 'hermitian transpose' operation //! 'hermitian transpose' operation
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_htrans_meat.hpp   op_htrans_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_htrans //! \addtogroup op_htrans
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_inv_bones.hpp   op_inv_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_inv //! \addtogroup op_inv
//! @{ //! @{
//! 'invert matrix' operation (general matrices) //! 'invert matrix' operation (general matrices)
class op_inv class op_inv
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_inv_meat.hpp   op_inv_meat.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_inv //! \addtogroup op_inv
//! @{ //! @{
//! immediate inverse of a matrix, storing the result in a dense matrix //! immediate inverse of a matrix, storing the result in a dense matrix
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_max_bones.hpp   op_max_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_max //! \addtogroup op_max
//! @{ //! @{
//! Class for finding maximum values in a matrix //! Class for finding maximum values in a matrix
class op_max class op_max
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_max_meat.hpp   op_max_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_max //! \addtogroup op_max
//! @{ //! @{
//! \brief //! \brief
//! For each row or for each column, find the maximum value. //! For each row or for each column, find the maximum value.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_mean_bones.hpp   op_mean_bones.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_mean //! \addtogroup op_mean
//! @{ //! @{
//! Class for finding mean values of a matrix //! Class for finding mean values of a matrix
class op_mean class op_mean
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_mean_meat.hpp   op_mean_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_mean //! \addtogroup op_mean
//! @{ //! @{
//! \brief //! \brief
//! For each row or for each column, find the mean value. //! For each row or for each column, find the mean value.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_median_bones.hpp   op_median_bones.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_median //! \addtogroup op_median
//! @{ //! @{
template<typename T> template<typename T>
struct arma_cx_median_packet struct arma_cx_median_packet
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_median_meat.hpp   op_median_meat.hpp 
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2013 Conrad Sanderson // Copyright (C) 2009-2013 Conrad Sanderson
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2013 Ruslan Shestopalyuk // Copyright (C) 2013 Ruslan Shestopalyuk
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_median //! \addtogroup op_median
//! @{ //! @{
//! \brief //! \brief
skipping to change at line 130 skipping to change at line 130
//! Implementation for complex numbers //! Implementation for complex numbers
template<typename T, typename T1> template<typename T, typename T1>
inline inline
void void
op_median::apply(Mat< std::complex<T> >& out, const Op<T1,op_median>& in) op_median::apply(Mat< std::complex<T> >& out, const Op<T1,op_median>& in)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
typedef typename std::complex<T> eT; typedef typename std::complex<T> eT;
arma_type_check(( is_same_type<eT, typename T1::elem_type>::value == fals e )); arma_type_check(( is_same_type<eT, typename T1::elem_type>::no ));
const unwrap_check<T1> tmp(in.m, out); const unwrap_check<T1> tmp(in.m, out);
const Mat<eT>& X = tmp.M; const Mat<eT>& X = tmp.M;
const uword X_n_rows = X.n_rows; const uword X_n_rows = X.n_rows;
const uword X_n_cols = X.n_cols; const uword X_n_cols = X.n_cols;
const uword dim = in.aux_uword_a; const uword dim = in.aux_uword_a;
arma_debug_check( (dim > 1), "median(): incorrect usage. dim must be 0 or 1"); arma_debug_check( (dim > 1), "median(): incorrect usage. dim must be 0 or 1");
 End of changes. 3 change blocks. 
2 lines changed or deleted 2 lines changed or added


 op_min_bones.hpp   op_min_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_min //! \addtogroup op_min
//! @{ //! @{
//! Class for finding minimum values in a matrix //! Class for finding minimum values in a matrix
class op_min class op_min
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_min_meat.hpp   op_min_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_min //! \addtogroup op_min
//! @{ //! @{
//! \brief //! \brief
//! For each row or for each column, find the minimum value. //! For each row or for each column, find the minimum value.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_misc_bones.hpp   op_misc_bones.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_misc //! \addtogroup op_misc
//! @{ //! @{
class op_real class op_real
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_misc_meat.hpp   op_misc_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_misc //! \addtogroup op_misc
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_pinv_bones.hpp   op_pinv_bones.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_pinv //! \addtogroup op_pinv
//! @{ //! @{
class op_pinv class op_pinv
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_pinv_meat.hpp   op_pinv_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_pinv //! \addtogroup op_pinv
//! @{ //! @{
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_princomp_bones.hpp   op_princomp_bones.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Dimitrios Bouzas // Copyright (C) 2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_princomp //! \addtogroup op_princomp
//! @{ //! @{
class op_princomp class op_princomp
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_princomp_meat.hpp   op_princomp_meat.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Dimitrios Bouzas // Copyright (C) 2010 Dimitrios Bouzas
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_princomp //! \addtogroup op_princomp
//! @{ //! @{
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_prod_bones.hpp   op_prod_bones.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_prod //! \addtogroup op_prod
//! @{ //! @{
//! Class for finding products of values in a matrix (e.g. along rows or c olumns) //! Class for finding products of values in a matrix (e.g. along rows or c olumns)
class op_prod class op_prod
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_prod_meat.hpp   op_prod_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_prod //! \addtogroup op_prod
//! @{ //! @{
//! \brief //! \brief
//! Immediate product of elements of a matrix along a specified dimension ( either rows or columns). //! Immediate product of elements of a matrix along a specified dimension ( either rows or columns).
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_relational_bones.hpp   op_relational_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_relational //! \addtogroup op_relational
//! @{ //! @{
class op_rel_lt_pre class op_rel_lt_pre
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_relational_meat.hpp   op_relational_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_relational //! \addtogroup op_relational
//! @{ //! @{
#undef operator_rel #undef operator_rel
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_repmat_bones.hpp   op_repmat_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_repmat //! \addtogroup op_repmat
//! @{ //! @{
class op_repmat class op_repmat
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_repmat_meat.hpp   op_repmat_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_repmat //! \addtogroup op_repmat
//! @{ //! @{
//! \brief //! \brief
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_reshape_bones.hpp   op_reshape_bones.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_reshape //! \addtogroup op_reshape
//! @{ //! @{
class op_reshape class op_reshape
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_reshape_meat.hpp   op_reshape_meat.hpp 
skipping to change at line 59 skipping to change at line 59
const Mat<eT>& B = B_tmp.M; const Mat<eT>& B = B_tmp.M;
out.set_size(in_n_rows, in_n_cols); out.set_size(in_n_rows, in_n_cols);
eT* out_mem = out.memptr(); eT* out_mem = out.memptr();
const uword B_n_rows = B.n_rows; const uword B_n_rows = B.n_rows;
const uword B_n_cols = B.n_cols; const uword B_n_cols = B.n_cols;
for(uword row=0; row<B_n_rows; ++row) for(uword row=0; row<B_n_rows; ++row)
for(uword col=0; col<B_n_cols; ++col)
{ {
*out_mem = B.at(row,col); uword i,j;
out_mem++; for(i=0, j=1; j < B_n_cols; i+=2, j+=2)
{
const eT tmp_i = B.at(row,i);
const eT tmp_j = B.at(row,j);
*out_mem = tmp_i; out_mem++;
*out_mem = tmp_j; out_mem++;
}
if(i < B_n_cols)
{
*out_mem = B.at(row,i); out_mem++;
}
} }
} }
} }
else else
{ {
const unwrap_check< Mat<eT> > B_tmp(A, is_alias); const unwrap_check< Mat<eT> > B_tmp(A, is_alias);
const Mat<eT>& B = B_tmp.M; const Mat<eT>& B = B_tmp.M;
const uword n_elem_to_copy = (std::min)(B.n_elem, in_n_elem); const uword n_elem_to_copy = (std::min)(B.n_elem, in_n_elem);
 End of changes. 2 change blocks. 
3 lines changed or deleted 14 lines changed or added


 op_resize_bones.hpp   op_resize_bones.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_resize //! \addtogroup op_resize
//! @{ //! @{
class op_resize class op_resize
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_resize_meat.hpp   op_resize_meat.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_resize //! \addtogroup op_resize
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_shuffle_bones.hpp   op_shuffle_bones.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_shuffle //! \addtogroup op_shuffle
//! @{ //! @{
class op_shuffle class op_shuffle
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_shuffle_meat.hpp   op_shuffle_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Dimitrios Bouzas // Copyright (C) 2009-2010 Dimitrios Bouzas
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_shuffle //! \addtogroup op_shuffle
//! @{ //! @{
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_sort_bones.hpp   op_sort_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_sort //! \addtogroup op_sort
//! @{ //! @{
class op_sort class op_sort
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_sort_meat.hpp   op_sort_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_sort //! \addtogroup op_sort
//! @{ //! @{
template<typename eT> template<typename eT>
class arma_ascend_sort_helper class arma_ascend_sort_helper
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_stddev_bones.hpp   op_stddev_bones.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_stddev //! \addtogroup op_stddev
//! @{ //! @{
//! Class for finding the standard deviation //! Class for finding the standard deviation
class op_stddev class op_stddev
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_stddev_meat.hpp   op_stddev_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_stddev //! \addtogroup op_stddev
//! @{ //! @{
//! \brief //! \brief
//! For each row or for each column, find the standard deviation. //! For each row or for each column, find the standard deviation.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_strans_bones.hpp   op_strans_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_strans //! \addtogroup op_strans
//! @{ //! @{
//! 'matrix transpose' operation (simple transpose, ie. without taking the conjugate of the elements) //! 'matrix transpose' operation (simple transpose, ie. without taking the conjugate of the elements)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_strans_meat.hpp   op_strans_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_strans //! \addtogroup op_strans
//! @{ //! @{
//! for tiny square matrices (size <= 4x4) //! for tiny square matrices (size <= 4x4)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_sum_bones.hpp   op_sum_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_sum //! \addtogroup op_sum
//! @{ //! @{
//! Class for finding sums of values in a matrix (e.g. along rows or colum ns) //! Class for finding sums of values in a matrix (e.g. along rows or colum ns)
class op_sum class op_sum
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_sum_meat.hpp   op_sum_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_sum //! \addtogroup op_sum
//! @{ //! @{
//! \brief //! \brief
//! Immediate sum of elements of a matrix along a specified dimension (eith er rows or columns). //! Immediate sum of elements of a matrix along a specified dimension (eith er rows or columns).
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_symmat_bones.hpp   op_symmat_bones.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_symmat //! \addtogroup op_symmat
//! @{ //! @{
class op_symmat class op_symmat
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_symmat_meat.hpp   op_symmat_meat.hpp 
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011-2012 Conrad Sanderson // Copyright (C) 2011-2012 Conrad Sanderson
// Copyright (C) 2011-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_symmat //! \addtogroup op_symmat
//! @{ //! @{
template<typename T1> template<typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_trimat_bones.hpp   op_trimat_bones.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Ryan Curtin // Copyright (C) 2011 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_trimat //! \addtogroup op_trimat
//! @{ //! @{
class op_trimat class op_trimat
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_trimat_meat.hpp   op_trimat_meat.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Ryan Curtin // Copyright (C) 2011 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_trimat //! \addtogroup op_trimat
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_unique_bones.hpp   op_unique_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Arnold Wiliem // Copyright (C) 2012 Arnold Wiliem
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_unique //! \addtogroup op_unique
//! @{ //! @{
class op_unique class op_unique
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_unique_meat.hpp   op_unique_meat.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Arnold Wiliem // Copyright (C) 2012 Arnold Wiliem
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_unique //! \addtogroup op_unique
//! @{ //! @{
// TODO: add an efficient implementation for complex numbers // TODO: add an efficient implementation for complex numbers
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_var_bones.hpp   op_var_bones.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_var //! \addtogroup op_var
//! @{ //! @{
//! Class for finding variance values of a matrix //! Class for finding variance values of a matrix
class op_var class op_var
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 op_var_meat.hpp   op_var_meat.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup op_var //! \addtogroup op_var
//! @{ //! @{
//! \brief //! \brief
//! For each row or for each column, find the variance. //! For each row or for each column, find the variance.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_div.hpp   operator_cube_div.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_div //! \addtogroup operator_cube_div
//! @{ //! @{
//! BaseCube / scalar //! BaseCube / scalar
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_minus.hpp   operator_cube_minus.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_minus //! \addtogroup operator_cube_minus
//! @{ //! @{
//! unary - //! unary -
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_plus.hpp   operator_cube_plus.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_plus //! \addtogroup operator_cube_plus
//! @{ //! @{
//! unary plus operation (does nothing, but is required for completeness) //! unary plus operation (does nothing, but is required for completeness)
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_relational.hpp   operator_cube_relational.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_relational //! \addtogroup operator_cube_relational
//! @{ //! @{
// < : lt // < : lt
// > : gt // > : gt
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_schur.hpp   operator_cube_schur.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_schur //! \addtogroup operator_cube_schur
//! @{ //! @{
// operator %, which we define it to do a schur product (element-wise multi plication) // operator %, which we define it to do a schur product (element-wise multi plication)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_cube_times.hpp   operator_cube_times.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_cube_times //! \addtogroup operator_cube_times
//! @{ //! @{
//! BaseCube * scalar //! BaseCube * scalar
template<typename T1> template<typename T1>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_div.hpp   operator_div.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_div //! \addtogroup operator_div
//! @{ //! @{
//! Base / scalar //! Base / scalar
skipping to change at line 50 skipping to change at line 50
return eOp<T1, eop_scalar_div_pre>(X, k); return eOp<T1, eop_scalar_div_pre>(X, k);
} }
//! complex scalar / non-complex Base //! complex scalar / non-complex Base
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _div_pre> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _div_pre>
>::result >::result
operator/ operator/
( (
const std::complex<typename T1::pod_type>& k, const std::complex<typename T1::pod_type>& k,
const T1& X const T1& X
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_div_pre>('j', X, k); return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_div_pre>('j', X, k);
} }
//! non-complex Base / complex scalar //! non-complex Base / complex scalar
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _div_post> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _div_post>
>::result >::result
operator/ operator/
( (
const T1& X, const T1& X,
const std::complex<typename T1::pod_type>& k const std::complex<typename T1::pod_type>& k
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
skipping to change at line 110 skipping to change at line 110
return eGlue<T1, T2, eglue_div>(X, Y); return eGlue<T1, T2, eglue_div>(X, Y);
} }
//! element-wise division of Base objects with different element types //! element-wise division of Base objects with different element types
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::no)),
const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_div> const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_div>
>::result >::result
operator/ operator/
( (
const T1& X, const T1& X,
const T2& Y const T2& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 5 change blocks. 
4 lines changed or deleted 4 lines changed or added


 operator_minus.hpp   operator_minus.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_minus //! \addtogroup operator_minus
//! @{ //! @{
//! unary - //! unary -
skipping to change at line 75 skipping to change at line 75
return eOp<T1, eop_scalar_minus_pre>(X, k); return eOp<T1, eop_scalar_minus_pre>(X, k);
} }
//! complex scalar - non-complex Base //! complex scalar - non-complex Base
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _minus_pre> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _minus_pre>
>::result >::result
operator- operator-
( (
const std::complex<typename T1::pod_type>& k, const std::complex<typename T1::pod_type>& k,
const T1& X const T1& X
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_minus_pre>('j', X, k); return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_minus_pre>('j', X, k);
} }
//! non-complex Base - complex scalar //! non-complex Base - complex scalar
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _minus_post> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _minus_post>
>::result >::result
operator- operator-
( (
const T1& X, const T1& X,
const std::complex<typename T1::pod_type>& k const std::complex<typename T1::pod_type>& k
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
skipping to change at line 135 skipping to change at line 135
return eGlue<T1, T2, eglue_minus>(X, Y); return eGlue<T1, T2, eglue_minus>(X, Y);
} }
//! subtraction of Base objects with different element types //! subtraction of Base objects with different element types
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::no)),
const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_minus> const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_minus>
>::result >::result
operator- operator-
( (
const T1& X, const T1& X,
const T2& Y const T2& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 5 change blocks. 
4 lines changed or deleted 4 lines changed or added


 operator_ostream.hpp   operator_ostream.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_ostream //! \addtogroup operator_ostream
//! @{ //! @{
template<typename eT, typename T1> template<typename eT, typename T1>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 operator_plus.hpp   operator_plus.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_plus //! \addtogroup operator_plus
//! @{ //! @{
//! unary plus operation (does nothing, but is required for completeness) //! unary plus operation (does nothing, but is required for completeness)
skipping to change at line 54 skipping to change at line 54
return eOp<T1, eop_scalar_plus>(X, k); // NOTE: order is swapped return eOp<T1, eop_scalar_plus>(X, k); // NOTE: order is swapped
} }
//! non-complex Base + complex scalar //! non-complex Base + complex scalar
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _plus> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _plus>
>::result >::result
operator+ operator+
( (
const T1& X, const T1& X,
const std::complex<typename T1::pod_type>& k const std::complex<typename T1::pod_type>& k
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_plus>('j', X, k); return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_plus>('j', X, k);
} }
//! complex scalar + non-complex Base //! complex scalar + non-complex Base
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _plus> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _plus>
>::result >::result
operator+ operator+
( (
const std::complex<typename T1::pod_type>& k, const std::complex<typename T1::pod_type>& k,
const T1& X const T1& X
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
skipping to change at line 114 skipping to change at line 114
return eGlue<T1, T2, eglue_plus>(X, Y); return eGlue<T1, T2, eglue_plus>(X, Y);
} }
//! addition of user-accessible Armadillo objects with different element ty pes //! addition of user-accessible Armadillo objects with different element ty pes
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::no)),
const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_plus> const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_plus>
>::result >::result
operator+ operator+
( (
const T1& X, const T1& X,
const T2& Y const T2& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 5 change blocks. 
4 lines changed or deleted 4 lines changed or added


 operator_relational.hpp   operator_relational.hpp 
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2012 Conrad Sanderson // Copyright (C) 2009-2012 Conrad Sanderson
// Copyright (C) 2009-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_relational //! \addtogroup operator_relational
//! @{ //! @{
// < : lt // < : lt
// > : gt // > : gt
// <= : lteq // <= : lteq
// >= : gteq // >= : gteq
// == : eq // == : eq
// != : noteq // != : noteq
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_complex<typena me T1::elem_type>::value == false) && (is_complex<typename T2::elem_type>:: value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_cx<typename T1 ::elem_type>::no) && (is_cx<typename T2::elem_type>::no)),
const mtGlue<uword, T1, T2, glue_rel_lt> const mtGlue<uword, T1, T2, glue_rel_lt>
>::result >::result
operator< operator<
(const T1& X, const T2& Y) (const T1& X, const T2& Y)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtGlue<uword, T1, T2, glue_rel_lt>( X, Y ); return mtGlue<uword, T1, T2, glue_rel_lt>( X, Y );
} }
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_complex<typena me T1::elem_type>::value == false) && (is_complex<typename T2::elem_type>:: value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_cx<typename T1 ::elem_type>::no) && (is_cx<typename T2::elem_type>::no)),
const mtGlue<uword, T1, T2, glue_rel_gt> const mtGlue<uword, T1, T2, glue_rel_gt>
>::result >::result
operator> operator>
(const T1& X, const T2& Y) (const T1& X, const T2& Y)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtGlue<uword, T1, T2, glue_rel_gt>( X, Y ); return mtGlue<uword, T1, T2, glue_rel_gt>( X, Y );
} }
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_complex<typena me T1::elem_type>::value == false) && (is_complex<typename T2::elem_type>:: value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_cx<typename T1 ::elem_type>::no) && (is_cx<typename T2::elem_type>::no)),
const mtGlue<uword, T1, T2, glue_rel_lteq> const mtGlue<uword, T1, T2, glue_rel_lteq>
>::result >::result
operator<= operator<=
(const T1& X, const T2& Y) (const T1& X, const T2& Y)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtGlue<uword, T1, T2, glue_rel_lteq>( X, Y ); return mtGlue<uword, T1, T2, glue_rel_lteq>( X, Y );
} }
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_complex<typena me T1::elem_type>::value == false) && (is_complex<typename T2::elem_type>:: value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_cx<typename T1 ::elem_type>::no) && (is_cx<typename T2::elem_type>::no)),
const mtGlue<uword, T1, T2, glue_rel_gteq> const mtGlue<uword, T1, T2, glue_rel_gteq>
>::result >::result
operator>= operator>=
(const T1& X, const T2& Y) (const T1& X, const T2& Y)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtGlue<uword, T1, T2, glue_rel_gteq>( X, Y ); return mtGlue<uword, T1, T2, glue_rel_gteq>( X, Y );
} }
skipping to change at line 123 skipping to change at line 123
// //
// //
// //
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_lt_pre> const mtOp<uword, T1, op_rel_lt_pre>
>::result >::result
operator< operator<
(const typename T1::elem_type val, const T1& X) (const typename T1::elem_type val, const T1& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_lt_pre>(X, val); return mtOp<uword, T1, op_rel_lt_pre>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_lt_post> const mtOp<uword, T1, op_rel_lt_post>
>::result >::result
operator< operator<
(const T1& X, const typename T1::elem_type val) (const T1& X, const typename T1::elem_type val)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_lt_post>(X, val); return mtOp<uword, T1, op_rel_lt_post>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_gt_pre> const mtOp<uword, T1, op_rel_gt_pre>
>::result >::result
operator> operator>
(const typename T1::elem_type val, const T1& X) (const typename T1::elem_type val, const T1& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_gt_pre>(X, val); return mtOp<uword, T1, op_rel_gt_pre>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_gt_post> const mtOp<uword, T1, op_rel_gt_post>
>::result >::result
operator> operator>
(const T1& X, const typename T1::elem_type val) (const T1& X, const typename T1::elem_type val)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_gt_post>(X, val); return mtOp<uword, T1, op_rel_gt_post>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_lteq_pre> const mtOp<uword, T1, op_rel_lteq_pre>
>::result >::result
operator<= operator<=
(const typename T1::elem_type val, const T1& X) (const typename T1::elem_type val, const T1& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_lteq_pre>(X, val); return mtOp<uword, T1, op_rel_lteq_pre>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_lteq_post> const mtOp<uword, T1, op_rel_lteq_post>
>::result >::result
operator<= operator<=
(const T1& X, const typename T1::elem_type val) (const T1& X, const typename T1::elem_type val)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_lteq_post>(X, val); return mtOp<uword, T1, op_rel_lteq_post>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_gteq_pre> const mtOp<uword, T1, op_rel_gteq_pre>
>::result >::result
operator>= operator>=
(const typename T1::elem_type val, const T1& X) (const typename T1::elem_type val, const T1& X)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_gteq_pre>(X, val); return mtOp<uword, T1, op_rel_gteq_pre>(X, val);
} }
template<typename T1> template<typename T1>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && (is_complex<typename T1::elem_type>::value == false)), (is_arma_type<T1>::value && (is_cx<typename T1::elem_type>::no)),
const mtOp<uword, T1, op_rel_gteq_post> const mtOp<uword, T1, op_rel_gteq_post>
>::result >::result
operator>= operator>=
(const T1& X, const typename T1::elem_type val) (const T1& X, const typename T1::elem_type val)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<uword, T1, op_rel_gteq_post>(X, val); return mtOp<uword, T1, op_rel_gteq_post>(X, val);
} }
 End of changes. 14 change blocks. 
13 lines changed or deleted 13 lines changed or added


 operator_schur.hpp   operator_schur.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_schur //! \addtogroup operator_schur
//! @{ //! @{
// operator %, which we define it to do a schur product (element-wise multi plication) // operator %, which we define it to do a schur product (element-wise multi plication)
skipping to change at line 40 skipping to change at line 40
return eGlue<T1, T2, eglue_schur>(X, Y); return eGlue<T1, T2, eglue_schur>(X, Y);
} }
//! element-wise multiplication of user-accessible Armadillo objects with d ifferent element types //! element-wise multiplication of user-accessible Armadillo objects with d ifferent element types
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::no)),
const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_schur> const mtGlue<typename promote_type<typename T1::elem_type, typename T2::e lem_type>::result, T1, T2, glue_mixed_schur>
>::result >::result
operator% operator%
( (
const T1& X, const T1& X,
const T2& Y const T2& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 3 change blocks. 
2 lines changed or deleted 2 lines changed or added


 operator_times.hpp   operator_times.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Ryan Curtin // Copyright (C) 2012 Ryan Curtin
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup operator_times //! \addtogroup operator_times
//! @{ //! @{
//! Base * scalar //! Base * scalar
skipping to change at line 42 skipping to change at line 42
return eOp<T1, eop_scalar_times>(X,k); // NOTE: order is swapped return eOp<T1, eop_scalar_times>(X,k); // NOTE: order is swapped
} }
//! non-complex Base * complex scalar //! non-complex Base * complex scalar
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _times> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _times>
>::result >::result
operator* operator*
( (
const T1& X, const T1& X,
const std::complex<typename T1::pod_type>& k const std::complex<typename T1::pod_type>& k
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_times>('j', X, k); return mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scala r_times>('j', X, k);
} }
//! complex scalar * non-complex Base //! complex scalar * non-complex Base
template<typename T1> template<typename T1>
arma_inline arma_inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_complex<typename T1::elem_type>::value == false), (is_arma_type<T1>::value && is_cx<typename T1::elem_type>::no),
const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _times> const mtOp<typename std::complex<typename T1::pod_type>, T1, op_cx_scalar _times>
>::result >::result
operator* operator*
( (
const std::complex<typename T1::pod_type>& k, const std::complex<typename T1::pod_type>& k,
const T1& X const T1& X
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
skipping to change at line 192 skipping to change at line 192
return Glue<T1, T2, glue_times>(X, Y); return Glue<T1, T2, glue_times>(X, Y);
} }
//! multiplication of Base objects with different element types //! multiplication of Base objects with different element types
template<typename T1, typename T2> template<typename T1, typename T2>
inline inline
typename typename
enable_if2 enable_if2
< <
(is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::value == false)), (is_arma_type<T1>::value && is_arma_type<T2>::value && (is_same_type<type name T1::elem_type, typename T2::elem_type>::no)),
const mtGlue< typename promote_type<typename T1::elem_type, typename T2:: elem_type>::result, T1, T2, glue_mixed_times > const mtGlue< typename promote_type<typename T1::elem_type, typename T2:: elem_type>::result, T1, T2, glue_mixed_times >
>::result >::result
operator* operator*
( (
const T1& X, const T1& X,
const T2& Y const T2& Y
) )
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 5 change blocks. 
4 lines changed or deleted 4 lines changed or added


 podarray_bones.hpp   podarray_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup podarray //! \addtogroup podarray
//! @{ //! @{
struct podarray_prealloc_n_elem struct podarray_prealloc_n_elem
{ {
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 podarray_meat.hpp   podarray_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup podarray //! \addtogroup podarray
//! @{ //! @{
template<typename eT> template<typename eT>
arma_hot arma_hot
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 promote_type.hpp   promote_type.hpp 
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2013 Conrad Sanderson // Copyright (C) 2009-2013 Conrad Sanderson
// Copyright (C) 2009-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup promote_type //! \addtogroup promote_type
//! @{ //! @{
template<typename T1, typename T2> template<typename T1, typename T2>
struct is_promotable struct is_promotable
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 restrictors.hpp   restrictors.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup restrictors //! \addtogroup restrictors
//! @{ //! @{
// structures for template based restrictions of input/output arguments // structures for template based restrictions of input/output arguments
// (part of the SFINAE approach) // (part of the SFINAE approach)
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 running_stat_bones.hpp   running_stat_bones.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup running_stat //! \addtogroup running_stat
//! @{ //! @{
template<typename eT> template<typename eT>
class arma_counter class arma_counter
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 running_stat_meat.hpp   running_stat_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup running_stat //! \addtogroup running_stat
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
skipping to change at line 145 skipping to change at line 145
} }
//! update statistics to reflect new sample (version for complex numbers) //! update statistics to reflect new sample (version for complex numbers)
template<typename eT> template<typename eT>
inline inline
void void
running_stat<eT>::operator() (const std::complex< typename running_stat<eT> ::T >& sample) running_stat<eT>::operator() (const std::complex< typename running_stat<eT> ::T >& sample)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
arma_type_check(( is_same_type<eT, std::complex< typename running_stat<eT >::T > >::value == false )); arma_type_check(( is_same_type<eT, std::complex< typename running_stat<eT >::T > >::no ));
if( arma_isfinite(sample) == false ) if( arma_isfinite(sample) == false )
{ {
arma_warn(true, "running_stat: sample ignored as it is non-finite" ); arma_warn(true, "running_stat: sample ignored as it is non-finite" );
return; return;
} }
running_stat_aux::update_stats(*this, sample); running_stat_aux::update_stats(*this, sample);
} }
 End of changes. 3 change blocks. 
2 lines changed or deleted 2 lines changed or added


 running_stat_vec_bones.hpp   running_stat_vec_bones.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup running_stat_vec //! \addtogroup running_stat_vec
//! @{ //! @{
//! Class for keeping statistics of a continuously sampled process / signal . //! Class for keeping statistics of a continuously sampled process / signal .
//! Useful if the storage of individual samples is not necessary or desired . //! Useful if the storage of individual samples is not necessary or desired .
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 running_stat_vec_meat.hpp   running_stat_vec_meat.hpp 
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2011 Conrad Sanderson // Copyright (C) 2009-2011 Conrad Sanderson
// Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup running_stat_vec //! \addtogroup running_stat_vec
//! @{ //! @{
template<typename eT> template<typename eT>
running_stat_vec<eT>::~running_stat_vec() running_stat_vec<eT>::~running_stat_vec()
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 span.hpp   span.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Stanislav Funiak // Copyright (C) 2011 Stanislav Funiak
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup span //! \addtogroup span
//! @{ //! @{
struct span_alt {}; struct span_alt {};
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 strip.hpp   strip.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup strip //! \addtogroup strip
//! @{ //! @{
template<typename T1> template<typename T1>
struct strip_diagmat struct strip_diagmat
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_bones.hpp   subview_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011 James Sanders // Copyright (C) 2011 James Sanders
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview //! \addtogroup subview
//! @{ //! @{
//! Class for storing data required to construct or apply operations to a s ubmatrix //! Class for storing data required to construct or apply operations to a s ubmatrix
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_cube_bones.hpp   subview_cube_bones.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_cube //! \addtogroup subview_cube
//! @{ //! @{
//! Class for storing data required to construct or apply operations to a s ubcube //! Class for storing data required to construct or apply operations to a s ubcube
//! (i.e. where the subcube starts and ends as well as a reference/pointer to the original cube), //! (i.e. where the subcube starts and ends as well as a reference/pointer to the original cube),
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_cube_meat.hpp   subview_cube_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_cube //! \addtogroup subview_cube
//! @{ //! @{
template<typename eT> template<typename eT>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_elem1_bones.hpp   subview_elem1_bones.hpp 
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2012 Conrad Sanderson // Copyright (C) 2010-2012 Conrad Sanderson
// Copyright (C) 2010-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_elem1 //! \addtogroup subview_elem1
//! @{ //! @{
template<typename eT, typename T1> template<typename eT, typename T1>
class subview_elem1 : public Base<eT, subview_elem1<eT,T1> > class subview_elem1 : public Base<eT, subview_elem1<eT,T1> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_elem1_meat.hpp   subview_elem1_meat.hpp 
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2010-2013 Conrad Sanderson // Copyright (C) 2010-2013 Conrad Sanderson
// Copyright (C) 2010-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_elem1 //! \addtogroup subview_elem1
//! @{ //! @{
template<typename eT, typename T1> template<typename eT, typename T1>
inline inline
skipping to change at line 60 skipping to change at line 60
const uword aa_n_elem = aa.n_elem; const uword aa_n_elem = aa.n_elem;
uword iq,jq; uword iq,jq;
for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2) for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
const uword jj = aa_mem[jq]; const uword jj = aa_mem[jq];
arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::elem( ): index out of bounds" ); arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::elem( ): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_equ >::value == if(is_same_type<op_type, op_subview_elem_equ >::yes) { m_
true) { m_mem[ii] = val; m_mem[jj] = val; } mem[ii] = val; m_mem[jj] = val; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value == else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) { m_
true) { m_mem[ii] += val; m_mem[jj] += val; } mem[ii] += val; m_mem[jj] += val; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value == else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) { m_
true) { m_mem[ii] -= val; m_mem[jj] -= val; } mem[ii] -= val; m_mem[jj] -= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value == else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) { m_
true) { m_mem[ii] *= val; m_mem[jj] *= val; } mem[ii] *= val; m_mem[jj] *= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value == else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) { m_
true) { m_mem[ii] /= val; m_mem[jj] /= val; } mem[ii] /= val; m_mem[jj] /= val; }
} }
if(iq < aa_n_elem) if(iq < aa_n_elem)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bounds" ); arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_equ >::value == if(is_same_type<op_type, op_subview_elem_equ >::yes) { m_
true) { m_mem[ii] = val; } mem[ii] = val; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value == else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) { m_
true) { m_mem[ii] += val; } mem[ii] += val; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value == else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) { m_
true) { m_mem[ii] -= val; } mem[ii] -= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value == else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) { m_
true) { m_mem[ii] *= val; } mem[ii] *= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value == else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) { m_
true) { m_mem[ii] /= val; } mem[ii] /= val; }
} }
} }
template<typename eT, typename T1> template<typename eT, typename T1>
template<typename op_type, typename T2> template<typename op_type, typename T2>
inline inline
void void
subview_elem1<eT,T1>::inplace_op(const subview_elem1<eT,T2>& x) subview_elem1<eT,T1>::inplace_op(const subview_elem1<eT,T2>& x)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
subview_elem1<eT,T1>& s = *this; subview_elem1<eT,T1>& s = *this;
if(&(s.m) == &(x.m)) if(&(s.m) == &(x.m))
{ {
arma_extra_debug_print("subview_elem1::inplace_op(): aliasing detected" ); arma_extra_debug_print("subview_elem1::inplace_op(): aliasing detected" );
const Mat<eT> tmp(x); const Mat<eT> tmp(x);
if(is_same_type<op_type, op_subview_elem_equ >::value == if(is_same_type<op_type, op_subview_elem_equ >::yes) { s.
true) { s.operator= (tmp); } operator= (tmp); }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value == else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) { s.
true) { s.operator+=(tmp); } operator+=(tmp); }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value == else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) { s.
true) { s.operator-=(tmp); } operator-=(tmp); }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value == else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) { s.
true) { s.operator%=(tmp); } operator%=(tmp); }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value == else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) { s.
true) { s.operator/=(tmp); } operator/=(tmp); }
} }
else else
{ {
Mat<eT>& s_m_local = const_cast< Mat<eT>& >(s.m); Mat<eT>& s_m_local = const_cast< Mat<eT>& >(s.m);
const Mat<eT>& x_m_local = x.m; const Mat<eT>& x_m_local = x.m;
const unwrap_check_mixed<T1> s_tmp(s.a.get_ref(), s_m_local); const unwrap_check_mixed<T1> s_tmp(s.a.get_ref(), s_m_local);
const unwrap_check_mixed<T2> x_tmp(x.a.get_ref(), s_m_local); const unwrap_check_mixed<T2> x_tmp(x.a.get_ref(), s_m_local);
const umat& s_aa = s_tmp.M; const umat& s_aa = s_tmp.M;
skipping to change at line 148 skipping to change at line 148
const uword x_ii = x_aa_mem[iq]; const uword x_ii = x_aa_mem[iq];
const uword x_jj = x_aa_mem[jq]; const uword x_jj = x_aa_mem[jq];
arma_debug_check arma_debug_check
( (
(s_ii >= s_m_n_elem) || (s_jj >= s_m_n_elem) || (x_ii >= x_m_n_elem ) || (x_jj >= x_m_n_elem), (s_ii >= s_m_n_elem) || (s_jj >= s_m_n_elem) || (x_ii >= x_m_n_elem ) || (x_jj >= x_m_n_elem),
"Mat::elem(): index out of bounds" "Mat::elem(): index out of bounds"
); );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { s_m_mem[s_ii] = x_m_mem[x_ii]; s_m_mem[s_jj] = x_m_mem[x_jj]; } s_m_mem[s_ii] = x_m_mem[x_ii]; s_m_mem[s_jj] = x_m_mem[x_jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { s_m_mem[s_ii] += x_m_mem[x_ii]; s_m_mem[s_jj] += x_m_mem[x_jj]; } s_m_mem[s_ii] += x_m_mem[x_ii]; s_m_mem[s_jj] += x_m_mem[x_jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { s_m_mem[s_ii] -= x_m_mem[x_ii]; s_m_mem[s_jj] -= x_m_mem[x_jj]; } s_m_mem[s_ii] -= x_m_mem[x_ii]; s_m_mem[s_jj] -= x_m_mem[x_jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { s_m_mem[s_ii] *= x_m_mem[x_ii]; s_m_mem[s_jj] *= x_m_mem[x_jj]; } s_m_mem[s_ii] *= x_m_mem[x_ii]; s_m_mem[s_jj] *= x_m_mem[x_jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { s_m_mem[s_ii] /= x_m_mem[x_ii]; s_m_mem[s_jj] /= x_m_mem[x_jj]; } s_m_mem[s_ii] /= x_m_mem[x_ii]; s_m_mem[s_jj] /= x_m_mem[x_jj]; }
} }
if(iq < s_aa_n_elem) if(iq < s_aa_n_elem)
{ {
const uword s_ii = s_aa_mem[iq]; const uword s_ii = s_aa_mem[iq];
const uword x_ii = x_aa_mem[iq]; const uword x_ii = x_aa_mem[iq];
arma_debug_check arma_debug_check
( (
( (s_ii >= s_m_n_elem) || (x_ii >= x_m_n_elem) ), ( (s_ii >= s_m_n_elem) || (x_ii >= x_m_n_elem) ),
"Mat::elem(): index out of bounds" "Mat::elem(): index out of bounds"
); );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { s_m_mem[s_ii] = x_m_mem[x_ii]; } s_m_mem[s_ii] = x_m_mem[x_ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { s_m_mem[s_ii] += x_m_mem[x_ii]; } s_m_mem[s_ii] += x_m_mem[x_ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { s_m_mem[s_ii] -= x_m_mem[x_ii]; } s_m_mem[s_ii] -= x_m_mem[x_ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { s_m_mem[s_ii] *= x_m_mem[x_ii]; } s_m_mem[s_ii] *= x_m_mem[x_ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { s_m_mem[s_ii] /= x_m_mem[x_ii]; } s_m_mem[s_ii] /= x_m_mem[x_ii]; }
} }
} }
} }
template<typename eT, typename T1> template<typename eT, typename T1>
template<typename op_type, typename T2> template<typename op_type, typename T2>
inline inline
void void
subview_elem1<eT,T1>::inplace_op(const Base<eT,T2>& x) subview_elem1<eT,T1>::inplace_op(const Base<eT,T2>& x)
{ {
skipping to change at line 218 skipping to change at line 218
typename Proxy<T2>::ea_type X = P.get_ea(); typename Proxy<T2>::ea_type X = P.get_ea();
uword iq,jq; uword iq,jq;
for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2) for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
const uword jj = aa_mem[jq]; const uword jj = aa_mem[jq];
arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::ele m(): index out of bounds" ); arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::ele m(): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { m_mem[ii] = X[iq]; m_mem[jj] = X[jq]; } m_mem[ii] = X[iq]; m_mem[jj] = X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { m_mem[ii] += X[iq]; m_mem[jj] += X[jq]; } m_mem[ii] += X[iq]; m_mem[jj] += X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { m_mem[ii] -= X[iq]; m_mem[jj] -= X[jq]; } m_mem[ii] -= X[iq]; m_mem[jj] -= X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { m_mem[ii] *= X[iq]; m_mem[jj] *= X[jq]; } m_mem[ii] *= X[iq]; m_mem[jj] *= X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { m_mem[ii] /= X[iq]; m_mem[jj] /= X[jq]; } m_mem[ii] /= X[iq]; m_mem[jj] /= X[jq]; }
} }
if(iq < aa_n_elem) if(iq < aa_n_elem)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bound s" ); arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bound s" );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { m_mem[ii] = X[iq]; } m_mem[ii] = X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { m_mem[ii] += X[iq]; } m_mem[ii] += X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { m_mem[ii] -= X[iq]; } m_mem[ii] -= X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { m_mem[ii] *= X[iq]; } m_mem[ii] *= X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { m_mem[ii] /= X[iq]; } m_mem[ii] /= X[iq]; }
} }
} }
else else
{ {
arma_extra_debug_print("subview_elem1::inplace_op(): aliasing or prefer _at_accessor detected"); arma_extra_debug_print("subview_elem1::inplace_op(): aliasing or prefer _at_accessor detected");
const unwrap_check<typename Proxy<T2>::stored_type> tmp(P.Q, is_alias); const unwrap_check<typename Proxy<T2>::stored_type> tmp(P.Q, is_alias);
const Mat<eT>& M = tmp.M; const Mat<eT>& M = tmp.M;
const eT* X = M.memptr(); const eT* X = M.memptr();
uword iq,jq; uword iq,jq;
for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2) for(iq=0, jq=1; jq < aa_n_elem; iq+=2, jq+=2)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
const uword jj = aa_mem[jq]; const uword jj = aa_mem[jq];
arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::ele m(): index out of bounds" ); arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::ele m(): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { m_mem[ii] = X[iq]; m_mem[jj] = X[jq]; } m_mem[ii] = X[iq]; m_mem[jj] = X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { m_mem[ii] += X[iq]; m_mem[jj] += X[jq]; } m_mem[ii] += X[iq]; m_mem[jj] += X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { m_mem[ii] -= X[iq]; m_mem[jj] -= X[jq]; } m_mem[ii] -= X[iq]; m_mem[jj] -= X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { m_mem[ii] *= X[iq]; m_mem[jj] *= X[jq]; } m_mem[ii] *= X[iq]; m_mem[jj] *= X[jq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { m_mem[ii] /= X[iq]; m_mem[jj] /= X[jq]; } m_mem[ii] /= X[iq]; m_mem[jj] /= X[jq]; }
} }
if(iq < aa_n_elem) if(iq < aa_n_elem)
{ {
const uword ii = aa_mem[iq]; const uword ii = aa_mem[iq];
arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bound s" ); arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bound s" );
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { m_mem[ii] = X[iq]; } m_mem[ii] = X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { m_mem[ii] += X[iq]; } m_mem[ii] += X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { m_mem[ii] -= X[iq]; } m_mem[ii] -= X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { m_mem[ii] *= X[iq]; } m_mem[ii] *= X[iq]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { m_mem[ii] /= X[iq]; } m_mem[ii] /= X[iq]; }
} }
} }
} }
// //
// //
template<typename eT, typename T1> template<typename eT, typename T1>
arma_inline arma_inline
const Op<subview_elem1<eT,T1>,op_htrans> const Op<subview_elem1<eT,T1>,op_htrans>
skipping to change at line 613 skipping to change at line 613
eT* out_mem = out.memptr(); eT* out_mem = out.memptr();
uword i,j; uword i,j;
for(i=0, j=1; j<aa_n_elem; i+=2, j+=2) for(i=0, j=1; j<aa_n_elem; i+=2, j+=2)
{ {
const uword ii = aa_mem[i]; const uword ii = aa_mem[i];
const uword jj = aa_mem[j]; const uword jj = aa_mem[j];
arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::elem( ): index out of bounds" ); arma_debug_check( ( (ii >= m_n_elem) || (jj >= m_n_elem) ), "Mat::elem( ): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_inplace_plus >::value == if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) { ou
true) { out_mem[i] += m_mem[ii]; out_mem[j] += m_mem[jj]; } t_mem[i] += m_mem[ii]; out_mem[j] += m_mem[jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value == else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) { ou
true) { out_mem[i] -= m_mem[ii]; out_mem[j] -= m_mem[jj]; } t_mem[i] -= m_mem[ii]; out_mem[j] -= m_mem[jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value == else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) { ou
true) { out_mem[i] *= m_mem[ii]; out_mem[j] *= m_mem[jj]; } t_mem[i] *= m_mem[ii]; out_mem[j] *= m_mem[jj]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value == else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) { ou
true) { out_mem[i] /= m_mem[ii]; out_mem[j] /= m_mem[jj]; } t_mem[i] /= m_mem[ii]; out_mem[j] /= m_mem[jj]; }
} }
if(i < aa_n_elem) if(i < aa_n_elem)
{ {
const uword ii = aa_mem[i]; const uword ii = aa_mem[i];
arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bounds" ); arma_debug_check( (ii >= m_n_elem) , "Mat::elem(): index out of bounds" );
if(is_same_type<op_type, op_subview_elem_inplace_plus >::value == if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) { ou
true) { out_mem[i] += m_mem[ii]; } t_mem[i] += m_mem[ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value == else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) { ou
true) { out_mem[i] -= m_mem[ii]; } t_mem[i] -= m_mem[ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value == else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) { ou
true) { out_mem[i] *= m_mem[ii]; } t_mem[i] *= m_mem[ii]; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value == else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) { ou
true) { out_mem[i] /= m_mem[ii]; } t_mem[i] /= m_mem[ii]; }
} }
} }
template<typename eT, typename T1> template<typename eT, typename T1>
inline inline
void void
subview_elem1<eT,T1>::plus_inplace(Mat<eT>& out, const subview_elem1& in) subview_elem1<eT,T1>::plus_inplace(Mat<eT>& out, const subview_elem1& in)
{ {
arma_extra_debug_sigprint(); arma_extra_debug_sigprint();
 End of changes. 13 change blocks. 
107 lines changed or deleted 107 lines changed or added


 subview_elem2_bones.hpp   subview_elem2_bones.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_elem2 //! \addtogroup subview_elem2
//! @{ //! @{
template<typename eT, typename T1, typename T2> template<typename eT, typename T1, typename T2>
class subview_elem2 : public Base<eT, subview_elem2<eT,T1,T2> > class subview_elem2 : public Base<eT, subview_elem2<eT,T1,T2> >
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_elem2_meat.hpp   subview_elem2_meat.hpp 
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2012-2013 Conrad Sanderson // Copyright (C) 2012-2013 Conrad Sanderson
// Copyright (C) 2012-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_elem2 //! \addtogroup subview_elem2
//! @{ //! @{
template<typename eT, typename T1, typename T2> template<typename eT, typename T1, typename T2>
inline inline
skipping to change at line 82 skipping to change at line 82
const uword col = ci_mem[ci_count]; const uword col = ci_mem[ci_count];
arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " ); arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " );
for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count) for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count)
{ {
const uword row = ri_mem[ri_count]; const uword row = ri_mem[ri_count];
arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" ); arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" );
if(is_same_type<op_type, op_subview_elem_equ >::value if(is_same_type<op_type, op_subview_elem_equ >::yes)
== true) { m_local.at(row,col) = val; } { m_local.at(row,col) = val; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes)
== true) { m_local.at(row,col) += val; } { m_local.at(row,col) += val; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes)
== true) { m_local.at(row,col) -= val; } { m_local.at(row,col) -= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes)
== true) { m_local.at(row,col) *= val; } { m_local.at(row,col) *= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes)
== true) { m_local.at(row,col) /= val; } { m_local.at(row,col) /= val; }
} }
} }
} }
else else
if( (all_rows == true) && (all_cols == false) ) if( (all_rows == true) && (all_cols == false) )
{ {
const unwrap_check_mixed<T2> tmp2(base_ci.get_ref(), m_local); const unwrap_check_mixed<T2> tmp2(base_ci.get_ref(), m_local);
const umat& ci = tmp2.M; const umat& ci = tmp2.M;
skipping to change at line 114 skipping to change at line 114
const uword ci_n_elem = ci.n_elem; const uword ci_n_elem = ci.n_elem;
for(uword ci_count=0; ci_count < ci_n_elem; ++ci_count) for(uword ci_count=0; ci_count < ci_n_elem; ++ci_count)
{ {
const uword col = ci_mem[ci_count]; const uword col = ci_mem[ci_count];
arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " ); arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " );
eT* colptr = m_local.colptr(col); eT* colptr = m_local.colptr(col);
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { arrayops::inplace_set (colptr, val, m_n_rows); } arrayops::inplace_set (colptr, val, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { arrayops::inplace_plus (colptr, val, m_n_rows); } arrayops::inplace_plus (colptr, val, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { arrayops::inplace_minus(colptr, val, m_n_rows); } arrayops::inplace_minus(colptr, val, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { arrayops::inplace_mul (colptr, val, m_n_rows); } arrayops::inplace_mul (colptr, val, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { arrayops::inplace_div (colptr, val, m_n_rows); } arrayops::inplace_div (colptr, val, m_n_rows); }
} }
} }
else else
if( (all_rows == false) && (all_cols == true) ) if( (all_rows == false) && (all_cols == true) )
{ {
const unwrap_check_mixed<T1> tmp1(base_ri.get_ref(), m_local); const unwrap_check_mixed<T1> tmp1(base_ri.get_ref(), m_local);
const umat& ri = tmp1.M; const umat& ri = tmp1.M;
arma_debug_check arma_debug_check
skipping to change at line 145 skipping to change at line 145
const uword ri_n_elem = ri.n_elem; const uword ri_n_elem = ri.n_elem;
for(uword col=0; col < m_n_cols; ++col) for(uword col=0; col < m_n_cols; ++col)
{ {
for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count) for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count)
{ {
const uword row = ri_mem[ri_count]; const uword row = ri_mem[ri_count];
arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" ); arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" );
if(is_same_type<op_type, op_subview_elem_equ >::value if(is_same_type<op_type, op_subview_elem_equ >::yes)
== true) { m_local.at(row,col) = val; } { m_local.at(row,col) = val; }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes)
== true) { m_local.at(row,col) += val; } { m_local.at(row,col) += val; }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes)
== true) { m_local.at(row,col) -= val; } { m_local.at(row,col) -= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes)
== true) { m_local.at(row,col) *= val; } { m_local.at(row,col) *= val; }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes)
== true) { m_local.at(row,col) /= val; } { m_local.at(row,col) /= val; }
} }
} }
} }
} }
template<typename eT, typename T1, typename T2> template<typename eT, typename T1, typename T2>
template<typename op_type, typename expr> template<typename op_type, typename expr>
inline inline
void void
subview_elem2<eT,T1,T2>::inplace_op(const Base<eT,expr>& x) subview_elem2<eT,T1,T2>::inplace_op(const Base<eT,expr>& x)
skipping to change at line 205 skipping to change at line 205
const uword col = ci_mem[ci_count]; const uword col = ci_mem[ci_count];
arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " ); arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " );
for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count) for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count)
{ {
const uword row = ri_mem[ri_count]; const uword row = ri_mem[ri_count];
arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" ); arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" );
if(is_same_type<op_type, op_subview_elem_equ >::value if(is_same_type<op_type, op_subview_elem_equ >::yes)
== true) { m_local.at(row,col) = X.at(ri_count, ci_count); } { m_local.at(row,col) = X.at(ri_count, ci_count); }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes)
== true) { m_local.at(row,col) += X.at(ri_count, ci_count); } { m_local.at(row,col) += X.at(ri_count, ci_count); }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes)
== true) { m_local.at(row,col) -= X.at(ri_count, ci_count); } { m_local.at(row,col) -= X.at(ri_count, ci_count); }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes)
== true) { m_local.at(row,col) *= X.at(ri_count, ci_count); } { m_local.at(row,col) *= X.at(ri_count, ci_count); }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes)
== true) { m_local.at(row,col) /= X.at(ri_count, ci_count); } { m_local.at(row,col) /= X.at(ri_count, ci_count); }
} }
} }
} }
else else
if( (all_rows == true) && (all_cols == false) ) if( (all_rows == true) && (all_cols == false) )
{ {
const unwrap_check_mixed<T2> tmp2(base_ci.get_ref(), m_local); const unwrap_check_mixed<T2> tmp2(base_ci.get_ref(), m_local);
const umat& ci = tmp2.M; const umat& ci = tmp2.M;
skipping to change at line 240 skipping to change at line 240
for(uword ci_count=0; ci_count < ci_n_elem; ++ci_count) for(uword ci_count=0; ci_count < ci_n_elem; ++ci_count)
{ {
const uword col = ci_mem[ci_count]; const uword col = ci_mem[ci_count];
arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " ); arma_debug_check( (col > m_n_cols), "Mat::elem(): index out of bounds " );
eT* m_colptr = m_local.colptr(col); eT* m_colptr = m_local.colptr(col);
const eT* X_colptr = X.colptr(ci_count); const eT* X_colptr = X.colptr(ci_count);
if(is_same_type<op_type, op_subview_elem_equ >::value = if(is_same_type<op_type, op_subview_elem_equ >::yes) {
= true) { arrayops::copy (m_colptr, X_colptr, m_n_rows); } arrayops::copy (m_colptr, X_colptr, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value = else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes) {
= true) { arrayops::inplace_plus (m_colptr, X_colptr, m_n_rows); } arrayops::inplace_plus (m_colptr, X_colptr, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value = else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes) {
= true) { arrayops::inplace_minus(m_colptr, X_colptr, m_n_rows); } arrayops::inplace_minus(m_colptr, X_colptr, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value = else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes) {
= true) { arrayops::inplace_mul (m_colptr, X_colptr, m_n_rows); } arrayops::inplace_mul (m_colptr, X_colptr, m_n_rows); }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value = else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes) {
= true) { arrayops::inplace_div (m_colptr, X_colptr, m_n_rows); } arrayops::inplace_div (m_colptr, X_colptr, m_n_rows); }
} }
} }
else else
if( (all_rows == false) && (all_cols == true) ) if( (all_rows == false) && (all_cols == true) )
{ {
const unwrap_check_mixed<T1> tmp1(base_ri.get_ref(), m_local); const unwrap_check_mixed<T1> tmp1(base_ri.get_ref(), m_local);
const umat& ri = tmp1.M; const umat& ri = tmp1.M;
arma_debug_check arma_debug_check
skipping to change at line 273 skipping to change at line 273
arma_debug_assert_same_size( ri_n_elem, m_n_cols, X.n_rows, X.n_cols, " Mat::elem()" ); arma_debug_assert_same_size( ri_n_elem, m_n_cols, X.n_rows, X.n_cols, " Mat::elem()" );
for(uword col=0; col < m_n_cols; ++col) for(uword col=0; col < m_n_cols; ++col)
{ {
for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count) for(uword ri_count=0; ri_count < ri_n_elem; ++ri_count)
{ {
const uword row = ri_mem[ri_count]; const uword row = ri_mem[ri_count];
arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" ); arma_debug_check( (row > m_n_rows), "Mat::elem(): index out of boun ds" );
if(is_same_type<op_type, op_subview_elem_equ >::value if(is_same_type<op_type, op_subview_elem_equ >::yes)
== true) { m_local.at(row,col) = X.at(ri_count, col); } { m_local.at(row,col) = X.at(ri_count, col); }
else if(is_same_type<op_type, op_subview_elem_inplace_plus >::value else if(is_same_type<op_type, op_subview_elem_inplace_plus >::yes)
== true) { m_local.at(row,col) += X.at(ri_count, col); } { m_local.at(row,col) += X.at(ri_count, col); }
else if(is_same_type<op_type, op_subview_elem_inplace_minus>::value else if(is_same_type<op_type, op_subview_elem_inplace_minus>::yes)
== true) { m_local.at(row,col) -= X.at(ri_count, col); } { m_local.at(row,col) -= X.at(ri_count, col); }
else if(is_same_type<op_type, op_subview_elem_inplace_schur>::value else if(is_same_type<op_type, op_subview_elem_inplace_schur>::yes)
== true) { m_local.at(row,col) *= X.at(ri_count, col); } { m_local.at(row,col) *= X.at(ri_count, col); }
else if(is_same_type<op_type, op_subview_elem_inplace_div >::value else if(is_same_type<op_type, op_subview_elem_inplace_div >::yes)
== true) { m_local.at(row,col) /= X.at(ri_count, col); } { m_local.at(row,col) /= X.at(ri_count, col); }
} }
} }
} }
} }
// //
// //
template<typename eT, typename T1, typename T2> template<typename eT, typename T1, typename T2>
inline inline
 End of changes. 8 change blocks. 
61 lines changed or deleted 61 lines changed or added


 subview_field_bones.hpp   subview_field_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_field //! \addtogroup subview_field
//! @{ //! @{
//! Class for storing data required to construct or apply operations to a s ubfield //! Class for storing data required to construct or apply operations to a s ubfield
//! (i.e. where the subfield starts and ends as well as a reference/pointer to the original field), //! (i.e. where the subfield starts and ends as well as a reference/pointer to the original field),
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_field_meat.hpp   subview_field_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview_field //! \addtogroup subview_field
//! @{ //! @{
template<typename oT> template<typename oT>
inline inline
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 subview_meat.hpp   subview_meat.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2011 James Sanders // Copyright (C) 2011 James Sanders
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup subview //! \addtogroup subview
//! @{ //! @{
template<typename eT> template<typename eT>
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 traits.hpp   traits.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup traits //! \addtogroup traits
//! @{ //! @{
template<typename T1> template<typename T1>
struct get_pod_type struct get_pod_type
skipping to change at line 358 skipping to change at line 358
{ static const bool value = true; }; { static const bool value = true; };
template<typename T1> template<typename T1>
struct is_op_htrans2< const Op<T1,op_htrans2> > struct is_op_htrans2< const Op<T1,op_htrans2> >
{ static const bool value = true; }; { static const bool value = true; };
// //
// //
template<typename T> template<typename T>
struct is_Mat_trans
{ static const bool value = false; };
template<typename T1>
struct is_Mat_trans< Op<T1,op_htrans> >
{ static const bool value = is_Mat<T1>::value; };
template<typename T1>
struct is_Mat_trans< Op<T1,op_htrans2> >
{ static const bool value = is_Mat<T1>::value; };
//
//
template<typename T>
struct is_GenCube struct is_GenCube
{ static const bool value = false; }; { static const bool value = false; };
template<typename eT, typename gen_type> template<typename eT, typename gen_type>
struct is_GenCube< GenCube<eT,gen_type> > struct is_GenCube< GenCube<eT,gen_type> >
{ static const bool value = true; }; { static const bool value = true; };
template<typename T> template<typename T>
struct is_OpCube struct is_OpCube
{ static const bool value = false; }; { static const bool value = false; };
skipping to change at line 644 skipping to change at line 659
|| is_mtSpOp<T1>::value || is_mtSpOp<T1>::value
; ;
}; };
// //
// //
// //
template<typename T1, typename T2> template<typename T1, typename T2>
struct is_same_type struct is_same_type
{ static const bool value = false; }; {
static const bool value = false;
static const bool yes = false;
static const bool no = true;
};
template<typename T1> template<typename T1>
struct is_same_type<T1,T1> struct is_same_type<T1,T1>
{ static const bool value = true; }; {
static const bool value = true;
static const bool yes = true;
static const bool no = false;
};
// //
// //
// //
template<typename T1> template<typename T1>
struct is_u8 struct is_u8
{ static const bool value = false; }; { static const bool value = false; };
template<> template<>
skipping to change at line 857 skipping to change at line 880
{ static const bool value = false; }; { static const bool value = false; };
template<> template<>
struct is_complex_strict< std::complex<float> > struct is_complex_strict< std::complex<float> >
{ static const bool value = true; }; { static const bool value = true; };
template<> template<>
struct is_complex_strict< std::complex<double> > struct is_complex_strict< std::complex<double> >
{ static const bool value = true; }; { static const bool value = true; };
template<typename T1>
struct is_cx
{
static const bool value = false;
static const bool yes = false;
static const bool no = true;
};
// template<>
template<typename T>
struct is_cx< std::complex<T> >
{
static const bool value = true;
static const bool yes = true;
static const bool no = false;
};
//! check for a weird implementation of the std::complex class //! check for a weird implementation of the std::complex class
template<typename T1> template<typename T1>
struct is_supported_complex struct is_supported_complex
{ static const bool value = false; }; { static const bool value = false; };
//template<> //template<>
template<typename eT> template<typename eT>
struct is_supported_complex< std::complex<eT> > struct is_supported_complex< std::complex<eT> >
{ static const bool value = ( sizeof(std::complex<eT>) == 2*sizeof(eT) ); }; { static const bool value = ( sizeof(std::complex<eT>) == 2*sizeof(eT) ); };
 End of changes. 6 change blocks. 
3 lines changed or deleted 43 lines changed or added


 typedef.hpp   typedef.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup typedef //! \addtogroup typedef
//! @{ //! @{
#if UCHAR_MAX >= 0xff #if UCHAR_MAX >= 0xff
typedef unsigned char u8; typedef unsigned char u8;
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 typedef_blas_int.hpp   typedef_blas_int.hpp 
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// Copyright (C) 2011 Conrad Sanderson // Copyright (C) 2011 Conrad Sanderson
// Copyright (C) 2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup typedef //! \addtogroup typedef
//! @{ //! @{
#if defined(ARMA_BLAS_LONG_LONG) #if defined(ARMA_BLAS_LONG_LONG)
typedef long long blas_int; typedef long long blas_int;
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 typedef_fixed.hpp   typedef_fixed.hpp 
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// Copyright (C) 2010 Conrad Sanderson // Copyright (C) 2010 Conrad Sanderson
// Copyright (C) 2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup typedef_fixed //! \addtogroup typedef_fixed
//! @{ //! @{
typedef umat::fixed<2,2> umat22; typedef umat::fixed<2,2> umat22;
typedef umat::fixed<3,3> umat33; typedef umat::fixed<3,3> umat33;
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 undefine_conflicts.hpp   undefine_conflicts.hpp 
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2011 Conrad Sanderson // Copyright (C) 2008-2011 Conrad Sanderson
// Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#if defined(log2) #if defined(log2)
#undef log2 #undef log2
#if defined(__GNUG__) #if defined(__GNUG__)
#warning "detected 'log2' macro and undefined it" #warning "detected 'log2' macro and undefined it"
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 unwrap.hpp   unwrap.hpp 
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2013 Conrad Sanderson // Copyright (C) 2008-2013 Conrad Sanderson
// Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup unwrap //! \addtogroup unwrap
//! @{ //! @{
template<typename T1> template<typename T1>
struct unwrap_default struct unwrap_default
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 unwrap_cube.hpp   unwrap_cube.hpp 
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2010 Conrad Sanderson // Copyright (C) 2008-2010 Conrad Sanderson
// Copyright (C) 2008-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup unwrap_cube //! \addtogroup unwrap_cube
//! @{ //! @{
template<typename T1> template<typename T1>
class unwrap_cube class unwrap_cube
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 unwrap_spmat.hpp   unwrap_spmat.hpp 
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// Copyright (C) 2012 Conrad Sanderson // Copyright (C) 2012 Conrad Sanderson
// Copyright (C) 2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup unwrap_spmat //! \addtogroup unwrap_spmat
//! @{ //! @{
template<typename T1> template<typename T1>
struct unwrap_spmat struct unwrap_spmat
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 upgrade_val.hpp   upgrade_val.hpp 
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// Copyright (C) 2009-2010 Conrad Sanderson // Copyright (C) 2009-2010 Conrad Sanderson
// Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup upgrade_val //! \addtogroup upgrade_val
//! @{ //! @{
//! upgrade_val is used to ensure an operation such as multiplication is po ssible between two types. //! upgrade_val is used to ensure an operation such as multiplication is po ssible between two types.
//! values are upgraded only where necessary. //! values are upgraded only where necessary.
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 wall_clock_bones.hpp   wall_clock_bones.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup wall_clock //! \addtogroup wall_clock
//! @{ //! @{
//! Class for measuring time intervals //! Class for measuring time intervals
class wall_clock class wall_clock
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added


 wall_clock_meat.hpp   wall_clock_meat.hpp 
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// Copyright (C) 2008-2012 Conrad Sanderson // Copyright (C) 2008-2012 Conrad Sanderson
// Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
// //
// This Source Code Form is subject to the terms of the Mozilla Public // 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 // 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/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
//! \addtogroup wall_clock //! \addtogroup wall_clock
//! @{ //! @{
inline inline
wall_clock::wall_clock() wall_clock::wall_clock()
 End of changes. 2 change blocks. 
1 lines changed or deleted 1 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/