📄 valarray.cc
字号:
valarray<bool> operator&& (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = a && b[ind];
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator|| (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = a || b[ind];
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
// comparison operators
template<class T>
valarray<bool> operator== (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]==b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator!= (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]!=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator< (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]<b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator> (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]>b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator<= (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]<=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator>= (const valarray<T>& a, const valarray<T>& b)
{
size_t length= ( a.size() > b.size() ) ? b.size() : a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]>=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
// comparison operators, non valarray second param
template<class T>
valarray<bool> operator== (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]==b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator!= (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]!=b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator< (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]<b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator> (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]>b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator<= (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]<=b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator>= (const valarray<T>& a, const T& b)
{
size_t length= a.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a[ind]>=b);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
// comparison operators, non valarray first param
template<class T>
valarray<bool> operator== (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a==b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator!= (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a!=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator< (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a<b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator> (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a>b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator<= (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a<=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
template<class T>
valarray<bool> operator>= (const T& a, const valarray<T>& b)
{
size_t length= b.size();
valarray<bool> tmp_array(length);
for(size_t ind=0; ind< length; ind++ )
tmp_array[ind] = (a>=b[ind]);
_RW_IMP_SPACE(_RW_temporary<bool>)* _tmp_ret = new _RW_IMP_SPACE(_RW_temporary<bool>);
_tmp_ret->store_adr = tmp_array._RW_get_memory_array()._RW_get_storage();
_tmp_ret->length = length;
tmp_array._RW_get_memory_array_adr()->_RW_invalidate();
return _tmp_ret;
}
#ifndef _RWSTD_NO_ONLY_NEEDED_INSTANTIATION
// min and max functions
template <class T>
T valarray<T>::min()const
{
T tmp;
if ( size() > 0 )
{
tmp = memory_array[0];
for(size_t ind=1; ind< size(); ind++)
if ( memory_array[ind] < tmp )
tmp= memory_array[ind];
}
else
tmp = T(); // std allows undefined
return tmp;
}
template <class T>
T valarray<T>::max()const
{
T tmp;
if ( size() > 0 )
{
tmp = memory_array[0];
for(size_t ind=1; ind< size(); ind++)
if ( memory_array[ind] > tmp )
tmp= memory_array[ind];
}
else
tmp = T(); // std allows undefined
return tmp;
}
#else
template <class T>
T min(const valarray<T>& ar)
{
T tmp;
if ( ar.size() > 0 )
{
tmp = ar[0];
for(size_t ind=1; ind< ar.size(); ind++)
if ( ar[ind] < tmp )
tmp= ar[ind];
}
return tmp;
}
template <class T>
T max(const valarray<T>& ar)
{
T tmp;
if ( ar.size() > 0 )
{
tmp = ar[0];
for(size_t ind=1; ind< ar.size(); ind++)
if ( ar[ind] > tmp )
tmp= ar[ind];
}
return tmp;
}
#endif
// transcendentals
template<class T>
valarray<T> abs(const valarray<T>& a)
{
valarray<T> tmp_array(a.size());
for(size_t ind=0; ind< a.size(); ind++ )
#if !defined (_RWSTD_NO_NEW_HEADER) && !defined (_RWSTD_NO_NAMESPACE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -