
Rodrigo Dias Ferreira escribió:
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@commitChanges:before replacing:_git Name: COI:0351-123-4555 Node version was not found! DEBUG@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!
[...] Nothing illuminating here... BTW, the code you ran to produce this output cannot be the same you posted before, as the traces are incompatible --the sentence "Retrieving the graph with commit:" appears nowhere in the code.
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){} ... }
It's hard to know whether you got copy semantics right without knowing the types of _rangeBegin, _rangeEnd and the rest of Graph data members, but this has prompted me to suspect that maybe there's something wrong with the handler type Graph_h (which I assume is some sort of ref-counted reference to Graph, right?). Can you please test the following? In your //Test of the commit section, rather than reuse graph_h please use a different variable to do the after-commitChanges check: //Test of the commit if (graph_h.commitChanges()) cout << "Commit was successful!\n"; else cout << "Commitretr was unsuccessful!\n"; // Debug //Graph_h graph_h; //NodeIterator nodeIt; //Node_h node_h; graphIt it = DynamicGraphs::_graphRep.find("COI:0351-123-4555"); Graph_h graph_h2 = Graph_h(it); // WE DON'T REUSE graph_h //propertystream_h propS; propS = graph_h2->lookupLocalProp("name"); p_h = propS.next(); cout << "DEBUG@main:right after the commit:_git " << p_h.value() <<endl; nodeIt = graph_h2->nodeIterator("Node:0351-123-4569"); if (!nodeIt) cout << "Node version was not found!"<<endl; else //Works for both: one match and range lookup while (!nodeIt.end()){ node_h = nodeIt.next(); cout << "Found it: " << *node_h; } //Debug Does this make any difference? Joaquín M López Muñoz Telefónica, Investigación y Desarrollo