// file: SparseAdjIterator.h
// pg. 33, Algorithms in C++, Part 5, Robert Sedgewick
// Iterator for the sparse graph

class SparseGraph::AdjIterator
{
private:
  const SparseGraph &graph;
  int vertex;
  Link vList;

public:
  AdjIterator(const SparseGraph &G, int v) :
    graph(G), vertex(v) {
    vList = NULL;
  }

  int beg() {
    vList = graph.adj[vertex];
    if ( vList != NULL )
      return vList->vertex;
    else
      return -1;
  }
  int nxt() {
    if (vList != NULL)
      vList = vList->next;
    if ( vList != NULL )
      return vList->vertex;
    else
      return -1;
  }
  bool end() {
    return vList == NULL;
  }
};
