valarray<_Tp> valarray<_Tp>::operator[](const gslice& __slice) const { valarray<_Tp> __tmp(__slice._M_size(), _NoInit()); if (__tmp.size() != 0) { _Gslice_Iter __i(__slice); do __tmp[__i._M_step] = (*this)[__i._M_1d_idx]; while(__i._M_incr()); } return __tmp; }
valarray<_Tp> valarray<_Tp>::operator[](const _Valarray_size_t& __addr) const { valarray<_Tp> __tmp(__addr.size(), _NoInit()); for (size_t __i = 0; __i < __addr.size(); ++__i) __tmp[__i] = (*this)[__addr[__i]]; return __tmp; }
valarray<_Tp> valarray<_Tp>::operator[](slice __slice) const { valarray<_Tp> __tmp(__slice.size(), _NoInit()); size_t __index = __slice.start(); for (size_t __i = 0; __i < __slice.size(); ++__i, __index += __slice.stride()) __tmp[__i] = (*this)[__index]; return __tmp; }
valarray<_Tp> valarray<_Tp>::operator[](const _Valarray_bool& __mask) const { size_t _p_size = 0; { for (size_t __i = 0; __i < __mask.size(); ++__i) if (__mask[__i]) ++_p_size; } valarray<_Tp> __tmp(_p_size, _NoInit()); size_t __idx = 0; { for (size_t __i = 0; __i < __mask.size(); ++__i) if (__mask[__i]) __tmp[__idx++] = (*this)[__i]; } return __tmp; }