#include<smart_graph.h>
#include<emptygraph.h>

#include <iostream>
#include <vector>

using namespace hugo;

//typedef SmartGraph Graph;
typedef EmptyGraph Graph;


Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n)
{
  return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID;
}

int main()
{

  typedef Graph::Edge Edge;
  typedef Graph::InEdgeIt InEdgeIt;
  typedef Graph::OutEdgeIt OutEdgeIt;
  typedef Graph::EdgeIt EdgeIt;
  typedef Graph::Node Node;
  typedef Graph::NodeIt NodeIt;
  
  Graph G;
  NodeIt n;


  for(int i=0;i<10;i++) G.addNode();
  for(G.first(n);G.valid(n);G.next(n)) 
    for(NodeIt m(G);m!=INVALID;G.next(m)) 
      if(n!=m) G.addEdge(n,m);

  OutEdgeIt e = safeFirstOut(G,n);
  OutEdgeIt f = safeFirstOut(G,NodeIt(G));
  

  InEdgeIt i(INVALID), j;
  InEdgeIt ii(i);
  ii=G.first(i,n);
  ii=G.next(i);
  
  OutEdgeIt o(INVALID), oo;
  OutEdgeIt ooo(oo);
  oo=G.first(o,n);
  oo=G.next(o);
  
  EdgeIt ei(INVALID), eie;
  EdgeIt eiee(ei);
  eie=G.first(ei);
  eie=G.next(ei);

  Edge eee(i);
  eee=o;
  eee=eie;
  
  
  bool tm;
  tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei);

  std::vector<InEdgeIt> v(10);
  std::vector<InEdgeIt> w(10,INVALID);
  
}
