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 interfaceGraphIterator.StoredState<N,E>Интерфейс для восстановления рание сохраненного состояния -
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.ConcurrentLinkedQueue<GraphIteratorEvent<N,E>>eventQueueОчередь сообщенийprotected booleanfetchFinishSendedprotected 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.ObjectsyncОбъект для синхронизации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 voidaddEvent(GraphIteratorEvent<N,E> event)Добавляет событие в очередьjava.lang.AutoCloseableaddListener(GraphIteratorListener listener)Добавление подписчика на событияjava.lang.AutoCloseableaddListener(GraphIteratorListener listener, boolean weakLink)Добавление подписчика на событияprotected java.util.List<Path<N,E>>fetchStartPaths()Извлечение начальных путей из списка вершинprotected voidfireEvent(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()Возвращает рабочий набор путейbooleanhasListener(GraphIteratorListener listener)Проверяет наличие подписчика на событияbooleanhasNext()Проверка наличия очередного пути в графеprotected Path<N,E>join(Path<N,E> path, N nextNode, E nextEdge)Создает путь (конкретенация) содержащий указанный и последующие за ним вершину + ребро<EventType extends GraphIteratorEvent>
java.lang.AutoCloseablelisten(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 voidpush(java.util.List<Path<N,E>> pushPaths)Помещение путей в списокvoidremove()Пустая функцияvoidremoveListener(GraphIteratorListener listener)Отписка от событийvoidsendEvents()Рассылает события из очереди подписчикамprotected voidsendFetchFinish()Добавляет событие FetchFinish, если оно небыло еще добавленоprotected Path<N,E>startPath(N from)Создает начальный путьprotected Path<N,E>startPath(N from, N to, E e)Создает начальный путьvoidsync(java.util.function.Consumer<GraphIterator<N,E>> syncCode)Выполняет код синхронно (блокируя другие операции)
-
Field Details
-
sync
protected final java.lang.Object syncОбъект для синхронизации -
follow
Функция извлечения исходящих/следующих верших из указанной вершины -
paths
Текущий список рабочих путей -
pusher
Функция помещаюшая пути в список рабочих -
poller
Функция вытаскивания (выбор и удаление) пути из списка рабочих путей -
visited
Набор посещенных вершин -
startIterator
Итератор верщин в графе -
listeners
Подписки -
eventQueue
Очередь сообщений -
fetchFinishSended
protected boolean fetchFinishSended
-
-
Constructor Details
-
GraphIterator
Конструктор.
По умолчанию:- 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
Конструктор восстановления- Parameters:
sstate- ранение сохраненноное состояниеsync- объект для синронизации графа
-
-
Method Details
-
hasListener
Проверяет наличие подписчика на события- Parameters:
listener- подписчик- Returns:
- true - есть подписка
-
getListeners
Возвращает подписчиков- Returns:
- подписчики
-
addListener
Добавление подписчика на события- Parameters:
listener- подписчик- Returns:
- отписаться от событий
-
addListener
Добавление подписчика на события- Parameters:
listener- подписчикweakLink- true - добавить подписчика на weak ссылку- Returns:
- отписаться от событий
-
removeListener
Отписка от событий- Parameters:
listener- подписчик
-
fireEvent
Уведомление о событии подписчиков- 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
Добавляет событие в очередь- Parameters:
event- событие
-
sendEvents
public void sendEvents()Рассылает события из очереди подписчикам -
getFollow
Функция извлечения исходящих/следующих верших из указанной вершины- Returns:
- функция извлечения
-
getPusher
Функция добавления списка путей к существующему списку- Returns:
- функция добавления
-
getPoller
Функция выборки очередного пути из списка возможных- Returns:
- функция выборки
-
getWorkPaths
Возвращает рабочий набор путей- Returns:
- Рабочий набор путей
-
getVisited
Возвращает набор посещенных узлов- Returns:
- посещенные узлы
-
getStartIterator
Возвращает итератор по вершинам с которых начинается обход- Returns:
- итератор вершин
-
sync
Выполняет код синхронно (блокируя другие операции)- Parameters:
syncCode- код
-
fetchStartPaths
Извлечение начальных путей из списка вершин- Returns:
- пути
-
startPath
Создает начальный путь- Parameters:
from- начала путиto- конец путиe- ребро- Returns:
- путь
-
startPath
Создает начальный путь- Parameters:
from- начала пути- Returns:
- путь
-
join
Создает путь (конкретенация) содержащий указанный и последующие за ним вершину + ребро- Parameters:
path- путьnextNode- вершинаnextEdge- ребро- Returns:
- путь содержащий в конце вершину и ребро
-
followPaths
Извлечение полследующих путей из указанного- Parameters:
path- путь- Returns:
- следующие пути
-
sendFetchFinish
protected void sendFetchFinish()Добавляет событие FetchFinish, если оно небыло еще добавлено -
hasNext
public boolean hasNext()Проверка наличия очередного пути в графе- Specified by:
hasNextin interfacejava.util.Iterator<N>- Returns:
- true - есть очередной путь, false - обход графа завершен
-
next
Получение очередного пути- Specified by:
nextin interfacejava.util.Iterator<N>- Returns:
- путь или null (конец)
-
remove
public void remove()Пустая функция- Specified by:
removein interfacejava.util.Iterator<N>
-
poll
Извлечение пути из списка. Извлеченный путь удаляется из списка.- Parameters:
paths- список вариантов- Returns:
- путь
-
push
Помещение путей в список- Parameters:
pushPaths- помещаемые пути
-