00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_PROPERTY_MAP_INCLUDE
00013 #define MTL_PROPERTY_MAP_INCLUDE
00014
00015 #include <boost/numeric/mtl/mtl_fwd.hpp>
00016 #include <boost/numeric/mtl/utility/property_map_impl.hpp>
00017
00018 namespace mtl { namespace traits {
00019
00020 template <class Matrix> struct row {};
00021 template <class Matrix> struct col {};
00022 template <class Matrix> struct const_value {};
00023 template <class Matrix> struct value {};
00024 template <class Matrix> struct offset {};
00025
00026
00027 template <class Vector> struct index {};
00028
00029
00030
00031
00032
00033 template <typename Value, class Parameters>
00034 struct row<dense2D<Value, Parameters> >
00035 {
00036 typedef mtl::detail::indexer_row_ref<dense2D<Value, Parameters> > type;
00037 };
00038
00039 template <typename Value, class Parameters>
00040 struct col<dense2D<Value, Parameters> >
00041 {
00042 typedef mtl::detail::indexer_col_ref<dense2D<Value, Parameters> > type;
00043 };
00044
00045 template <typename Value, class Parameters>
00046 struct const_value<dense2D<Value, Parameters> >
00047 {
00048 typedef mtl::detail::direct_const_value<dense2D<Value, Parameters> > type;
00049 };
00050
00051 template <typename Value, class Parameters>
00052 struct value<dense2D<Value, Parameters> >
00053 {
00054 typedef mtl::detail::direct_value<dense2D<Value, Parameters> > type;
00055 };
00056
00057
00058
00059
00060
00061
00062
00063 template <class Elt, unsigned long BitMask, class Parameters>
00064 struct row<morton_dense<Elt, BitMask, Parameters> >
00065 {
00066 typedef mtl::detail::row_in_key<morton_dense<Elt, BitMask, Parameters> > type;
00067 };
00068
00069 template <class Elt, unsigned long BitMask, class Parameters>
00070 struct col<morton_dense<Elt, BitMask, Parameters> >
00071 {
00072 typedef mtl::detail::col_in_key<morton_dense<Elt, BitMask, Parameters> > type;
00073 };
00074
00075 template <class Elt, unsigned long BitMask, class Parameters>
00076 struct const_value<morton_dense<Elt, BitMask, Parameters> >
00077 {
00078 typedef mtl::detail::matrix_const_value_ref<morton_dense<Elt, BitMask, Parameters> > type;
00079 };
00080
00081 template <class Elt, unsigned long BitMask, class Parameters>
00082 struct value<morton_dense<Elt, BitMask, Parameters> >
00083 {
00084 typedef mtl::detail::matrix_value_ref<morton_dense<Elt, BitMask, Parameters> > type;
00085 };
00086
00087
00088
00089
00090
00091
00092 template <class Elt, class Parameters>
00093 struct row<mtl::compressed2D<Elt, Parameters> >
00094 {
00095 typedef typename boost::mpl::if_<
00096 boost::is_same<typename Parameters::orientation, row_major>
00097 , mtl::detail::major_in_key<mtl::compressed2D<Elt, Parameters> >
00098 , mtl::detail::indexer_minor_ref<mtl::compressed2D<Elt, Parameters> >
00099 >::type type;
00100 };
00101
00102 template <class Elt, class Parameters>
00103 struct col<mtl::compressed2D<Elt, Parameters> >
00104 {
00105 typedef typename boost::mpl::if_<
00106 boost::is_same<typename Parameters::orientation, row_major>
00107 , mtl::detail::indexer_minor_ref<mtl::compressed2D<Elt, Parameters> >
00108 , mtl::detail::major_in_key<mtl::compressed2D<Elt, Parameters> >
00109 >::type type;
00110 };
00111
00112 template <class Elt, class Parameters>
00113 struct const_value<mtl::compressed2D<Elt, Parameters> >
00114 {
00115 typedef mtl::detail::matrix_offset_const_value<mtl::compressed2D<Elt, Parameters> > type;
00116 };
00117
00118 template <class Elt, class Parameters>
00119 struct value<mtl::compressed2D<Elt, Parameters> >
00120 {
00121 typedef mtl::detail::matrix_offset_value<mtl::compressed2D<Elt, Parameters> > type;
00122 };
00123
00124
00125
00126 template <class Elt, class Parameters>
00127 struct offset<mtl::compressed2D<Elt, Parameters> >
00128 {
00129 typedef mtl::detail::offset_from_key<mtl::compressed2D<Elt, Parameters> > type;
00130 };
00131
00132
00133
00134
00135
00136
00137 template <class Elt, class Parameters>
00138 struct index<dense_vector<Elt, Parameters> >
00139 {
00140 typedef mtl::detail::index_from_offset< dense_vector<Elt, Parameters> > type;
00141 };
00142
00143 template <typename Value, class Parameters>
00144 struct const_value<dense_vector<Value, Parameters> >
00145 {
00146 typedef mtl::detail::direct_const_value<dense_vector<Value, Parameters> > type;
00147 };
00148
00149 template <typename Value, class Parameters>
00150 struct value<dense_vector<Value, Parameters> >
00151 {
00152 typedef mtl::detail::direct_value<dense_vector<Value, Parameters> > type;
00153 };
00154
00155
00156
00157
00158 template <class Elt, class Parameters>
00159 struct index<vector::strided_vector_ref<Elt, Parameters> >
00160 {
00161 typedef mtl::detail::index_from_offset< vector::strided_vector_ref<Elt, Parameters> > type;
00162 };
00163
00164 template <typename Value, class Parameters>
00165 struct const_value<vector::strided_vector_ref<Value, Parameters> >
00166 {
00167 typedef mtl::detail::direct_const_value<vector::strided_vector_ref<Value, Parameters> > type;
00168 };
00169
00170 template <typename Value, class Parameters>
00171 struct value<vector::strided_vector_ref<Value, Parameters> >
00172 {
00173 typedef mtl::detail::direct_value<vector::strided_vector_ref<Value, Parameters> > type;
00174 };
00175
00176
00177
00178
00179 }}
00180
00181
00182 #endif // MTL_PROPERTY_MAP_INCLUDE
00183
00184