src/work/alpar/list_graph_demo.cc
author deba
Wed, 08 Sep 2004 12:06:45 +0000
changeset 822 88226d9fe821
parent 401 2d0cccf7cc94
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<list_graph.h>
     2 #include<skeletons/graph.h>
     3 
     4 #include <iostream>
     5 #include <vector>
     6 
     7 using namespace hugo;
     8 
     9 typedef ListGraph 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 SymListGraph
    93   
    94   {
    95     typedef SymListGraph 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     //Delete all nodes
   123     NodeIt n;
   124     while(G.valid(G.first(n))) G.erase(n);
   125   }
   126 
   127   // Tests for NodeSet and EdgeSet
   128   
   129   {
   130     NodeSet N;
   131     
   132     typedef EdgeSet<NodeSet> ES;
   133     
   134     ES E(N);
   135     ES F(N);
   136     for(int i=0;i<10;i++) G.addNode();
   137     
   138     for(ES::NodeIt n(E);E.valid(n);E.next(n))
   139       for(ES::NodeIt m(E);E.valid(m);E.next(m))
   140 	if(n!=m) F.addEdge(n,m);
   141     for(ES::NodeIt n(F);F.valid(n);F.next(n))
   142       for(ES::NodeIt m(F);F.valid(m);F.next(m))
   143 	if(n<m) F.addEdge(n,m);
   144     
   145 
   146     NodeSet::NodeMap<int> nm1(N);
   147     ES::NodeMap<int> nm2(E);
   148     ES::EdgeMap<int> eme(E);
   149     ES::EdgeMap<int> emf(F);
   150     
   151        
   152   }
   153   
   154 }