[Dune-devel] [Dune-Commit] [Commit] dune-istl - 0f850d8: [BlockVector] modify constructor with capacity to catch at least some of the wrong invocations (see doxygen comment).
christi at dune-project.org
christi at dune-project.org
Thu Jul 4 22:06:00 CEST 2013
On Thu, Jul 04, 2013 at 09:40:17PM +0200, Markus Blatt wrote:
> Hi,
>
> is anybody really using this constructor on purpose? (I actually
> cannot see, why I ever implemented it.)
>
> No offence, but with this patch this is just ugly. I would prefer
> throwing it out completely (and maybe add the cinstructor people would
> exspect later)
>
> Just my 2 cents,
At least I was just asked a couple of days ago, why this constructor
is ugly, because Rene actually ran into the mentioned
problem. Specifying a capacity doesn't seem unreasonable to me, but
the problem of vector(size,initialvalue) and
BlockVector(size,capacity) is really a bit dangerous.
On the other hand, one can just write
BlockVector x;
x.reserve(capacity);
x.resize(size);
For me it would also be OK to drop the constructor.
Christian
>
> Markus
>
> On Thu, Jul 04, 2013 at 08:58:47PM +0200, Christian Engwer wrote:
> > New commit, appeared at Thu Jul 4 20:58:47 2013 +0200
> > as part of the following ref changes:
> >
> > branch refs/heads/master updated from 0f008a2 -> 0f850d8
> >
> > Browsable version: http://cgit.dune-project.org/repositories/dune-istl/commit/?id=0f850d8b756111431e9e1bec859c9ea4f95891dc
> >
> > ======================================================================
> >
> > commit 0f850d8b756111431e9e1bec859c9ea4f95891dc
> > Author: Christian Engwer <christi at dune-project.org>
> > Date: Thu Jul 4 20:58:51 2013 +0200
> >
> > [BlockVector]
> > modify constructor with capacity to catch at least some of the
> > wrong invocations (see doxygen comment).
> >
> > dune/istl/bvector.hh | 8 +++++++-
> > dune/istl/test/bvectortest.cc | 3 +++
> > 2 files changed, 10 insertions(+), 1 deletion(-)
> >
> >
> >
> > diff --git a/dune/istl/bvector.hh b/dune/istl/bvector.hh
> > index 32b7e82..6b2faee 100644
> > --- a/dune/istl/bvector.hh
> > +++ b/dune/istl/bvector.hh
> > @@ -7,7 +7,9 @@
> > #include <cmath>
> > #include <complex>
> > #include <memory>
> > +#include <limits>
> >
> > +#include <dune/common/static_assert.hh>
> > #include <dune/common/promotiontraits.hh>
> > #include <dune/common/dotproduct.hh>
> >
> > @@ -313,8 +315,12 @@ namespace Dune {
> > expecting to obtain a vector of 100 doubles initialized with zero.
> > However, the code calls this constructor which tacitly does something else!
> > */
> > - BlockVector (size_type _n, size_type capacity)
> > + template<typename S>
> > + BlockVector (size_type _n, S _capacity)
> > {
> > + dune_static_assert( (std::numeric_limits<S>::is_integer),
> > + "capacity must be an unsigned integral type (be aware, that this constructor does not set the default value!)" );
> > + size_type capacity = _capacity;
> > this->n = _n;
> > if(this->n > capacity)
> > capacity_ = _n;
> > diff --git a/dune/istl/test/bvectortest.cc b/dune/istl/test/bvectortest.cc
> > index 4e276da..a79d89b 100644
> > --- a/dune/istl/test/bvectortest.cc
> > +++ b/dune/istl/test/bvectortest.cc
> > @@ -26,6 +26,9 @@ int testVector()
> >
> > // empty vector
> > Vector v, w, v1(20), v2(20,100);
> > +#ifdef FAIL
> > + Vector v3(20,100.0);
> > +#endif
> > v.reserve(100);
> > assert(100==v.capacity());
> > assert(20==v1.capacity());
> >
> > _______________________________________________
> > Dune-Commit mailing list
> > Dune-Commit at dune-project.org
> > http://lists.dune-project.org/mailman/listinfo/dune-commit
> >
>
> --
> Do you need more support with DUNE or HPC in general?
>
> Dr. Markus Blatt - HPC-Simulation-Software & Services http://www.dr-blatt.de
> Hans-Bunte-Str. 8-10, 69123 Heidelberg, Germany
> Tel.: +49 (0) 160 97590858 Fax: +49 (0)322 1108991658
>
> _______________________________________________
> Dune-devel mailing list
> Dune-devel at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-devel
>
--
Prof. Dr. Christian Engwer
Institut für Numerische und Angewandte Mathematik
Fachbereich Mathematik und Informatik der Universität Münster
Einsteinstrasse 62
48149 Münster
E-Mail christian.engwer at uni-muenster.de
Telefon +49 251 83-35067
FAX +49 251 83-32729
More information about the Dune-devel
mailing list