00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef NTG_CORE_MACROS_HH
00029 # define NTG_CORE_MACROS_HH
00030
00031
00032
00033
00034
00035 # define ntg_type(T) typename ntg::type_traits< T >::ntg_type
00036 # define ntg_type_(T) typename ntg::type_traits< T >::ntg_type
00037
00038 # define ntg_cast(Val) ntg::to_ntg(Val)
00039 # define ntg_signed_cast(Val) ntg::to_signed_ntg(Val)
00040
00041
00042
00043
00044
00045 # define ntg_is_a(T, U) mlc_is_a(typename ntg::type_traits< T >::abstract_type, U)
00046 # define ntg_is_a_(T, U) mlc_is_a_(ntg::type_traits< T >::abstract_type, U)
00047
00048
00049
00050
00051
00052 # define ntg_abstract_type(T) typename ntg::type_traits< T >::abstract_type
00053 # define ntg_abstract_type_(T) ntg::type_traits< T >::abstract_type
00054
00055 # define ntg_storage_type(T) typename ntg::type_traits< T >::storage_type
00056 # define ntg_storage_type_(T) ntg::type_traits< T >::storage_type
00057
00058 # define ntg_base_type(T) typename ntg::type_traits< T >::base_type
00059 # define ntg_base_type_(T) ntg::type_traits< T >::base_type
00060
00061 # define ntg_signed_type(T) typename ntg::type_traits< T >::signed_type
00062 # define ntg_signed_type_(T) ntg::type_traits< T >::signed_type
00063
00064 # define ntg_unsigned_type(T) typename ntg::type_traits< T >::unsigned_type
00065 # define ntg_unsigned_type_(T) ntg::type_traits< T >::unsigned_type
00066
00067 # define ntg_integer_type(T) typename ntg::type_traits< T >::integer_type
00068 # define ntg_integer_type_(T) ntg::type_traits< T >::integer_type
00069
00070 # define ntg_cumul_type(T) typename ntg::type_traits< T >::cumul_type
00071 # define ntg_cumul_type_(T) ntg::type_traits< T >::cumul_type
00072
00073 # define ntg_signed_cumul_type(T) \
00074 typename ntg::type_traits< T >::signed_cumul_type
00075 # define ntg_signed_cumul_type_(T) ntg::type_traits< T >::signed_cumul_type
00076
00077 # define ntg_unsigned_cumul_type(T) \
00078 typename ntg::type_traits< T >::unsigned_cumul_type
00079 # define ntg_unsigned_cumul_type_(T) ntg::type_traits< T >::unsigned_cumul_type
00080
00081 # define ntg_largest_type(T) typename ntg::type_traits< T >::largest_type
00082 # define ntg_largest_type_(T) ntg::type_traits< T >::largest_type
00083
00084 # define ntg_signed_largest_type(T) \
00085 typename ntg::type_traits< T >::signed_largest_type
00086 # define ntg_signed_largest_type_(T) ntg::type_traits< T >::signed_largest_type
00087
00088 # define ntg_unsigned_largest_type(T) \
00089 typename ntg::type_traits< T >::unsigned_largest_type
00090 # define ntg_unsigned_largest_type_(T) \
00091 ntg::type_traits< T >::unsigned_largest_type
00092
00093 # define ntg_comp_type(T) \
00094 typename ntg::type_traits< T >::comp_type
00095 # define ntg_comp_type_(T) \
00096 ntg::type_traits< T >::comp_type
00097
00098 # define ntg_unsafe_type(T) typename ntg::type_traits< T >::unsafe_type
00099 # define ntg_unsafe_type_(T) ntg::type_traits< T >::unsafe_type
00100
00101
00102
00103
00104
00105 # define ntg_zero_val(T) ntg::type_traits< T >::zero()
00106
00107 # define ntg_unit_val(T) ntg::type_traits< T >::unit()
00108
00109 # define ntg_max_val(T) ntg::type_traits< T >::max()
00110
00111 # define ntg_min_val(T) ntg::type_traits< T >::min()
00112
00113 # define ntg_inf_val(T) ntg::type_traits< T >::inf()
00114
00115 # define ntg_sup_val(T) ntg::type_traits< T >::sup()
00116
00117 # define ntg_max_print_width(T) ntg::type_traits< T >::max_print_width()
00118
00119 # define ntg_nb_comp(T) ntg::type_traits< T >::nb_comp
00120
00121
00122
00123
00124
00125 # define ntg_return_type(Op, T1, T2) \
00126 typename ntg::internal::deduce_from_traits<ntg::internal::operator_##Op , T1, T2 >::ret
00127 # define ntg_return_type_(Op, T1, T2) \
00128 ntg::internal::deduce_from_traits<ntg::internal::operator_##Op, T1, T2 >::ret
00129
00130 # define ntg_deduced_traits_type(Op, T1, T2) \
00131 typename ntg::internal::deduce_from_traits<ntg::internal::operator_##Op, T1, T2 >
00132 # define ntg_deduced_traits_type_(Op, T1, T2) \
00133 ntg::internal::deduce_from_traits<ntg::internal::operator_##Op, T1, T2 >
00134
00135 # define ntg_impl_type(Op, T1, T2) \
00136 typename ntg::internal::deduce_from_traits<ntg::internal::operator_##Op, T1, T2 >::impl
00137 # define ntg_impl_type_(Op, T1, T2) \
00138 ntg::internal::deduce_from_traits<ntg::internal::operator_##Op, T1, T2 >::impl
00139
00140
00141
00142
00143
00144 # define ntg_name(T) ntg::type_traits< T >::name()
00145
00146
00147 # define ntg_build_value_type(Type) \
00148 template <class E> \
00149 struct build_value_type \
00150 { \
00151 typedef Type ret; \
00152 }
00153
00154
00155 # define ntg_get_value_type(T, E) ntg::type_traits< T >::build_value_type<E >
00156
00157
00158
00159
00160
00161 #define ntg_nbits(T) ntg::internal::typetraits< T >::size
00162
00163
00168 #define ntg_if_vectorial_nb_comp(T) \
00169 ntg::type_traits<typename mlc::if_<ntg_is_a(T, ntg::vectorial)::ret, \
00170 T, \
00171 ntg::vec<42, bool> >::ret>::nb_comp
00172
00177 #define ntg_if_vectorial_nb_comp_(T) \
00178 ntg::type_traits<mlc::if_<ntg_is_a_(T, ntg::vectorial)::ret, \
00179 T, \
00180 ntg::vec<42, bool> >::ret>::nb_comp
00181
00190 #define ntg_compare_nb_comp(A, B) \
00191 mlc::if_< \
00192 ntg_is_a(A, ntg::non_vectorial)::ret, \
00193 ntg_is_a(B, ntg::non_vectorial), \
00194 mlc::eq<ntg_if_vectorial_nb_comp(A), \
00195 ntg_if_vectorial_nb_comp(B) > >::ret
00196
00201 #define ntg_compare_nb_comp_(A, B) \
00202 mlc::if_< \
00203 ntg_is_a_(A, ntg::non_vectorial)::ret, \
00204 ntg_is_a_(B, ntg::non_vectorial), \
00205 mlc::eq<ntg_if_vectorial_nb_comp_(A), \
00206 ntg_if_vectorial_nb_comp_(B) > >::ret
00207
00208 #endif // !NTG_CORE_MACROS_HH