On Tue, Sep 29, 2009 at 03:07:33PM +0200, Johan Hake wrote: > On Tuesday 29 September 2009 14:06:20 Garth N. Wells wrote: > > Anders Logg wrote: > > > On Tue, Sep 29, 2009 at 01:01:35PM +0100, Garth N. Wells wrote: > > >> Anders Logg wrote: > > >>> On Tue, Sep 29, 2009 at 12:42:54PM +0100, Garth N. Wells wrote: > > >>>> Anders Logg wrote: > > >>>>> On Tue, Sep 29, 2009 at 07:39:01AM +0100, Garth N. Wells wrote: > > >>>>>> Is there a reason why the MeshFunction.get(..) functions return by > > >>>>>> value rather then reference, e.g. it is currently > > >>>>>> > > >>>>>> inline T get(const MeshEntity& entity) const > > >>>>>> > > >>>>>> rather than > > >>>>>> > > >>>>>> inline T& get(const MeshEntity& entity) const > > >>>>>> > > >>>>>> Garth > > >>>>> > > >>>>> Yes, we have a set() function for setting the values. > > >>>> > > >>>> I know, but I would like to get a reference rather than copying data > > >>>> > > >>>> unsigned int index = 3; > > >>>> const std::vector<double>& vec = mesh_function.get(index) > > >>>> > > >>>> I can do this when I have the MeshEntitiy, but not when using the > > >>>> index. > > >>> > > >>> Does it work if you do > > >>> > > >>> &vec[0] = mesh_function.values(); > > >> > > >> Probably, bit it's not what I want. I have a std::vector attached to > > >> mesh entities (MeshFunction<std::vector<double> >). I want a reference > > >> to the std::vector attached to a particular entity > > >> > > >> std::vector<double> vec& = mesh_function(my_entity); > > >> > > >> is fine, but > > >> > > >> std::vector<double> vec& = mesh_function.get(my_index); > > >> > > >> is not. > > > > > > What if you just add operator[] for uint? > > > > > >> Back to my question: Is there a reason why MeshFunction::get returns by > > >> value and not by reference? > > > > > > There might be a reason. I think we introduced get/set for use in the > > > Python interface. Perhaps Johan remembers? > > Well, this was before my time ;) > > But I see that get is used to overload the __call__ method in Python. I am > quite sure this can be done in a nicer way. We probably had difficulties with > extending the MeshFunctions as these are templated classes. We know how to do > this now. > > I am not sure why we return by value, but it might have something to do with > memory management in Python. However these things could be handled in the > wrapper layer anyway. > > I suggest we define the C++ interface as we want it to be, then I am quite > sure I can mimic this in Python. (starting to get bald I think ;)) > > So whats the logic here. Should > > &T operator() > > be used when we have the entity, and maybe > > &T operator[] > > when we have the index, or should one of the operators be used for both cases?
I think it would be safe to overload operator[]. -- Anders > Johan > > > OK, that's what I want to know. > > > > Garth > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > _______________________________________________ > > > DOLFIN-dev mailing list > > > DOLFIN-dev@fenics.org > > > http://www.fenics.org/mailman/listinfo/dolfin-dev > > > > _______________________________________________ > > DOLFIN-dev mailing list > > DOLFIN-dev@fenics.org > > http://www.fenics.org/mailman/listinfo/dolfin-dev > > > _______________________________________________ > DOLFIN-dev mailing list > DOLFIN-dev@fenics.org > http://www.fenics.org/mailman/listinfo/dolfin-dev
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev