[Lemon-commits] deba: r3213 - lemon/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Thu Mar 1 17:47:24 CET 2007
Author: deba
Date: Thu Mar 1 17:47:23 2007
New Revision: 3213
Modified:
lemon/trunk/lemon/list_graph.h
lemon/trunk/lemon/smart_graph.h
lemon/trunk/lemon/ugraph_adaptor.h
Log:
Bug fix
Modified: lemon/trunk/lemon/list_graph.h
==============================================================================
--- lemon/trunk/lemon/list_graph.h (original)
+++ lemon/trunk/lemon/list_graph.h Thu Mar 1 17:47:23 2007
@@ -527,10 +527,11 @@
}
}
virtual void build() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
std::vector<Node> nodes;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
nodes.push_back(node);
}
for (int i = nodes.size() - 1; i >= 0; --i) {
@@ -538,9 +539,10 @@
}
}
virtual void clear() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
snapshot.eraseNode(node);
}
}
@@ -577,10 +579,11 @@
}
}
virtual void build() {
- EdgeNotifier* notifier = getNotifier();
+ EdgeNotifier* _notifier = notifier();
Edge edge;
std::vector<Edge> edges;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID;
+ _notifier->next(edge)) {
edges.push_back(edge);
}
for (int i = edges.size() - 1; i >= 0; --i) {
@@ -588,9 +591,9 @@
}
}
virtual void clear() {
- EdgeNotifier* notifier = getNotifier();
+ EdgeNotifier* _notifier = notifier();
Edge edge;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID; _notifier->next(edge)) {
snapshot.eraseEdge(edge);
}
}
@@ -639,8 +642,8 @@
void attach(ListGraph &_graph) {
graph = &_graph;
- node_observer_proxy.attach(graph->getNotifier(Node()));
- edge_observer_proxy.attach(graph->getNotifier(Edge()));
+ node_observer_proxy.attach(graph->notifier(Node()));
+ edge_observer_proxy.attach(graph->notifier(Edge()));
}
void detach() {
@@ -911,13 +914,23 @@
void firstInc(UEdge &e, bool& d, const Node& v) const {
int de = nodes[v.id].first_out;
- e.id = de / 2;
- d = ((de & 1) == 1);
+ if (de != -1 ) {
+ e.id = de / 2;
+ d = ((de & 1) == 1);
+ } else {
+ e.id = -1;
+ d = true;
+ }
}
void nextInc(UEdge &e, bool& d) const {
int de = (edges[(e.id * 2) | (d ? 1 : 0)].next_out);
- e.id = de / 2;
- d = ((de & 1) == 1);
+ if (de != -1 ) {
+ e.id = de / 2;
+ d = ((de & 1) == 1);
+ } else {
+ e.id = -1;
+ d = true;
+ }
}
static int id(Node v) { return v.id; }
@@ -1261,10 +1274,11 @@
}
}
virtual void build() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
std::vector<Node> nodes;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
nodes.push_back(node);
}
for (int i = nodes.size() - 1; i >= 0; --i) {
@@ -1272,9 +1286,10 @@
}
}
virtual void clear() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
snapshot.eraseNode(node);
}
}
@@ -1311,10 +1326,11 @@
}
}
virtual void build() {
- UEdgeNotifier* notifier = getNotifier();
+ UEdgeNotifier* _notifier = notifier();
UEdge edge;
std::vector<UEdge> edges;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID;
+ _notifier->next(edge)) {
edges.push_back(edge);
}
for (int i = edges.size() - 1; i >= 0; --i) {
@@ -1322,9 +1338,10 @@
}
}
virtual void clear() {
- UEdgeNotifier* notifier = getNotifier();
+ UEdgeNotifier* _notifier = notifier();
UEdge edge;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID;
+ _notifier->next(edge)) {
snapshot.eraseUEdge(edge);
}
}
@@ -1373,8 +1390,8 @@
void attach(ListUGraph &_graph) {
graph = &_graph;
- node_observer_proxy.attach(graph->getNotifier(Node()));
- edge_observer_proxy.attach(graph->getNotifier(UEdge()));
+ node_observer_proxy.attach(graph->notifier(Node()));
+ edge_observer_proxy.attach(graph->notifier(UEdge()));
}
void detach() {
@@ -2039,10 +2056,11 @@
}
}
virtual void build() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
std::vector<Node> nodes;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
nodes.push_back(node);
}
for (int i = nodes.size() - 1; i >= 0; --i) {
@@ -2050,9 +2068,10 @@
}
}
virtual void clear() {
- NodeNotifier* notifier = getNotifier();
+ NodeNotifier* _notifier = notifier();
Node node;
- for (notifier->first(node); node != INVALID; notifier->next(node)) {
+ for (_notifier->first(node); node != INVALID;
+ _notifier->next(node)) {
snapshot.eraseNode(node);
}
}
@@ -2089,10 +2108,11 @@
}
}
virtual void build() {
- UEdgeNotifier* notifier = getNotifier();
+ UEdgeNotifier* _notifier = notifier();
UEdge edge;
std::vector<UEdge> edges;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID;
+ _notifier->next(edge)) {
edges.push_back(edge);
}
for (int i = edges.size() - 1; i >= 0; --i) {
@@ -2100,9 +2120,10 @@
}
}
virtual void clear() {
- UEdgeNotifier* notifier = getNotifier();
+ UEdgeNotifier* _notifier = notifier();
UEdge edge;
- for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+ for (_notifier->first(edge); edge != INVALID;
+ _notifier->next(edge)) {
snapshot.eraseUEdge(edge);
}
}
@@ -2151,8 +2172,8 @@
void attach(ListBpUGraph &_graph) {
graph = &_graph;
- node_observer_proxy.attach(graph->getNotifier(Node()));
- edge_observer_proxy.attach(graph->getNotifier(UEdge()));
+ node_observer_proxy.attach(graph->notifier(Node()));
+ edge_observer_proxy.attach(graph->notifier(UEdge()));
}
void detach() {
Modified: lemon/trunk/lemon/smart_graph.h
==============================================================================
--- lemon/trunk/lemon/smart_graph.h (original)
+++ lemon/trunk/lemon/smart_graph.h Thu Mar 1 17:47:23 2007
@@ -286,14 +286,14 @@
{
while(s.edge_num<edges.size()) {
Edge edge = edgeFromId(edges.size()-1);
- Parent::getNotifier(Edge()).erase(edge);
+ Parent::notifier(Edge()).erase(edge);
nodes[edges.back().source].first_out=edges.back().next_out;
nodes[edges.back().target].first_in=edges.back().next_in;
edges.pop_back();
}
while(s.node_num<nodes.size()) {
Node node = nodeFromId(nodes.size()-1);
- Parent::getNotifier(Node()).erase(node);
+ Parent::notifier(Node()).erase(node);
nodes.pop_back();
}
}
@@ -505,13 +505,23 @@
void firstInc(UEdge &edge, bool& d, const Node& v) const {
int de = nodes[v.id].first_out;
- edge.id = de / 2;
- d = ((de & 1) == 1);
+ if (de != -1) {
+ edge.id = de / 2;
+ d = ((de & 1) == 1);
+ } else {
+ edge.id = -1;
+ d = true;
+ }
}
void nextInc(UEdge &edge, bool& d) const {
int de = (edges[(edge.id * 2) | (d ? 1 : 0)].next_out);
- edge.id = de / 2;
- d = ((de & 1) == 1);
+ if (de != -1) {
+ edge.id = de / 2;
+ d = ((de & 1) == 1);
+ } else {
+ edge.id = -1;
+ d = true;
+ }
}
static int id(Node v) { return v.id; }
@@ -641,11 +651,11 @@
while(s.edge_num<edges.size()) {
int n=edges.size()-1;
UEdge edge=uEdgeFromId(n/2);
- Parent::getNotifier(UEdge()).erase(edge);
+ Parent::notifier(UEdge()).erase(edge);
std::vector<Edge> dir;
dir.push_back(edgeFromId(n));
dir.push_back(edgeFromId(n-1));
- Parent::getNotifier(Edge()).erase(dir);
+ Parent::notifier(Edge()).erase(dir);
nodes[edges[n].target].first_out=edges[n].next_out;
nodes[edges[n-1].target].first_out=edges[n-1].next_out;
edges.pop_back();
@@ -654,7 +664,7 @@
while(s.node_num<nodes.size()) {
int n=nodes.size()-1;
Node node = nodeFromId(n);
- Parent::getNotifier(Node()).erase(node);
+ Parent::notifier(Node()).erase(node);
nodes.pop_back();
}
}
@@ -1023,25 +1033,25 @@
{
while(s.edge_num<edges.size()) {
UEdge edge = uEdgeFromId(edges.size()-1);
- Parent::getNotifier(UEdge()).erase(edge);
+ Parent::notifier(UEdge()).erase(edge);
std::vector<Edge> dir;
dir.push_back(Parent::direct(edge, true));
dir.push_back(Parent::direct(edge, false));
- Parent::getNotifier(Edge()).erase(dir);
+ Parent::notifier(Edge()).erase(dir);
aNodes[edges.back().aNode >> 1].first=edges.back().next_out;
bNodes[edges.back().bNode >> 1].first=edges.back().next_in;
edges.pop_back();
}
while(s.anode_num<aNodes.size()) {
Node node = nodeFromANodeId(aNodes.size() - 1);
- Parent::getNotifier(ANode()).erase(node);
- Parent::getNotifier(Node()).erase(node);
+ Parent::notifier(ANode()).erase(node);
+ Parent::notifier(Node()).erase(node);
aNodes.pop_back();
}
while(s.bnode_num<bNodes.size()) {
Node node = nodeFromBNodeId(bNodes.size() - 1);
- Parent::getNotifier(BNode()).erase(node);
- Parent::getNotifier(Node()).erase(node);
+ Parent::notifier(BNode()).erase(node);
+ Parent::notifier(Node()).erase(node);
bNodes.pop_back();
}
}
Modified: lemon/trunk/lemon/ugraph_adaptor.h
==============================================================================
--- lemon/trunk/lemon/ugraph_adaptor.h (original)
+++ lemon/trunk/lemon/ugraph_adaptor.h Thu Mar 1 17:47:23 2007
@@ -151,20 +151,20 @@
typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
- NodeNotifier& getNotifier(Node) const {
- return graph->getNotifier(Node());
+ NodeNotifier& notifier(Node) const {
+ return graph->notifier(Node());
}
typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
- EdgeNotifier& getNotifier(Edge) const {
- return graph->getNotifier(Edge());
+ EdgeNotifier& notifier(Edge) const {
+ return graph->notifier(Edge());
}
typedef typename ItemSetTraits<Graph, UEdge>::ItemNotifier UEdgeNotifier;
- UEdgeNotifier& getNotifier(UEdge) const {
- return graph->getNotifier(UEdge());
+ UEdgeNotifier& notifier(UEdge) const {
+ return graph->notifier(UEdge());
}
template <typename _Value>
@@ -311,6 +311,7 @@
void firstInc(UEdge& i, bool& d, const Node& n) const {
Parent::firstInc(i, d, n);
while (i!=INVALID && (!(*uedge_filter_map)[i]
+ || !(*node_filter_map)[Parent::source(i)]
|| !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d);
}
@@ -347,8 +348,9 @@
void nextInc(UEdge& i, bool& d) const {
Parent::nextInc(i, d);
- while (i!=INVALID && (!(*uedge_filter_map)[i]
- || !(*node_filter_map)[Parent::source(i)])) Parent::nextInc(i, d);
+ while (i!=INVALID && (!(*uedge_filter_map)[i]
+ || !(*node_filter_map)[Parent::source(i)]
+ || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d);
}
/// \brief Hide the given node in the graph.
@@ -987,14 +989,14 @@
typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
- NodeNotifier& getNotifier(Node) const {
- return graph->getNotifier(Node());
+ NodeNotifier& notifier(Node) const {
+ return graph->notifier(Node());
}
typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
- EdgeNotifier& getNotifier(Edge) const {
- return graph->getNotifier(Edge());
+ EdgeNotifier& notifier(Edge) const {
+ return graph->notifier(Edge());
}
template <typename _Value>
More information about the Lemon-commits
mailing list