Class GraphIterator<N,​E>

java.lang.Object
xyz.cofe.collection.graph.GraphIterator<N,​E>
Type Parameters:
N - Тип вершины
E - Тип ребра
All Implemented Interfaces:
java.util.Iterator<Path<N,​E>>

public class GraphIterator<N,​E>
extends java.lang.Object
implements java.util.Iterator<Path<N,​E>>
Обход графа
Author:
Kamnev Georgiy
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static interface  GraphIterator.StoredState<N,​E>
    Интерфейс для восстановления рание сохраненного состояния
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.util.concurrent.ConcurrentLinkedQueue<GraphIteratorEvent<N,​E>> eventQueue
    Очередь сообщений
    protected boolean fetchFinishSended  
    protected NodesExtracter<N,​Pair<N,​E>> follow
    Функция извлечения исходящих/следующих верших из указанной вершины
    protected ListenersHelper<GraphIteratorListener<N,​E>,​GraphIteratorEvent<N,​E>> listeners
    Подписки
    protected java.util.List<Path<N,​E>> paths
    Текущий список рабочих путей
    protected GraphIteratorPoller<N,​E> poller
    Функция вытаскивания (выбор и удаление) пути из списка рабочих путей
    protected GraphIteratorPusher<N,​E> pusher
    Функция помещаюшая пути в список рабочих
    protected java.util.Iterator<N> startIterator
    Итератор верщин в графе
    protected java.lang.Object sync
    Объект для синхронизации
    protected java.util.Set<N> visited
    Набор посещенных вершин
  • Constructor Summary

    Constructors 
    Constructor Description
    GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow)
    Конструктор.
    GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow, GraphIteratorPoller<N,​E> poller, GraphIteratorPusher<N,​E> pusher)
    Конструктор
    GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow, GraphIteratorPusher<N,​E> pusher)
    Конструктор.
    GraphIterator​(GraphIterator.StoredState<N,​E> sstate, java.lang.Object sync)
    Конструктор восстановления
  • Method Summary

    Modifier and Type Method Description
    void addEvent​(GraphIteratorEvent<N,​E> event)
    Добавляет событие в очередь
    java.lang.AutoCloseable addListener​(GraphIteratorListener listener)
    Добавление подписчика на события
    java.lang.AutoCloseable addListener​(GraphIteratorListener listener, boolean weakLink)
    Добавление подписчика на события
    protected java.util.List<Path<N,​E>> fetchStartPaths()
    Извлечение начальных путей из списка вершин
    protected void fireEvent​(GraphIteratorEvent<N,​E> event)
    Уведомление о событии подписчиков
    protected java.util.List<Path<N,​E>> followPaths​(Path<N,​E> path)
    Извлечение полследующих путей из указанного
    NodesExtracter<N,​Pair<N,​E>> getFollow()
    Функция извлечения исходящих/следующих верших из указанной вершины
    java.util.Set<GraphIteratorListener<N,​E>> getListeners()
    Возвращает подписчиков
    GraphIteratorPoller<N,​E> getPoller()
    Функция выборки очередного пути из списка возможных
    GraphIteratorPusher<N,​E> getPusher()
    Функция добавления списка путей к существующему списку
    java.util.Iterator<N> getStartIterator()
    Возвращает итератор по вершинам с которых начинается обход
    java.util.Set<N> getVisited()
    Возвращает набор посещенных узлов
    java.util.List<Path<N,​E>> getWorkPaths()
    Возвращает рабочий набор путей
    boolean hasListener​(GraphIteratorListener listener)
    Проверяет наличие подписчика на события
    boolean hasNext()
    Проверка наличия очередного пути в графе
    protected Path<N,​E> join​(Path<N,​E> path, N nextNode, E nextEdge)
    Создает путь (конкретенация) содержащий указанный и последующие за ним вершину + ребро
    <EventType extends GraphIteratorEvent>
    java.lang.AutoCloseable
    listen​(java.lang.Class<EventType> evType, java.util.function.Consumer<EventType> listener)
    Добавляет подписчика на событие определенного типа
    Path<N,​E> next()
    Получение очередного пути
    protected Path<N,​E> poll​(java.util.List<Path<N,​E>> paths)
    Извлечение пути из списка.
    protected void push​(java.util.List<Path<N,​E>> pushPaths)
    Помещение путей в список
    void remove()
    Пустая функция
    void removeListener​(GraphIteratorListener listener)
    Отписка от событий
    void sendEvents()
    Рассылает события из очереди подписчикам
    protected void sendFetchFinish()
    Добавляет событие FetchFinish, если оно небыло еще добавлено
    protected Path<N,​E> startPath​(N from)
    Создает начальный путь
    protected Path<N,​E> startPath​(N from, N to, E e)
    Создает начальный путь
    void sync​(java.util.function.Consumer<GraphIterator<N,​E>> syncCode)
    Выполняет код синхронно (блокируя другие операции)

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.util.Iterator

    forEachRemaining
  • Field Details

    • sync

      protected final java.lang.Object sync
      Объект для синхронизации
    • follow

      protected final NodesExtracter<N,​Pair<N,​E>> follow
      Функция извлечения исходящих/следующих верших из указанной вершины
    • paths

      protected final java.util.List<Path<N,​E>> paths
      Текущий список рабочих путей
    • pusher

      protected final GraphIteratorPusher<N,​E> pusher
      Функция помещаюшая пути в список рабочих
    • poller

      protected final GraphIteratorPoller<N,​E> poller
      Функция вытаскивания (выбор и удаление) пути из списка рабочих путей
    • visited

      protected final java.util.Set<N> visited
      Набор посещенных вершин
    • startIterator

      protected final java.util.Iterator<N> startIterator
      Итератор верщин в графе
    • listeners

      protected final ListenersHelper<GraphIteratorListener<N,​E>,​GraphIteratorEvent<N,​E>> listeners
      Подписки
    • eventQueue

      protected final java.util.concurrent.ConcurrentLinkedQueue<GraphIteratorEvent<N,​E>> eventQueue
      Очередь сообщений
    • fetchFinishSended

      protected boolean fetchFinishSended
  • Constructor Details

    • GraphIterator

      public GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow)
      Конструктор.
      По умолчанию:
      • poller - FirstPoller
      • pusher - PrependPusher
      Parameters:
      starts - Список вершин с которых происходит обход графа
      follow - Функция извлечения исходящих/следующих верших из указанной вершины
    • GraphIterator

      public GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow, GraphIteratorPusher<N,​E> pusher)
      Конструктор.
      По умолчанию:
      • poller - FirstPoller
      Parameters:
      starts - Список вершин с которых происходит обход графа
      follow - Функция извлечения исходящих/следующих верших из указанной вершины
      pusher - Функция добавления списка путей к существующему списку
    • GraphIterator

      public GraphIterator​(java.lang.Iterable<N> starts, NodesExtracter<N,​Pair<N,​E>> follow, GraphIteratorPoller<N,​E> poller, GraphIteratorPusher<N,​E> pusher)
      Конструктор
      Parameters:
      starts - Список вершин с которых происходит обход графа
      follow - Функция извлечения исходящих/следующих верших из указанной вершины
      poller - Функция выборки очередного пути из списка возможных
      pusher - Функция добавления списка путей к существующему списку
    • GraphIterator

      public GraphIterator​(GraphIterator.StoredState<N,​E> sstate, java.lang.Object sync)
      Конструктор восстановления
      Parameters:
      sstate - ранение сохраненноное состояние
      sync - объект для синронизации графа
  • Method Details

    • hasListener

      public boolean hasListener​(GraphIteratorListener listener)
      Проверяет наличие подписчика на события
      Parameters:
      listener - подписчик
      Returns:
      true - есть подписка
    • getListeners

      public java.util.Set<GraphIteratorListener<N,​E>> getListeners()
      Возвращает подписчиков
      Returns:
      подписчики
    • addListener

      public java.lang.AutoCloseable addListener​(GraphIteratorListener listener)
      Добавление подписчика на события
      Parameters:
      listener - подписчик
      Returns:
      отписаться от событий
    • addListener

      public java.lang.AutoCloseable addListener​(GraphIteratorListener listener, boolean weakLink)
      Добавление подписчика на события
      Parameters:
      listener - подписчик
      weakLink - true - добавить подписчика на weak ссылку
      Returns:
      отписаться от событий
    • removeListener

      public void removeListener​(GraphIteratorListener listener)
      Отписка от событий
      Parameters:
      listener - подписчик
    • fireEvent

      protected void fireEvent​(GraphIteratorEvent<N,​E> event)
      Уведомление о событии подписчиков
      Parameters:
      event - событие
    • listen

      public <EventType extends GraphIteratorEvent> java.lang.AutoCloseable listen​(java.lang.Class<EventType> evType, java.util.function.Consumer<EventType> listener)
      Добавляет подписчика на событие определенного типа
      Type Parameters:
      EventType - Тип события
      Parameters:
      evType - Тип события
      listener - Подписчик
      Returns:
      Отписка
    • addEvent

      public void addEvent​(GraphIteratorEvent<N,​E> event)
      Добавляет событие в очередь
      Parameters:
      event - событие
    • sendEvents

      public void sendEvents()
      Рассылает события из очереди подписчикам
    • getFollow

      public NodesExtracter<N,​Pair<N,​E>> getFollow()
      Функция извлечения исходящих/следующих верших из указанной вершины
      Returns:
      функция извлечения
    • getPusher

      public GraphIteratorPusher<N,​E> getPusher()
      Функция добавления списка путей к существующему списку
      Returns:
      функция добавления
    • getPoller

      public GraphIteratorPoller<N,​E> getPoller()
      Функция выборки очередного пути из списка возможных
      Returns:
      функция выборки
    • getWorkPaths

      public java.util.List<Path<N,​E>> getWorkPaths()
      Возвращает рабочий набор путей
      Returns:
      Рабочий набор путей
    • getVisited

      public java.util.Set<N> getVisited()
      Возвращает набор посещенных узлов
      Returns:
      посещенные узлы
    • getStartIterator

      public java.util.Iterator<N> getStartIterator()
      Возвращает итератор по вершинам с которых начинается обход
      Returns:
      итератор вершин
    • sync

      public void sync​(java.util.function.Consumer<GraphIterator<N,​E>> syncCode)
      Выполняет код синхронно (блокируя другие операции)
      Parameters:
      syncCode - код
    • fetchStartPaths

      protected java.util.List<Path<N,​E>> fetchStartPaths()
      Извлечение начальных путей из списка вершин
      Returns:
      пути
    • startPath

      protected Path<N,​E> startPath​(N from, N to, E e)
      Создает начальный путь
      Parameters:
      from - начала пути
      to - конец пути
      e - ребро
      Returns:
      путь
    • startPath

      protected Path<N,​E> startPath​(N from)
      Создает начальный путь
      Parameters:
      from - начала пути
      Returns:
      путь
    • join

      protected Path<N,​E> join​(Path<N,​E> path, N nextNode, E nextEdge)
      Создает путь (конкретенация) содержащий указанный и последующие за ним вершину + ребро
      Parameters:
      path - путь
      nextNode - вершина
      nextEdge - ребро
      Returns:
      путь содержащий в конце вершину и ребро
    • followPaths

      protected java.util.List<Path<N,​E>> followPaths​(Path<N,​E> path)
      Извлечение полследующих путей из указанного
      Parameters:
      path - путь
      Returns:
      следующие пути
    • sendFetchFinish

      protected void sendFetchFinish()
      Добавляет событие FetchFinish, если оно небыло еще добавлено
    • hasNext

      public boolean hasNext()
      Проверка наличия очередного пути в графе
      Specified by:
      hasNext in interface java.util.Iterator<N>
      Returns:
      true - есть очередной путь, false - обход графа завершен
    • next

      public Path<N,​E> next()
      Получение очередного пути
      Specified by:
      next in interface java.util.Iterator<N>
      Returns:
      путь или null (конец)
    • remove

      public void remove()
      Пустая функция
      Specified by:
      remove in interface java.util.Iterator<N>
    • poll

      protected Path<N,​E> poll​(java.util.List<Path<N,​E>> paths)
      Извлечение пути из списка. Извлеченный путь удаляется из списка.
      Parameters:
      paths - список вариантов
      Returns:
      путь
    • push

      protected void push​(java.util.List<Path<N,​E>> pushPaths)
      Помещение путей в список
      Parameters:
      pushPaths - помещаемые пути