src/work/alpar/smart_graph_demo.cc
author deba
Wed, 08 Sep 2004 12:06:45 +0000
changeset 822 88226d9fe821
parent 164 970b265696b0
child 880 9d0bfd35b97c
permissions -rw-r--r--
The MapFactories have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.
     1 #include<smart_graph.h>
     2 #include<emptygraph.h>
     3 
     4 #include <iostream>
     5 #include <vector>
     6 
     7 using namespace hugo;
     8 
     9 typedef SmartGraph Graph;
    10 //typedef GraphSkeleton Graph;
    11 
    12 
    13 Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n)
    14 {
    15   return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID;
    16 }
    17 
    18 int main()
    19 {
    20 
    21   typedef Graph::Edge Edge;
    22   typedef Graph::InEdgeIt InEdgeIt;
    23   typedef Graph::OutEdgeIt OutEdgeIt;
    24   typedef Graph::EdgeIt EdgeIt;
    25   typedef Graph::Node Node;
    26   typedef Graph::NodeIt NodeIt;
    27   
    28   Graph G;
    29   
    30   {
    31     NodeIt n;
    32 
    33     for(int i=0;i<10;i++) G.addNode();
    34     for(G.first(n);G.valid(n);G.next(n)) 
    35       for(NodeIt m(G);m!=INVALID;G.next(m)) 
    36 	if(n!=m) G.addEdge(n,m);
    37     
    38     OutEdgeIt e = safeFirstOut(G,n);
    39     OutEdgeIt f = safeFirstOut(G,NodeIt(G));
    40     
    41     
    42     InEdgeIt i(INVALID), j;
    43     InEdgeIt ii(i);
    44     ii=G.first(i,n);
    45     ii=G.next(i);
    46     
    47     OutEdgeIt o(INVALID), oo;
    48     OutEdgeIt ooo(oo);
    49     oo=G.first(o,n);
    50     oo=G.next(o);
    51     
    52     EdgeIt ei(INVALID), eie;
    53     EdgeIt eiee(ei);
    54     eie=G.first(ei);
    55     eie=G.next(ei);
    56     
    57     Edge eee(i);
    58     eee=o;
    59     eee=eie;
    60     
    61     
    62     bool tm;
    63     tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei);
    64     
    65     std::vector<InEdgeIt> v(10);
    66     std::vector<InEdgeIt> w(10,INVALID);
    67     
    68   }
    69   
    70   // Test of maps
    71 
    72   G.clear();
    73   
    74   for(int i=0;i<10;i++) G.addNode();
    75   for(NodeIt i(G);G.valid(i);G.next(i)) 
    76     for(NodeIt j(G);G.valid(j);G.next(j)) 
    77       if(i<j) G.addEdge(i,j);           //The iterators are comparable
    78   
    79   Graph::NodeMap<int> n(G);
    80   int count=0;
    81   for(NodeIt i(G);G.valid(i);G.next(i)) n[i]=count++;
    82   
    83   Graph::NodeMap<int> nn=n;
    84   Graph::NodeMap<double> dd=n;
    85 
    86   n = nn;
    87   
    88   dd = nn;
    89   
    90   Graph::EdgeMap<int> emap(G);
    91 
    92   // Test of SymSmartGraph
    93   
    94   {
    95     typedef SymSmartGraph Graph;
    96     typedef Graph::Edge Edge;
    97     typedef Graph::InEdgeIt InEdgeIt;
    98     typedef Graph::OutEdgeIt OutEdgeIt;
    99     typedef Graph::EdgeIt EdgeIt;
   100     typedef Graph::Node Node;
   101     typedef Graph::NodeIt NodeIt;
   102 
   103     Graph G;
   104 
   105     for(int i=0;i<10;i++) G.addNode();
   106     for(NodeIt i(G);G.valid(i);G.next(i)) 
   107       for(NodeIt j(G);G.valid(j);G.next(j)) 
   108 	if(i<j) G.addEdge(i,j);           //The iterators are comparable
   109   
   110     Graph::EdgeMap<int> em(G);
   111     Graph::SymEdgeMap<int> sm(G);
   112     for(EdgeIt e(G);G.valid(e);G.next(e)) em[e]=G.id(e);
   113     for(EdgeIt e(G);G.valid(e);G.next(e))
   114       if(G.tail(e)<G.head(e)) sm[e]=G.id(e);
   115     
   116     for(EdgeIt e(G);G.valid(e);G.next(e))
   117       std::cout << G.id(G.tail(e)) << "->" << G.id(G.head(e))
   118 		<< ": id=" << G.id(e) << " oppid=" << G.id(G.opposite(e))
   119 		<< " em=" << em[e]
   120 		<< " sm=" << sm[e] << "\n";
   121     
   122   }
   123   
   124 }