00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_IS_ROW_MAJOR_INCLUDE
00013 #define MTL_IS_ROW_MAJOR_INCLUDE
00014
00015 #include <boost/mpl/bool.hpp>
00016 #include <boost/numeric/mtl/mtl_fwd.hpp>
00017 #include <boost/numeric/mtl/utility/tag.hpp>
00018 #include <boost/numeric/mtl/matrix/parameter.hpp>
00019 #include <boost/numeric/mtl/vector/parameter.hpp>
00020
00021 namespace mtl { namespace traits {
00022
00024
00027 template <typename Parameter>
00028 struct is_row_major {};
00029
00030 template <>
00031 struct is_row_major<row_major>
00032 : boost::mpl::true_ {};
00033
00034 template <>
00035 struct is_row_major<col_major>
00036 : boost::mpl::false_ {};
00037
00038 template <typename Dimension, bool OnStack>
00039 struct is_row_major<vector::parameters<row_major, Dimension, OnStack> >
00040 : boost::mpl::true_ {};
00041
00042 template <typename Dimension, bool OnStack>
00043 struct is_row_major<vector::parameters<col_major, Dimension, OnStack> >
00044 : boost::mpl::false_ {};
00045
00046 template <typename Index, typename Dimension, bool OnStack>
00047 struct is_row_major<matrix::parameters<row_major, Index, Dimension, OnStack> >
00048 : boost::mpl::true_ {};
00049
00050 template <typename Index, typename Dimension, bool OnStack>
00051 struct is_row_major<matrix::parameters<col_major, Index, Dimension, OnStack> >
00052 : boost::mpl::false_ {};
00053
00054 template <typename Value, typename Parameters>
00055 struct is_row_major<vector::dense_vector<Value, Parameters> >
00056 : is_row_major<Parameters> {};
00057
00058 template <typename Value, typename Parameters>
00059 struct is_row_major<vector::strided_vector_ref<Value, Parameters> >
00060 : is_row_major<Parameters> {};
00061
00062 template <typename Value, typename Parameters>
00063 struct is_row_major<compressed2D<Value, Parameters> >
00064 : is_row_major<Parameters> {};
00065
00066 template <typename Value, typename Parameters>
00067 struct is_row_major<dense2D<Value, Parameters> >
00068 : is_row_major<Parameters> {};
00069
00070 template <typename Value, unsigned long Mask, typename Parameters>
00071 struct is_row_major<morton_dense<Value, Mask, Parameters> >
00072 : is_row_major<Parameters> {};
00073
00074
00075 }}
00076
00077 #endif // MTL_IS_ROW_MAJOR_INCLUDE