← Back to team overview

dolfin team mailing list archive

Re: suitable container for list of meshes in DOLFIN?

 

Johan Hake wrote:
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é...

Ok, thanks for clarifying, I was really starting to doubt my basic C++ skills, especially since I already got confused by pointer to pointers and multidimensional arrays today (Marie knows what I talking about :)

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.

Ok, I go for that option. Thanks for the help and greeting to the other side of the ocean :)


Johan

_______________________________________________
Mailing list: https://launchpad.net/~dolfin
Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~dolfin
More help   : https://help.launchpad.net/ListHelp



Follow ups

References