Boost logo

Boost Users :

Subject: Re: [Boost-users] [multi_index] Problem of scope with the replace in static data structure
From: Rodrigo Dias Ferreira (rodrigodias_at_[hidden])
Date: 2009-02-11 03:37:27


Hi Joaquim,

>
> Hi Rodrigo,
>
> First of all let me advice you to add the name of the library to the
> subject line
> of your post (in this case, [multi_index]) so that authors can more easily
> track messages of their particular interest.
Thanks for the advice. :)
>
> Rodrigo Dias Ferreira escribi?:
> > Hi there,
> >
> > I am having a problem with Boost.MultiIndex (I'm using Boost 1.37).
> >
> > So the problem is the following:
> > I am using a static data structure, an index which I use as my graph
> > repository:
> > [...]
> > For manipulating the graphs, I use a Graph_h (handler), which does a
> > copy from the graph from this repository, does the changes in the local
> > copy, and then the user has to call commitChanges(); to apply it in the
> > repository (which I am using the replace function from the MultiIndex
> > to commit it).
> >
> > The problem it is that inside the commitChanges(); I can retrieve from
> > the repository through the find function (from MultiIndex).
> >
> > But when I the main program, it does not work (remark: I am trying
> > right after calling the commitChanges(); It founds the graph, but it
> > seems to be the old one, and I cannot retrieve the nodes...
> >
>
> The code is too convoluted for me to detect anything suspicious: the
> fact that you check
> for the newly replaced element just before commitChanges returns and
> just after and
> have differing results cannot possibly be related to the fact that
> DynamicGraphs::_graphRep
> is static, so I'd look somewhere else. Suggestions:
>
> 1. Can you provide a narrowed down compilable program exhibiting the
> problem?
I think that will be a little hard to do, let's first try these steps below first, maybe you can figure out what it is, because
I'm not understanding what could be, since it seems to work inside
the function and outside doesn't, and as it is a static data member...

> 2. If the answer to 1 is no, can you post the debug console output of
> your program?
The output of this part of the code (I will mark the part inside the function commitChanges();:
///////////begin commitChanges();/////////////////////////////
DEBUG_at_commitChanges:before replacing:_git Name: COI:0351-123-4555
Node version was not found!
DEBUG_at_commitChanges:after replacing:_git Name: COI:0351-123-4555
Found it: Name: Node:0351-123-4569 Timestamp: 1234340512
Found it: Name: Node:0351-123-4569 Timestamp: 1234340521
///////////end commitChanges();/////////////////////////////
Commit was successful!
Retrieving the graph with commit:
Node version was not found!

- As you can see, inside before replacing, it did not find the nodes
inserted, as expected.
- Then after replacing it found the nodes inserted (as expected).
- But then after goes out of the function, as you can see, no nodes was found it... they shouldn't be there? I mean because the repository is static, I think it should be no reason for the nodes be there inside the
function, and outside no...

> 3. You're copying values of the type Graph. How's this type defined? Has
> it proper copy semantics?
Yes, I think so:
class Graph {
...
public:

        // TODO: Really constructors
        /// Default Constructor
        Graph() {
                _rangeBegin = 0;
                _rangeEnd = 0;
                }
        /// Copy constructors
        Graph(const Graph &g) : _rangeBegin(g._rangeBegin), _rangeEnd(g._rangeEnd),
                _nodeRep(g._nodeRep), _nodeNameRep(g._nodeNameRep),
                _nodeTimeStampView(g._nodeTimeStampView), _localPropRep(g._localPropRep),
                _globalPropRep(g._globalPropRep){}
...
}

> 4. What happens if you try the after-replace check inside
> Graph_h::commitChanges
> (that is, the section beginning with cout << "DEBUG_at_commitChanges:before
> replacing:_git Name: ")
> *twice* rather than just onec? Still got positive results for both checks?
Yes.
I've added twice before the replace and after, the result is the same (as expected) and still I don't understand why does not work outside...
DEBUG_at_commitChanges:before replacing:_git Name: COI:0351-123-4555
Node version was not found!
DEBUG_at_commitChanges:before replacing:_git Name: COI:0351-123-4555
Node version was not found!
DEBUG_at_commitChanges:after replacing:_git Name: COI:0351-123-4555
Found it: Name: Node:0351-123-4569 Timestamp: 1234341125
Found it: Name: Node:0351-123-4569 Timestamp: 1234341134
DEBUG_at_commitChanges:after replacing:_git Name: COI:0351-123-4555
Found it: Name: Node:0351-123-4569 Timestamp: 1234341125
Found it: Name: Node:0351-123-4569 Timestamp: 1234341134
Commit was successful!
Retrieving the graph with commit:
Node version was not found!

thanks a lot for the help,
I hope you can figure it out what it is happen...

best regards
                          Rodrigo

>
> I'm sorry I can't be more helpful with the info you provide. Looking fwd
> to
> having your feedback.
>
> Joaqu?n M L?pez Mu?oz
> Telef?nica, Investigaci?n y Desarrollo
>
>
>
>
>

-- 
*************************************************
Rodrigo Dias Ferreira
Master Student of Computational Engineering
Technische Universität Dresden - Germany
Mobile Phone:+49 171 3158797
E-mail: rodrigodias_at_[hidden]
*************************************************
Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger01

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