| 501 | |
| 502 | template<typename ArgType, int BlockRows, int BlockCols, bool InnerPanel> |
| 503 | class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::InnerVectorInnerIterator |
| 504 | : public EvalIterator |
| 505 | { |
| 506 | enum { IsRowMajor = unary_evaluator::IsRowMajor }; |
| 507 | const XprType& m_block; |
| 508 | Index m_end; |
| 509 | public: |
| 510 | |
| 511 | EIGEN_STRONG_INLINE InnerVectorInnerIterator(const unary_evaluator& aEval, Index outer) |
| 512 | : EvalIterator(aEval.m_argImpl, outer + (IsRowMajor ? aEval.m_block.startRow() : aEval.m_block.startCol())), |
| 513 | m_block(aEval.m_block), |
| 514 | m_end(IsRowMajor ? aEval.m_block.startCol()+aEval.m_block.blockCols() : aEval.m_block.startRow()+aEval.m_block.blockRows()) |
| 515 | { |
| 516 | while( (EvalIterator::operator bool()) && (EvalIterator::index() < (IsRowMajor ? m_block.startCol() : m_block.startRow())) ) |
| 517 | EvalIterator::operator++(); |
| 518 | } |
| 519 | |
| 520 | inline StorageIndex index() const { return EvalIterator::index() - convert_index<StorageIndex>(IsRowMajor ? m_block.startCol() : m_block.startRow()); } |
| 521 | inline Index outer() const { return EvalIterator::outer() - (IsRowMajor ? m_block.startRow() : m_block.startCol()); } |
| 522 | inline Index row() const { return EvalIterator::row() - m_block.startRow(); } |
| 523 | inline Index col() const { return EvalIterator::col() - m_block.startCol(); } |