Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost] Create Graph in Function
From: James (j.thunes_at_[hidden])
Date: 2009-10-28 22:49:46


Jeremiah Willcock wrote:
> On Wed, 28 Oct 2009, James wrote:
>
>> Jeremiah Willcock wrote:
>>> You could also just declare the graph in whichever scope will end up
>>> storing it and then pass it by reference to the construction function:
>>>
>>> void function(Graph& g) {
>>> // build g, or build a temporary and assign it to g
>>> }
>>>
>>> Graph the_graph;
>>> function(the_graph);
>>>
>>> Where are you going to be putting the final graph? Will it be in a
>>> variable in your main(), even if it is not constructed there?
>>>
>>> -- Jeremiah Willcock
>> Jeremiah,
>>
>> I'm sorry if I was not clear in my first post. The majority of the
>> code (along with the main routine) is written in Fortran. I am using
>> the graph to update a number of arrays which are needed for this
>> Fortran code. I will create the graph in a subroutine (or c++
>> function) and modify it in another c++ function. The graph is not
>> called in the main routine, only in subroutines.
>>
>> I need to know the way the graph is stored so I can pass it back to
>> the main function (or perhaps define it as a public variable).
>>
>> In reference to the code snippet above, am I correct in reading it as
>> the creating routine will be defined as:
>> void function(Graph& g) {
>> // build g, or build a temporary and assign it to g
>> }
>> and then the function to modify it would be defined as:
>> void modify_the_graph(Graph& g){
>> \\ some graph manipulations here
>> }
>
> Where is the variable holding the graph going to be? If it doesn't
> have a Fortran type the variable cannot be in Fortran code. Are you
> going to have a global variable (in C++) that contains the graph?
> Otherwise, you might need to use a raw (not shared) pointer to the
> graph, managing the memory yourself, and pass it between Fortran and
> C++ as either some kind of interoperability C pointer type (in newer
> Fortran versions), a large enough integer, or maybe a Cray pointer.
>
> -- Jeremiah Willcock

That is the issue. I agree that to manipulate the graph in the Fortran
portion of the code would be difficult (due the lack of a comparable
data type). Luckily, I don't need to modify the graph in the Fortran
portion of the code, I just need to allow for a c++ function to access
the graph. If I can define the graph as a global variable in c++ and
negate the need to pass the graph from the create_graph function to the
modify_graph function via the Fortran main routine:
   Create_Graph.cpp -> Main.f -> Modify_Graph.cpp
would be great.

Would I accomplish this as:
in create_graph.cpp
  Graph& g;

  void create_graph(){
  \\ create graph
  }

and in modify_graph.cpp
  extern Graph& g;

  void modify_graph(){
  \\...
  }

-James Thunes


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net