diff options
author | 2010-03-09 00:16:07 -0500 | |
---|---|---|
committer | 2010-03-09 00:16:07 -0500 | |
commit | 74a7c5caeeb6631ddd9d97a0832d80f35e888600 (patch) | |
tree | 97758ec132e44e5500edcdac9d82720d784e5ea2 /Eigen/src/Core/Block.h | |
parent | b81351cb07f86bba6956b8a123266050b4df114b (diff) |
implement the idea that row-vectors have the RowMajorBit and col-vectors don't.
Diffstat (limited to 'Eigen/src/Core/Block.h')
-rw-r--r-- | Eigen/src/Core/Block.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Eigen/src/Core/Block.h b/Eigen/src/Core/Block.h index e6cfb0859..b2b82b0f9 100644 --- a/Eigen/src/Core/Block.h +++ b/Eigen/src/Core/Block.h @@ -70,13 +70,18 @@ struct ei_traits<Block<MatrixType, BlockRows, BlockCols, _DirectAccessStatus> > : (BlockRows==Dynamic ? int(ei_traits<MatrixType>::MaxRowsAtCompileTime) : BlockRows), MaxColsAtCompileTime = ColsAtCompileTime == 1 ? 1 : (BlockCols==Dynamic ? int(ei_traits<MatrixType>::MaxColsAtCompileTime) : BlockCols), - RowMajor = int(ei_traits<MatrixType>::Flags)&RowMajorBit, + MatrixTypeIsRowMajor = int(ei_traits<MatrixType>::Flags)&RowMajorBit, + IsRowMajor = (BlockRows==1&&BlockCols!=1) ? 1 + : (BlockCols==1&&BlockRows!=1) ? 0 + : MatrixTypeIsRowMajor, InnerSize = RowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime), - InnerMaxSize = RowMajor ? int(MaxColsAtCompileTime) : int(MaxRowsAtCompileTime), - MaskPacketAccessBit = (InnerMaxSize == Dynamic || (InnerSize >= ei_packet_traits<Scalar>::size)) + MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % ei_packet_traits<Scalar>::size) == 0) + && (IsRowMajor == MatrixTypeIsRowMajor) // check for bad case of row-xpr inside col-major matrix... ? PacketAccessBit : 0, FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0, - Flags = (ei_traits<MatrixType>::Flags & (HereditaryBits | MaskPacketAccessBit | DirectAccessBit)) | FlagsLinearAccessBit + Flags0 = ei_traits<MatrixType>::Flags & (HereditaryBits | MaskPacketAccessBit | DirectAccessBit), + Flags1 = Flags0 | FlagsLinearAccessBit, + Flags = (Flags1 & ~RowMajorBit) | (IsRowMajor ? RowMajorBit : 0) }; }; |