more code to support __cpp_multidimensional_subscript
This commit is contained in:
@@ -271,6 +271,11 @@ class Cube : public BaseCube< eT, Cube<eT> >
|
||||
arma_inline arma_warn_unused eT& operator() (const uword i);
|
||||
arma_inline arma_warn_unused const eT& operator() (const uword i) const;
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
arma_inline arma_warn_unused eT& operator[] (const uword in_row, const uword in_col, const uword in_slice);
|
||||
arma_inline arma_warn_unused const eT& operator[] (const uword in_row, const uword in_col, const uword in_slice) const;
|
||||
#endif
|
||||
|
||||
arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col, const uword in_slice);
|
||||
arma_inline arma_warn_unused const eT& at (const uword in_row, const uword in_col, const uword in_slice) const;
|
||||
|
||||
@@ -490,6 +495,11 @@ class Cube<eT>::fixed : public Cube<eT>
|
||||
arma_inline arma_warn_unused eT& operator() (const uword i);
|
||||
arma_inline arma_warn_unused const eT& operator() (const uword i) const;
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
arma_inline arma_warn_unused eT& operator[] (const uword in_row, const uword in_col, const uword in_slice);
|
||||
arma_inline arma_warn_unused const eT& operator[] (const uword in_row, const uword in_col, const uword in_slice) const;
|
||||
#endif
|
||||
|
||||
arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col, const uword in_slice);
|
||||
arma_inline arma_warn_unused const eT& at (const uword in_row, const uword in_col, const uword in_slice) const;
|
||||
|
||||
|
||||
@@ -3456,6 +3456,34 @@ Cube<eT>::operator() (const uword in_row, const uword in_col, const uword in_sli
|
||||
|
||||
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
eT&
|
||||
Cube<eT>::operator[] (const uword in_row, const uword in_col, const uword in_slice)
|
||||
{
|
||||
return access::rw( mem[in_slice*n_elem_slice + in_col*n_rows + in_row] );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
const eT&
|
||||
Cube<eT>::operator[] (const uword in_row, const uword in_col, const uword in_slice) const
|
||||
{
|
||||
return mem[in_slice*n_elem_slice + in_col*n_rows + in_row];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
@@ -5409,6 +5437,38 @@ Cube<eT>::fixed<fixed_n_rows, fixed_n_cols, fixed_n_slices>::operator() (const u
|
||||
|
||||
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
|
||||
template<typename eT>
|
||||
template<uword fixed_n_rows, uword fixed_n_cols, uword fixed_n_slices>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
eT&
|
||||
Cube<eT>::fixed<fixed_n_rows, fixed_n_cols, fixed_n_slices>::operator[] (const uword in_row, const uword in_col, const uword in_slice)
|
||||
{
|
||||
const uword i = in_slice*fixed_n_elem_slice + in_col*fixed_n_rows + in_row;
|
||||
|
||||
return (use_extra) ? mem_local_extra[i] : mem_local[i];
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename eT>
|
||||
template<uword fixed_n_rows, uword fixed_n_cols, uword fixed_n_slices>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
const eT&
|
||||
Cube<eT>::fixed<fixed_n_rows, fixed_n_cols, fixed_n_slices>::operator[] (const uword in_row, const uword in_col, const uword in_slice) const
|
||||
{
|
||||
const uword i = in_slice*fixed_n_elem_slice + in_col*fixed_n_rows + in_row;
|
||||
|
||||
return (use_extra) ? mem_local_extra[i] : mem_local[i];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
template<typename eT>
|
||||
template<uword fixed_n_rows, uword fixed_n_cols, uword fixed_n_slices>
|
||||
arma_inline
|
||||
|
||||
@@ -276,14 +276,22 @@ class SpMat : public SpBase< eT, SpMat<eT> >
|
||||
// access the i-th element; if there is nothing at element i, 0 is returned
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> operator[] (const uword i);
|
||||
arma_inline arma_warn_unused eT operator[] (const uword i) const;
|
||||
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> at (const uword i);
|
||||
arma_inline arma_warn_unused eT at (const uword i) const;
|
||||
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> operator() (const uword i);
|
||||
arma_inline arma_warn_unused eT operator() (const uword i) const;
|
||||
|
||||
// access the element at the given row and column; if there is nothing at that position, 0 is returned
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> operator[] (const uword in_row, const uword in_col);
|
||||
arma_inline arma_warn_unused eT operator[] (const uword in_row, const uword in_col) const;
|
||||
#endif
|
||||
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> at (const uword in_row, const uword in_col);
|
||||
arma_inline arma_warn_unused eT at (const uword in_row, const uword in_col) const;
|
||||
|
||||
arma_inline arma_warn_unused SpMat_MapMat_val<eT> operator() (const uword in_row, const uword in_col);
|
||||
arma_inline arma_warn_unused eT operator() (const uword in_row, const uword in_col) const;
|
||||
|
||||
|
||||
@@ -3326,6 +3326,32 @@ SpMat<eT>::operator()(const uword i) const
|
||||
* If there is nothing at that position, 0 is returned.
|
||||
*/
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
SpMat_MapMat_val<eT>
|
||||
SpMat<eT>::operator[] (const uword in_row, const uword in_col)
|
||||
{
|
||||
return SpMat_MapMat_val<eT>((*this), cache, in_row, in_col);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
eT
|
||||
SpMat<eT>::operator[] (const uword in_row, const uword in_col) const
|
||||
{
|
||||
return get_value(in_row, in_col);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
template<typename eT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
|
||||
@@ -97,9 +97,19 @@ class field
|
||||
arma_inline arma_warn_unused oT& operator()(const uword i);
|
||||
arma_inline arma_warn_unused const oT& operator()(const uword i) const;
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
arma_inline arma_warn_unused oT& operator[](const uword row, const uword col);
|
||||
arma_inline arma_warn_unused const oT& operator[](const uword row, const uword col) const;
|
||||
#endif
|
||||
|
||||
arma_inline arma_warn_unused oT& at(const uword row, const uword col);
|
||||
arma_inline arma_warn_unused const oT& at(const uword row, const uword col) const;
|
||||
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
arma_inline arma_warn_unused oT& operator[](const uword row, const uword col, const uword slice);
|
||||
arma_inline arma_warn_unused const oT& operator[](const uword row, const uword col, const uword slice) const;
|
||||
#endif
|
||||
|
||||
arma_inline arma_warn_unused oT& at(const uword row, const uword col, const uword slice);
|
||||
arma_inline arma_warn_unused const oT& at(const uword row, const uword col, const uword slice) const;
|
||||
|
||||
|
||||
@@ -601,6 +601,34 @@ field<oT>::operator() (const uword in_row, const uword in_col, const uword in_sl
|
||||
|
||||
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
oT&
|
||||
field<oT>::operator[] (const uword in_row, const uword in_col)
|
||||
{
|
||||
return (*mem[in_row + in_col*n_rows]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
const oT&
|
||||
field<oT>::operator[] (const uword in_row, const uword in_col) const
|
||||
{
|
||||
return (*mem[in_row + in_col*n_rows]);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
@@ -625,6 +653,34 @@ field<oT>::at(const uword in_row, const uword in_col) const
|
||||
|
||||
|
||||
|
||||
#if defined(__cpp_multidimensional_subscript)
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
oT&
|
||||
field<oT>::operator[] (const uword in_row, const uword in_col, const uword in_slice)
|
||||
{
|
||||
return (*mem[in_row + in_col*n_rows + in_slice*(n_rows*n_cols)]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
arma_warn_unused
|
||||
const oT&
|
||||
field<oT>::operator[] (const uword in_row, const uword in_col, const uword in_slice) const
|
||||
{
|
||||
return (*mem[in_row + in_col*n_rows + in_slice*(n_rows*n_cols)]);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//! element accessor; no bounds check
|
||||
template<typename oT>
|
||||
arma_inline
|
||||
|
||||
Reference in New Issue
Block a user