📄 valarray
字号:
while( !gsl->is_reseted() )
{
(*_C_array)[__i] = value;
__i= gsl->next_ind();
}
}
// computed assignment
template <class _TypeT>
inline void gslice_array<_TypeT>::operator*= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] *= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator/= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] /= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator+= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] += __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator-= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] -= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator%= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] %= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator^= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] ^= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator&= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] &= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator|= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] |= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator<<= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] <<= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
template <class _TypeT>
inline void gslice_array<_TypeT>::operator>>= (const valarray<_TypeT>& __rhs) const
{
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &_C_slice);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( (!gsl->is_reseted()) && (__cpt < __rhs.size()) )
{
(*_C_array)[__i] >>= __rhs[__cpt];
__i= gsl->next_ind();
__cpt++;
}
}
inline size_t gslice::ind_numb() const
{
size_t value = 1;
for(size_t __i=0; __i< _C_length.size(); __i++ )
value*= _C_length[__i];
return value;
}
template <class _TypeT>
inline valarray<_TypeT> valarray<_TypeT>::operator[] (slice __slice) const
{
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), size ());
for (size_t __i = __slice.start (), __j = 0; __j != __slice.size();
__i += __slice.stride (), ++__j)
__tmp [__j] = _C_array [__i];
return valarray<_TypeT>(__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>::valarray (const slice_array<_TypeT>& sl_ar)
{
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), sl_ar.get_slice ().size());
size_t __i = sl_ar.get_slice().start();
size_t __cpt = 0;
while( __cpt < sl_ar.get_slice().size() )
{
__tmp[__cpt] = (*(sl_ar.get_ref_mem_array()))[__i];
__i+= sl_ar.get_slice().stride();
__cpt++;
}
_C_array.swap (__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>&
valarray<_TypeT>::operator= (const slice_array<_TypeT>& sl_ar)
{
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), sl_ar.get_slice ().size());
size_t __i = sl_ar.get_slice().start();
size_t __cpt = 0;
while( __cpt < sl_ar.get_slice().size() )
{
__tmp[__cpt] = (*(sl_ar.get_ref_mem_array()))[__i];
__i+= sl_ar.get_slice().stride();
__cpt++;
}
if ( &_C_array == sl_ar.get_ref_mem_array() )
_C_array.resize(0);
_C_array.swap (__tmp);
return *this;
}
template <class _TypeT>
inline valarray<_TypeT>
valarray<_TypeT>::operator[](const gslice& sl) const
{
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), sl.ind_numb());
gslice *gsl = _RWSTD_CONST_CAST (gslice*, &sl);
size_t __i = gsl->next_ind();
size_t __cpt = 0;
while( !sl.is_reseted() )
{
__tmp[__cpt] = _C_array[__i];
__i= gsl->next_ind();
__cpt++;
}
return valarray<_TypeT>(__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>::valarray(const gslice_array<_TypeT>& sl_ar)
{
gslice sl(sl_ar.get_slice());
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), sl.ind_numb());
size_t __i = sl.next_ind();
size_t __cpt = 0;
while( !sl.is_reseted() )
{
__tmp[__cpt] = (*(sl_ar.get_ref_mem_array()))[__i];
__i= sl.next_ind();
__cpt++;
}
_C_array.swap (__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>&
valarray<_TypeT>::operator= (const gslice_array<_TypeT>& sl_ar)
{
gslice sl(sl_ar.get_slice());
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), sl.ind_numb());
size_t __i = sl.next_ind();
size_t __cpt = 0;
while( !sl.is_reseted() )
{
__tmp[__cpt] = (*(sl_ar.get_ref_mem_array()))[__i];
__i= sl.next_ind();
__cpt++;
}
if ( &_C_array == sl_ar.get_ref_mem_array() )
_C_array.resize(0);
_C_array.swap (__tmp);
return *this;
}
template <class _TypeT>
inline valarray<_TypeT>
valarray<_TypeT>::operator[](const valarray<bool>& __rhs) const
{
size_t __i, __n = 0;
for(__i=0; __i < __rhs.size(); __i++ )
if ( __rhs[__i]) __n++;
_RW::__rw_array <_TypeT> __tmp = _RW::__rw_array <_TypeT>(_TypeT (), __n);
size_t __cpt = 0;
for( __i=0; __i < __rhs.size(); __i++ )
if ( __rhs[__i]) __tmp[__cpt++] = _C_array[__i];
return valarray<_TypeT>(__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>::valarray(const mask_array<_TypeT>& __rhs)
{
mask_array<_TypeT> *msk = _RWSTD_CONST_CAST (mask_array<_TypeT>*, &__rhs);
const valarray<bool>*sec = msk->get_array_pt();
size_t __i, __n = 0;
for(__i = 0; __i < sec->size(); __i++)
if ( (*sec)[__i]) __n++;
_RW::__rw_array <_TypeT> __tmp = _RW::__rw_array <_TypeT>(_TypeT (), __n);
size_t __cpt = 0;
for( __i=0; __i < sec->size(); __i++ )
if ( (*sec)[__i]) __tmp[__cpt++] = (*(__rhs.get_ref_mem_array()))[__i];
_C_array.swap (__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>&
valarray<_TypeT>::operator= (const mask_array<_TypeT>& __rhs)
{
mask_array<_TypeT> *msk = _RWSTD_CONST_CAST (mask_array<_TypeT>*, &__rhs);
const valarray<bool>*sec = msk->get_array_pt();
size_t __i, __n = 0;
for (__i = 0; __i < sec->size(); __i++)
if ((*sec)[__i])
__n++;
_RW::__rw_array <_TypeT> __tmp = _RW::__rw_array <_TypeT>(_TypeT (), __n);
size_t __cpt = 0;
for( __i=0; __i < sec->size(); __i++ )
if ( (*sec)[__i]) __tmp[__cpt++] = (*(__rhs.get_ref_mem_array()))[__i];
if ( &_C_array == __rhs.get_ref_mem_array() )
_C_array.resize(0);
_C_array.swap (__tmp);
return *this;
}
template <class _TypeT>
inline valarray<_TypeT>
valarray<_TypeT>::operator[](const valarray<size_t>& __rhs) const
{
_RW::__rw_array <_TypeT> __tmp = _RW::__rw_array <_TypeT>(__rhs.size ());
for (size_t __i = 0; __i != __rhs.size (); ++__i)
new (&__tmp [__i]) _TypeT ((*this)[__rhs [__i]]);
return valarray<_TypeT>(__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>::valarray (const indirect_array<_TypeT>& __rhs)
{
indirect_array<_TypeT> *__ia =
_RWSTD_CONST_CAST (indirect_array<_TypeT>*, &__rhs);
const valarray<size_t> *__sec = __ia->get_array_pt();
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), __sec->size());
size_t __cpt = 0;
for(size_t __i=0; __i < __sec->size(); __i++ )
__tmp[__cpt++] = (*(__rhs.get_ref_mem_array()))[(*__sec)[__i]];
_C_array.swap (__tmp);
}
template <class _TypeT>
inline valarray<_TypeT>&
valarray<_TypeT>::operator= (const indirect_array<_TypeT>& __rhs)
{
indirect_array<_TypeT> *__ia =
_RWSTD_CONST_CAST (indirect_array<_TypeT>*, &__rhs);
const valarray<size_t> *__sec = __ia->get_array_pt();
_RW::__rw_array <_TypeT> __tmp =
_RW::__rw_array <_TypeT>(_TypeT (), __sec->size());
size_t __cpt = 0;
for(size_t __i=0; __i < __sec->size(); __i++ )
__tmp[__cpt++] = (*(__rhs.get_ref_mem_array()))[(*__sec)[__i]];
if (&_C_array == __rhs.get_ref_mem_array() )
_C_array.resize(0);
_C_array.swap (__tmp);
return *this;
}
template <class _TypeT>
inline slice_array<_TypeT>
valarray<_TypeT>::operator[] (slice __x)
{
return slice_array<value_type>(&_C_array, __x);
}
template <class _TypeT>
inline gslice_array<_TypeT>
valarray<_TypeT>::operator[] (const gslice &__x)
{
return gslice_array<value_type>(&_C_array, __x);
}
template <class _TypeT>
inline mask_array<_TypeT>
valarray<_TypeT>::operator[] (const valarray<bool> &__x)
{
return mask_array<value_type>(&_C_array, __x);
}
template <class _TypeT>
inline indirect_array<_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -