← Back to team overview

dolfin team mailing list archive

Re: suitable container for list of meshes in DOLFIN?

 

On Monday 18 January 2010 15:20:48 Garth N. Wells wrote:
> On Jan 18 2010, Johan Hake wrote:
> >On Monday 18 January 2010 13:25:52 Andre Massing wrote:
> >> Johan Hake wrote:
> >> > On Monday 18 January 2010 12:58:19 Anders Logg wrote:
> >> >> On Mon, Jan 18, 2010 at 09:47:38PM +0100, Andre Massing wrote:
> >> >>> Hi,
> >> >>>
> >> >>> I am looking for suitable container in C++ (list, vector, array,
> >> >>> something ordered, not a set) which is suitable to contain (shared)
> >> >>> pointer or references to meshes *and* is willing to nicely interplay
> >> >>> with the swig built python interface. I just want to pass a list of
> >> >>> meshes to a constructor of a class. Is there any suitable classes
> >> >>> around DOLFIN? Or it is now easy to wrap a say
> >> >>> std::vector<boost::shared_ptr<Mesh> >  or something similiar?
> >> >>>
> >> >>> Regards,
> >> >>> Andre
> >> >>
> >> >> I think the dolfin::Array class is the best option.
> >> >>
> >> >> I'm not sure of the status of the wrapping of Array to Python but the
> >> >> idea is that Array should be designed particularly for simple
> >> >> wrapping to Python. Hake or Garth knows more.
> >> >
> >> > The transition is only done for ArrayDouble and maybe ArrayUInt I
> >> > guess.
> >> >
> >> > For now you should be able to just add:
> >> >
> >> >   IN_TYPEMAPS_STD_VECTOR_OF_POINTERS(Mesh)
> >> >
> >> > in std_vector_typemaps.i where the other similar macros are run.
> >> >
> >> > Then you should be able to pass list of Mesh objects to the wrapped
> >> > C++ method/function. The signature of the C++ function can be any of:
> >> >
> >> >   bar([const] std::vector< [const] Mesh&> >)
> >>
> >> Ok, that might also be an option (and a good opportunity to recall the
> >> things you taught me :) but did you mean
> >>
> >> bar([const] std::vector< [const] Mesh *> >) ?
> >> 				     ^^^
> >
> >Nope, a reference not a pointer. The typemap that govern this might be
> >unreadable, but it has served us well ;)
> 
> You can't use references in a std::vector. In Function, I used

Yes, you're perfectly right. I think I need to read my own documentation 
better, or learn standard C++ better. Sorry to confuse you André...
 
> http://www.boost.org/doc/libs/1_41_0/libs/ptr_container/doc/ptr_container.h
> tml
> 
> to have a container of pointers without using shared_ptr.
> 
> > It might disappear, as I think Garth want to go back to std_vector.i
> > typemaps for these cases?
> 
> We can use dolfin::Array if it's easy.

It should be quite easy, we just need to define a typemap macro for the cases 
where we have pointers to dolfin::Foo instead of primitives. 

Johan



Follow ups

References