Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost] Create Graph in Function
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2009-10-29 08:47:56


On Wed, 28 Oct 2009, James wrote:

> 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(){
> \\...
> }

The storage for the graph needs to be somewhere; making the variables of
type Graph rather than Graph& would solve that problem.

-- Jeremiah Willcock


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