aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/Block.h
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-03-09 00:16:07 -0500
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-03-09 00:16:07 -0500
commit74a7c5caeeb6631ddd9d97a0832d80f35e888600 (patch)
tree97758ec132e44e5500edcdac9d82720d784e5ea2 /Eigen/src/Core/Block.h
parentb81351cb07f86bba6956b8a123266050b4df114b (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.h13
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)
};
};