diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/gwrapper.h --- a/src/work/alpar/gwrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,412 +0,0 @@ -// -*-mode: c++; -*- -#ifndef GRAPH_WRAPPER_H -#define GRAPH_WRAPPER_H - -namespace lemon { - -template -class TrivGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt InEdgeIt; - typedef typename G::OutEdgeIt OutEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(ftom,to); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - TrivGraphWrapper() {graph = NULL;} - TrivGraphWrapper(G &g) {graph = &g;} -}; - -template -class RevGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt OutEdgeIt; - typedef typename G::OutEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->source(e); } - NodeIt source(const EdgeIt &e); - { return graph->target(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - -template -class RevGraphExt : public G -{ -public: - // typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt OutEdgeIt; - typedef typename G::OutEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - -// template I &getFirst(I &i); { return graph->getFirst(i); } -// template I &getFirst(I &i,const P &p); -// { return graph->getFirst(i,p); } -// template I next(const I i); { return graph->goNext(i); } -// template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return G::source(e); } - NodeIt source(const EdgeIt &e); - { return G::target(e); } - -// template NodeIt aNode(const I e); -// { return graph->aNode(e); } -// template NodeIt bNode(const I e); -// { return graph->bNode(e); } - -// template bool valid(const I i); -// { return graph->valid(i); } - -// template void setInvalid(const I &i); -// { return graph->setInvalid(i); } - -// NodeIt addNode(); { return graph->addNode(); } - - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return G::addEdge(to,from); } - -// template void delete(I i); { graph->delete(i); } - -// void clean(); { graph->clean(); } - -// template class NodeMap : public typename G::NodeMap; -// template class EdgeMap : public typename G::EdgeMap; - -// void SetG(G &g) {graph = &g;} - -// RevGraphWrapper() {graph = NULL;} -// RevGraphWrapper(G &g) {graph = &g;} -}; - -template -class SymGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::SymEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt OutEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - - - - - - - - - - - - - - - - - - - -// FIXME: comparison should be made better!!! -template -class ResGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - class InEdgeIt - { - public: - G::NodeIt n; - G::InEdgeIt i; - G::OutEdgeIt o; - } - class OutEdgeIt - { - public: - G::NodeIt n; - G::InEdgeIt i; - G::OutEdgeIt o; - } - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - NodeIt &getFirst(NodeIt &n); { return graph->getFirst(n); } - - // EachEdge and SymEdge is missing!!!! - // EdgeIt <-> In/OutEdgeIt conversion is missing!!!! - - InEdgeIt &getFirst(InEdgeIt &e,const NodeIt &n) - { - e.n=n; - graph->getFirst(e.i,n); - while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) - graph->goNext(e.i); - if(!graph->valid(e.i)) { - graph->getFirst(e.o,n); - while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) - graph->goNext(e.o); - } - return e; - } - InEdgeIt &goNext(InEdgeIt &e) - { - if(graph->valid(e.i)) { - while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) - graph->goNext(e.i); - if(graph->valid(e.i)) return e; - else graph->getFirst(e.o,e.n); - } - else { - while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) - graph->goNext(e.o); - return e; - } - } - InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);} - bool valid(const InEdgeIt e) { return graph->valid(e.i)||graph->valid(e.o);} - - OutEdgeIt &getFirst(OutEdgeIt &e,const NodeIt &n) - { - e.n=n; - graph->getFirst(e.o,n); - while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) - graph->goNext(e.o); - if(!graph->valid(e.o)) { - graph->getFirst(e.i,n); - while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) - graph->goNext(e.i); - } - return e; - } - OutEdgeIt &goNext(OutEdgeIt &e) - { - if(graph->valid(e.o)) { - while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) - graph->goNext(e.o); - if(graph->valid(e.o)) return e; - else graph->getFirst(e.i,e.n); - } - else { - while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) - graph->goNext(e.i); - return e; - } - } - OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);} - bool valid(const OutEdgeIt e) { return graph->valid(e.o)||graph->valid(e.i);} - - template I &goNext(I &i); { return graph->goNext(i); } - template I next(const I i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - - - -// NodeIt &getFirst(NodeIt &n) { return graph->getFirst(n); } -// InEdgeIt &getFirst(InEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// OutEdgeIt &getFirst(OutEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// SymEdgeIt &getFirst(SymEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// EachEdgeIt &getFirst(EachEdgeIt &e); -// { return graph->getFirst(e); } - -// NodeIt next(const NodeIt &n); -// { return graph->next(n); } -// InEdgeIt next(const InEdgeIt &e); -// { return graph->next(e); } -// OutEdgeIt next(const OutEdgeIt &e); -// { return graph->next(e); } -// SymEdgeIt next(const SymEdgeIt &e); -// { return graph->next(e); } -// EachEdgeIt next(const EachEdgeIt &e); -// { return graph->next(e); } - -// NodeIt &goNext(NodeIt &n); -// { return graph->goNext(n); } -// InEdgeIt &goNext(InEdgeIt &e); -// { return graph->goNext(e); } -// OutEdgeIt &goNext(OutEdgeIt &e); -// { return graph->goNext(e); } -// SymEdgeIt &goNext(SymEdgeIt &e); -// { return graph->goNext(e); } -// EachEdgeIt &goNext(EachEdgeIt &e); -// { return graph->goNext(e); } -