Hello Michael,
in the svn  there is a simpler but improved version. In my amd 64 machine dual 
core linux ubuntu jaunty no problem. No segmentation .. no errors with the new 
version.
I tested it with the new function MPI_Comm_Load. All the examples with 
montercarlo work as well.
Bests
Riccardo



--- Mar 1/12/09, Michael Creel <michael.cr...@uab.es> ha scritto:

Da: Michael Creel <michael.cr...@uab.es>
Oggetto: Re: [OctDev] A simple C++ example of a class with MPI_Comunicator  
property
A: "Riccardo Corradini" <riccardocorrad...@yahoo.it>
Data: Martedì 1 dicembre 2009, 13:49

Hi Riccardo,
You might find
 this screenshot amusing. This is a PelicanHPC made using Debian Sid, with 
Octave 3.2.3, and with your MPI bindings. I'm looking forward to trying out 
your fix for the comm stuff.
Cheers, MIchael


On Tue, Dec 1, 2009 at 12:43 PM, Riccardo Corradini 
<riccardocorrad...@yahoo.it> wrote:


Dear Jaroslav
after goggling a lot I found a nice example that I converted to fix the 
MPI_Comunicator problem

Here there is the code adjusted from 
http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/


there are just two files Comm.h and Comexample.cc

#define FILL_COMM(RNAME,LNAME)        \
  MPI_Comm RNAME##comm = MPI_LNAME;\

#include "mpi.h"



#define READ_ONLY 1
#define WRITE_ONLY 2

#define READ_WRITE 3

template <typename Container, typename ValueType, int nPropType>
class property
{
public:
property()
{
  m_cObject = NULL;
  Set = NULL;
  Get = NULL;
}
//-- This to set a pointer to the class that contain the

//   property --
void
 setContainer(Container* cObject)
{
  m_cObject = cObject;
}
//-- Set the set member function that will change the value --
void setter(void (Container::*pSet)(ValueType value))
{
  if((nPropType == WRITE_ONLY) || (nPropType == READ_WRITE))

    Set = pSet;
  else
    Set = NULL;
}
//-- Set the get member function that will retrieve the value --
void getter(ValueType (Container::*pGet)())
{
  if((nPropType == READ_ONLY) || (nPropType == READ_WRITE))

    Get = pGet;
  else
    Get = NULL;
}
//-- Overload the '=' sign to set the value using the set
//   member --
ValueType operator =(const ValueType& value)
{
  assert(m_cObject != NULL);

  assert(Set != NULL);
  (m_cObject->*Set)(value);
  return value;
}
//-- To make possible to cast the property
 class to the
//   internal type --
operator ValueType()
{
  assert(m_cObject != NULL);
  assert(Get != NULL);
  return (m_cObject->*Get)();
}
private:
  Container* m_cObject;  //-- Pointer to the module that

                         //   contains the property --
  void (Container::*Set)(ValueType value);
                         //-- Pointer to set member function --
  ValueType (Container::*Get)();
                         //-- Pointer to get member function --

};


class
 PropTest
{
public:
  PropTest()
  {
    Comm.setContainer(this);
    Comm.setter(&PropTest::setComm);
    Comm.getter(&PropTest::getComm);
  }
  MPI_Comm getComm()
  {
    return m_nComm;

  }
  void setComm(MPI_Comm nComm)
  {
    m_nComm = nComm;
  }
  property<PropTest,MPI_Comm,READ_WRITE> Comm;


private:
  MPI_Comm m_nComm;
};


And the DLD function
#include <octave/oct.h>

#include "Comm.h"
DEFUN_DLD(CommExample,args,,"A simple example using a C++ class holding 
Comunicator as property")
{
    
// Example setting
 PropTest SetTest;
 SetTest.Comm = MPI_COMM_WORLD;

// Example getting
 MPI_Comm ex_comm;
 ex_comm = SetTest.Comm;
// the problem is how could SetTest
 comunicate with GNU Octave ?
}

I think the situation here is simpler because we have a simple class holding 
all pieces of info and perhaps the pointers to this class are easier to 
handle.. and more universal among different MPI implementations ...

What do you think ?
Thanks a lot in advance for all your patience and help.
Bests
Riccardo








      

------------------------------------------------------------------------------

Join us December 9, 2009 for the Red Hat Virtual Experience,

a free event focused on virtualization and cloud computing.

Attend in-depth sessions from your desk. Your couch. Anywhere.

http://p.sf.net/sfu/redhat-sfdev2dev


_______________________________________________

Octave-dev mailing list

Octave-dev@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/octave-dev







      
------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to