Boost logo

Boost Users :

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


Jeremiah Willcock wrote:
> On Wed, 28 Oct 2009, Sandeep Gupta wrote:
>
>>
>>
>> On Wed, Oct 28, 2009 at 6:12 PM, James Thunes <j.thunes_at_[hidden]>
>> wrote:
>> Perhaps an easy answer, but I am working on adding a boost
>> graph to an existing code. I would like to create the graph in
>> a function (not main) and then read/modify it in a separate
>> function. I am unsure as to what I need to pass between the
>> functions to allow this to work.
>>
>> In other words, I am able to correctly create the graph in a
>> function and modify as necessary. This function will be
>> called many times as the code runs and it is inefficient to
>> recreate the graph every time. I want to create the graph once
>> when the code is run and pass the created graph to the function.
>>
>> Due to the structure of the code (mostly Fortran), I can not
>> define the graph in the main function of the code.
>>
>> My graph is defined as:
>> adjacency_list<vecS, vecS, bidirectionalS, no_property,
>> EdgeProperty> Graph;
>>
>> Thank you for any help you can give,
>> James
>>
>> Try shared_ptr. Something like.
>>
>>
>> function(){
>> typedef adjacency_list<vecS, vecS, bidirectionalS, no_property,
>> EdgeProperty> Graph;
>> shared_ptr< Graph > gptr( new Graph(n) );
>> return gptr;
>> }
>
> 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
  }

-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