Go to the documentation of this file.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 #ifndef EIGEN_STRIDE_H
00026 #define EIGEN_STRIDE_H
00027
00028 namespace Eigen {
00029
00058 template<int _OuterStrideAtCompileTime, int _InnerStrideAtCompileTime>
00059 class Stride
00060 {
00061 public:
00062 typedef DenseIndex Index;
00063 enum {
00064 InnerStrideAtCompileTime = _InnerStrideAtCompileTime,
00065 OuterStrideAtCompileTime = _OuterStrideAtCompileTime
00066 };
00067
00069 Stride()
00070 : m_outer(OuterStrideAtCompileTime), m_inner(InnerStrideAtCompileTime)
00071 {
00072 eigen_assert(InnerStrideAtCompileTime != Dynamic && OuterStrideAtCompileTime != Dynamic);
00073 }
00074
00076 Stride(Index outerStride, Index innerStride)
00077 : m_outer(outerStride), m_inner(innerStride)
00078 {
00079 eigen_assert(innerStride>=0 && outerStride>=0);
00080 }
00081
00083 Stride(const Stride& other)
00084 : m_outer(other.outer()), m_inner(other.inner())
00085 {}
00086
00088 inline Index outer() const { return m_outer.value(); }
00090 inline Index inner() const { return m_inner.value(); }
00091
00092 protected:
00093 internal::variable_if_dynamic<Index, OuterStrideAtCompileTime> m_outer;
00094 internal::variable_if_dynamic<Index, InnerStrideAtCompileTime> m_inner;
00095 };
00096
00099 template<int Value = Dynamic>
00100 class InnerStride : public Stride<0, Value>
00101 {
00102 typedef Stride<0, Value> Base;
00103 public:
00104 typedef DenseIndex Index;
00105 InnerStride() : Base() {}
00106 InnerStride(Index v) : Base(0, v) {}
00107 };
00108
00111 template<int Value = Dynamic>
00112 class OuterStride : public Stride<Value, 0>
00113 {
00114 typedef Stride<Value, 0> Base;
00115 public:
00116 typedef DenseIndex Index;
00117 OuterStride() : Base() {}
00118 OuterStride(Index v) : Base(v,0) {}
00119 };
00120
00121 }
00122
00123 #endif // EIGEN_STRIDE_H