📄 traits.hpp
字号:
typedef std::complex<long double> promote_type;
};
#endif
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<long double, std::complex<float> > {
// Here we'd better go the conservative way.
// typedef std::complex<float> promote_type;
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<float>, long double> {
// Here we'd better go the conservative way.
// typedef std::complex<float> promote_type;
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<long double, std::complex<double> > {
// Here we'd better go the conservative way.
// typedef std::complex<double> promote_type;
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<double>, long double> {
// Here we'd better go the conservative way.
// typedef std::complex<double> promote_type;
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<long double, std::complex<long double> > {
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<long double>, long double> {
typedef std::complex<long double> promote_type;
};
#endif
template<>
struct promote_traits<std::complex<float>, std::complex<double> > {
typedef std::complex<double> promote_type;
};
template<>
struct promote_traits<std::complex<double>, std::complex<float> > {
typedef std::complex<double> promote_type;
};
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<std::complex<float>, std::complex<long double> > {
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<long double>, std::complex<float> > {
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<double>, std::complex<long double> > {
typedef std::complex<long double> promote_type;
};
template<>
struct promote_traits<std::complex<long double>, std::complex<double> > {
typedef std::complex<long double> promote_type;
};
#endif
#ifdef BOOST_UBLAS_USE_INTERVAL
template<>
struct promote_traits<boost::numeric::interval<float>, boost::numeric::interval<double> > {
typedef boost::numeric::interval<double> promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<double>, boost::numeric::interval<float> > {
typedef boost::numeric::interval<double> promote_type;
};
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<boost::numeric::interval<float>, boost::numeric::interval<long double> > {
typedef boost::numeric::interval<long double> promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<long double>, boost::numeric::interval<float> > {
typedef boost::numeric::interval<long double> promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<double>, boost::numeric::interval<long double> > {
typedef boost::numeric::interval<long double> promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<long double>, boost::numeric::interval<double> > {
typedef boost::numeric::interval<long double> promote_type;
};
#endif
#ifdef BOOST_UBLAS_USE_BOOST_COMPLEX
template<>
struct promote_traits<boost::numeric::interval<float>, boost::complex<boost::numeric::interval<float> > > {
typedef boost::complex<boost::numeric::interval<float> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<float> >, boost::numeric::interval<float> > {
typedef boost::complex<boost::numeric::interval<float> > promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<float>, boost::complex<boost::numeric::interval<double> > > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<double> >, boost::numeric::interval<float> > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<boost::numeric::interval<float>, boost::complex<boost::numeric::interval<long double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<long double> >, boost::numeric::interval<float> > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
#endif
template<>
struct promote_traits<boost::numeric::interval<double>, boost::complex<boost::numeric::interval<float> > > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<float> > promote_type;
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<float> >, boost::numeric::interval<double> > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<float> > promote_type;
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<double>, boost::complex<boost::numeric::interval<double> > > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<double> >, boost::numeric::interval<double> > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<boost::numeric::interval<double>, boost::complex<boost::numeric::interval<long double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<long double> >, boost::numeric::interval<double> > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
#endif
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<boost::numeric::interval<long double>, boost::complex<boost::numeric::interval<float> > > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<float> > promote_type;
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<float> >, boost::numeric::interval<long double> > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<float> > promote_type;
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<long double>, boost::complex<boost::numeric::interval<double> > > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<double> > promote_type;
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<double> >, boost::numeric::interval<long double> > {
// Here we'd better go the conservative way.
// typedef boost::complex<boost::numeric::interval<double> > promote_type;
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::numeric::interval<long double>, boost::complex<boost::numeric::interval<long double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<long double> >, boost::numeric::interval<long double> > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
#endif
template<>
struct promote_traits<boost::complex<boost::numeric::interval<float> >, boost::complex<boost::numeric::interval<double> > > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<double> >, boost::complex<boost::numeric::interval<float> > > {
typedef boost::complex<boost::numeric::interval<double> > promote_type;
};
#ifdef BOOST_UBLAS_USE_LONG_DOUBLE
template<>
struct promote_traits<boost::complex<boost::numeric::interval<float> >, boost::complex<boost::numeric::interval<long double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<long double> >, boost::complex<boost::numeric::interval<float> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<double> >, boost::complex<boost::numeric::interval<long double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
template<>
struct promote_traits<boost::complex<boost::numeric::interval<long double> >, boost::complex<boost::numeric::interval<double> > > {
typedef boost::complex<boost::numeric::interval<long double> > promote_type;
};
#endif
#endif
#endif
#endif
struct unknown_storage_tag {};
struct sparse_proxy_tag: public unknown_storage_tag {};
struct sparse_tag: public sparse_proxy_tag {};
struct packed_proxy_tag: public sparse_proxy_tag {};
struct packed_tag: public packed_proxy_tag {};
struct dense_proxy_tag: public packed_proxy_tag {};
struct dense_tag: public dense_proxy_tag {};
template<class S1, class S2>
struct storage_restrict_traits {
typedef S1 storage_category;
};
template<>
struct storage_restrict_traits<sparse_tag, dense_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<sparse_tag, packed_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<sparse_tag, sparse_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<packed_tag, dense_proxy_tag> {
typedef packed_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<packed_tag, packed_proxy_tag> {
typedef packed_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<packed_tag, sparse_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<packed_proxy_tag, sparse_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<dense_tag, dense_proxy_tag> {
typedef dense_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<dense_tag, packed_proxy_tag> {
typedef packed_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<dense_tag, sparse_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<dense_proxy_tag, packed_proxy_tag> {
typedef packed_proxy_tag storage_category;
};
template<>
struct storage_restrict_traits<dense_proxy_tag, sparse_proxy_tag> {
typedef sparse_proxy_tag storage_category;
};
struct sparse_bidirectional_iterator_tag : public std::bidirectional_iterator_tag {};
struct packed_random_access_iterator_tag : public std::random_access_iterator_tag {};
struct dense_random_access_iterator_tag : public packed_random_access_iterator_tag {};
// Thanks to Kresimir Fresl for convincing Comeau with iterator_base_traits ;-)
template<class IC>
struct iterator_base_traits {};
template<>
struct iterator_base_traits<std::forward_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef forward_iterator_base<std::forward_iterator_tag, I, T> type;
};
};
template<>
struct iterator_base_traits<std::bidirectional_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef bidirectional_iterator_base<std::bidirectional_iterator_tag, I, T> type;
};
};
template<>
struct iterator_base_traits<sparse_bidirectional_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef bidirectional_iterator_base<sparse_bidirectional_iterator_tag, I, T> type;
};
};
template<>
struct iterator_base_traits<std::random_access_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef random_access_iterator_base<std::bidirectional_iterator_tag, I, T> type;
};
};
template<>
struct iterator_base_traits<packed_random_access_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef random_access_iterator_base<packed_random_access_iterator_tag, I, T> type;
};
};
template<>
struct iterator_base_traits<dense_random_access_iterator_tag> {
template<class I, class T>
struct iterator_base {
typedef random_access_iterator_base<dense_random_access_iterator_tag, I, T> type;
};
};
template<class I1, class I2>
struct iterator_restrict_traits {
typedef I1 iterator_category;
};
template<>
struct iterator_restrict_traits<packed_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
typedef sparse_bidirectional_iterator_tag iterator_category;
};
template<>
struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, packed_random_access_iterator_tag> {
typedef sparse_bidirectional_iterator_tag iterator_category;
};
template<>
struct iterator_restrict_traits<dense_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
typedef sparse_bidirectional_iterator_tag iterator_category;
};
template<>
struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, dense_random_access_iterator_tag> {
typedef sparse_bidirectional_iterator_tag iterator_category;
};
template<>
struct iterator_restrict_traits<dense_random_access_iterator_tag, packed_random_access_iterator_tag> {
typedef packed_random_access_iterator_tag iterator_category;
};
template<>
struct iterator_restrict_traits<packed_random_access_iterator_tag, dense_random_access_iterator_tag> {
typedef packed_random_access_iterator_tag iterator_category;
};
}}}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -