📄 valarray
字号:
}
template<class _TypeT>
inline valarray<bool>
operator< (const valarray<_TypeT> &__lhs, const _TypeT &__rhs)
{
return _RW::__rw_binary_function (__lhs, bind2nd (less<_TypeT>(), __rhs));
}
template<class _TypeT>
inline valarray<bool>
operator>(const valarray<_TypeT> &__lhs, const _TypeT &__rhs)
{
return _RW::__rw_binary_function (__lhs,
bind2nd (greater<_TypeT>(), __rhs));
}
template<class _TypeT>
inline valarray<bool>
operator<= (const valarray<_TypeT> &__lhs, const _TypeT &__rhs)
{
return _RW::__rw_binary_function (__lhs,
bind2nd (less_equal<_TypeT>(), __rhs));
}
template<class _TypeT>
inline valarray<bool>
operator>= (const valarray<_TypeT> &__lhs, const _TypeT &__rhs)
{
return _RW::__rw_binary_function (__lhs,
bind2nd (greater_equal<_TypeT>(), __rhs));
}
template<class _TypeT>
inline valarray<bool>
operator== (const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs,
bind1st (equal_to<_TypeT>(), __lhs));
}
template<class _TypeT>
inline valarray<bool>
operator!= (const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs,
bind1st (not_equal_to<_TypeT>(), __lhs));
}
template<class _TypeT>
inline valarray<bool>
operator< (const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs, bind1st (less<_TypeT>(), __lhs));
}
template<class _TypeT>
inline valarray<bool>
operator>(const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs,
bind1st (greater<_TypeT>(), __lhs));
}
template<class _TypeT>
inline valarray<bool>
operator<= (const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs,
bind1st (less_equal<_TypeT>(), __lhs));
}
template<class _TypeT>
valarray<bool> operator>= (const _TypeT &__lhs, const valarray<_TypeT> &__rhs)
{
return _RW::__rw_binary_function (__rhs,
bind1st (greater_equal<_TypeT>(), __lhs));
}
// 26.3.3.3 - valarray transcendentals
// can't use function objects in definitions below due to different linkage
// of the math functions' overloads (e.g., extern "C" double cos (double)
// and extern "C++" float cos (float), etc...)
template<class _TypeT>
inline valarray<_TypeT> abs (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = abs (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> acos (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = acos (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> asin (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = asin (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
valarray<_TypeT> atan (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = atan (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> cos (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = cos (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> cosh (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = cosh (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> exp (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = exp (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> log (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = log (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> log10 (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = log10 (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> sinh (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = sinh (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> sin (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = sin (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> sqrt (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = sqrt (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> tan (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = tan (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> tanh (const valarray<_TypeT> &__val)
{
_RW::__rw_array<_TypeT> __tmp (__val.size ());
for (size_t __i = 0; __i != __val.size (); ++__i)
__tmp [__i] = tanh (__val [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT>
atan2 (const valarray<_TypeT> &__x, const valarray<_TypeT> &__y)
{
_RWSTD_ASSERT (__x.size () == __y.size ());
_RW::__rw_array<_TypeT> __tmp (__x.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = atan2 (__x [__i], __y [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> atan2 (const valarray<_TypeT> &__x, const _TypeT &__y)
{
_RW::__rw_array<_TypeT> __tmp (__x.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = atan2 (__x [__i], __y);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> atan2 (const _TypeT &__x, const valarray<_TypeT> &__y)
{
_RW::__rw_array<_TypeT> __tmp (__y.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = atan2 (__x, __y [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT>
pow (const valarray<_TypeT> &__x, const valarray<_TypeT> &__y)
{
_RWSTD_ASSERT (__x.size () == __y.size ());
_RW::__rw_array<_TypeT> __tmp (__x.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = pow (__x [__i], __y [__i]);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> pow (const valarray<_TypeT> &__x, const _TypeT &__y)
{
_RW::__rw_array<_TypeT> __tmp (__x.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = pow (__x [__i], __y);
return valarray<_TypeT>(__tmp);
}
template<class _TypeT>
inline valarray<_TypeT> pow (const _TypeT &__x, const valarray<_TypeT> &__y)
{
_RW::__rw_array<_TypeT> __tmp (__y.size ());
for (size_t __i = 0; __i != __tmp.size (); ++__i)
__tmp [__i] = pow (__x, __y [__i]);
return valarray<_TypeT>(__tmp);
}
// 26.3.4
class _RWSTD_EXPORT slice
{
public:
slice (): _C_start (0), _C_length (0), _C_stride (0) { }
slice (size_t __start, size_t __length, size_t __stride)
: _C_start (__start)
, _C_length (__length)
, _C_stride (__stride)
{ }
// 26.3.4.2 - slice access functions
size_t start () const {
return _C_start;
}
size_t size () const {
return _C_length;
}
size_t stride () const {
return _C_stride;
}
private:
size_t _C_start; // starting offset
size_t _C_length; // length of this slice
size_t _C_stride; // offset between elements
};
// 26.3.5 - helper class not to be directly used
template <class _TypeT>
class slice_array
{
friend class valarray<_TypeT>;
public:
typedef _TypeT value_type;
slice_array (const slice_array &__rhs)
: _C_array(__rhs.get_ref_mem_array()),
_C_slice(__rhs.get_slice())
{ }
// implementation
slice_array (_RW::__rw_array<value_type>* __a, const slice &__s)
: _C_array (__a),
_C_slice (__s)
{ }
_RW::__rw_array<value_type>* get_ref_mem_array () const {
return _C_array;
}
slice get_slice () const {
return _C_slice;
}
// 26.3.5.4 - fill function
void operator= (const value_type&) const;
// 26.3.5.2 - assignment
void operator= (const valarray<value_type> &__rhs) const {
_RW::__rw_unary_function (*this, __rhs, _RW::identity<value_type>());
}
// 26.3.5.3 - slice_array computed assignment
void operator*= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, multiplies<value_type>());
}
void operator/= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, divides<value_type>());
}
void operator+= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, plus<value_type>());
}
void operator-= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, minus<value_type>());
}
void operator%= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, modulus<value_type>());
}
void operator^= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs,
_RW::exclusive_or<value_type>());
}
void operator&= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs,
_RW::bitwise_and<value_type>());
}
void operator|= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, _RW::bitwise_or<value_type>());
}
void operator<<= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs, _RW::shift_left<value_type>());
}
void operator>>= (const valarray<value_type> &__rhs) const {
_RW::__rw_binary_function (*this, __rhs,
_RW::shift_right<value_type>());
}
private:
slice_array ();
slice_array& operator= (const slice_array&);
_RW::__rw_array<value_type> *_C_array; // the referenced valarray
slice _C_slice; // slice of referenced valarray
};
template <class _TypeT>
inline void slice_array<_TypeT>::operator= (const value_type &__rhs) const
{
// assign the value `__rhs' to the given slice of valarray
for (size_t __i = _C_slice.start(), __j = 0;
__i < _C_array->size () && __j != _C_slice.size ();
__i += _C_slice.stride (), ++__j)
(*_C_array)[__i] = __rhs;
}
// 26.3.6 - generalized slice of a valarray
class _RWSTD_EXPORT gslice
{
public:
// 26.3.6.1
gslice ()
: _C_start (0),
_C_reset (true)
{ }
gslice (size_t __start,
const valarray<size_t>& __length,
const valarray<size_t>& __stride)
: _C_start (__start),
_C_length (__length),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -