#
# <one line to give the library's name and an idea of what it does.>
# Copyright (C) 2014    <copyright holder> <email>
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.    If not, see <http://www.gnu.org/licenses/>.
# 
#

import abc

class GraphIteratorInterface:
  """!
  Abstract class for any graph iterators. Inherited class must to implement
  the method next_node!
  """
  __metaclass__ = abc.ABCMeta

  def __init__(self):
    """!
    Notking to do...
    """
    pass
    
  @abc.abstractmethod
  def next_node(self, graph):
    """!
    Inherited class should implement this method.

    This method will be used to iterate over the built graph. For example
    it can be required to iteratre over all Malt relations stored into
    analyzed graph, so this method should returns the nodes from this relations.

    @param graph: The graph for iterate of it with type (networkx.DiGraph())
    @return next Node in the graph
    """
    pass
