From a734b931d67d1f6695dca2e3b396e95ac5d025bb Mon Sep 17 00:00:00 2001 From: Markus Blatt <mblatt@dune-project.org> Date: Wed, 5 Sep 2012 17:50:13 +0000 Subject: [PATCH] Fixed flyspray 1066. Fixed some bugs in the documentation. (This is revision 6977 all over again, but with the correct commit message.) [[Imported from SVN: r6980]] --- dune/common/fassign.hh | 45 +++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/dune/common/fassign.hh b/dune/common/fassign.hh index a850b7e1a..523511d0c 100644 --- a/dune/common/fassign.hh +++ b/dune/common/fassign.hh @@ -38,12 +38,11 @@ namespace Dune { /** * @brief Marker class for next row * - * overload operator <<= for FiledMatrix assignment + * overload operator <<= for FieldMatrix assignment */ struct NextRow { explicit NextRow (int) {}; } nextRow(0); - } // end empty namespace /** @@ -149,22 +148,22 @@ namespace Dune { } /** - * @brief fvector assignment operator + * @brief fmatrix assignment operator * - * overload operator <<= for fvector assignment from Dune::Zero + * overload operator <<= for fmatrix assignment from Dune::Zero * - * after including fassing.hh you can easily assign data to a FieldVector + * after including fassing.hh you can easily assign data to a FieldMatrix * using * * @code - * FieldVector<double, 4> x; x <<= 1.0, 4.0, 10.0, 11.0; + * FieldMatrix<double, 2,2> x; x <<= 1.0, 4.0, nextRow, 10.0, 11.0; * @endcode * - * The operator checks that the whole vector is initalized. - * In case you know that all following entries will be zero padded, you can use + * The operator checks that the whole matrix is initalized. + * In case you know that all following entries of a row will be zero padded, you can use * * @code - * FieldVector<double, 40> x; x <<= 1.0, 4.0, 10.0, 11.0, zero; + * FieldMatrix<double, 4, 4> x; x <<= 1.0, zero, nextRow, 10.0, 11.0; * @endcode * */ @@ -176,22 +175,27 @@ namespace Dune { int c; int r; bool temporary; + bool thrown; + void end_row() { - if (!temporary && c!=m) + if (!temporary && c!=m && !thrown) { + thrown=true; DUNE_THROW(MathError, "Trying to assign " << c << " entries to a FieldMatrix row of size " << m); + } c=0; } public: /*! @brief Copy Constructor */ - fmatrix_assigner(fmatrix_assigner & a) : A(a.A), c(a.c), r(a.r), temporary(false) + fmatrix_assigner(fmatrix_assigner & a) : A(a.A), c(a.c), r(a.r), temporary(false), thrown(a.thrown) {} /*! @brief Constructor from matrix and temporary flag \param _A matrix which should be initialized \param t bool indicating, that this is a temporary object (see ~fmatrix_assigner) */ - fmatrix_assigner(FieldMatrix<T,n,m> & _A, bool t) : A(_A), c(0), r(0), temporary(t) + fmatrix_assigner(FieldMatrix<T,n,m> & _A, bool t) : A(_A), c(0), r(0), temporary(t), + thrown(false) {}; /*! @brief Destructor checks for complete initialization of the matrix. @@ -200,13 +204,21 @@ namespace Dune { ~fmatrix_assigner() { end_row(); - if (!temporary && r!=n-1) + if (!temporary && r!=n-1 && !thrown) { + thrown=true; DUNE_THROW(MathError, "Trying to assign " << r << " rows to a FieldMatrix of size " << n << " x " << m); + } } /*! @brief append data to this matrix */ fmatrix_assigner & append (const T & t) { + // Check whether we have passed the last row + if(r>=m) { + thrown=true; + DUNE_THROW(MathError, "Trying to assign more than " << m << + " rows to a FieldMatrix of size " << n << " x " << m); + } A[r][c++] = t; return *this; } @@ -217,7 +229,7 @@ namespace Dune { while (c!=m) A[r][c++] = 0; return *this; } - /*! @brief append zeros to this matrix + /*! @brief move to next row of the matrix */ fmatrix_assigner & append (NextRow nr) { @@ -243,7 +255,8 @@ namespace Dune { } /*! @brief append zeros to this matrix the overloaded comma operator is used to stop the assign of values - to the matrix, all remaining entries are assigned 0. + to the current row, it will be checked whether all entries have been + assigned values. */ fmatrix_assigner & operator , (NextRow nr) { @@ -264,7 +277,7 @@ namespace Dune { } /** - * @brief fFileMatrix assignment operator + * @brief FieldMatrix assignment operator * * overload operator <<= for FieldMatrix row assignment from Dune::Zero */ -- GitLab