- java.lang.Object
-
- xyz.cofe.collection.graph.GraphIterator<N,E>
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceGraphIterator.StoredState<N,E>Интерфейс для восстановления рание сохраненного состояния
-
Field Summary
Fields Modifier and Type Field Description protected ConcurrentLinkedQueue<GraphIteratorEvent<N,E>>eventQueueОчередь сообщенийprotected booleanfetchFinishSendedprotected NodesExtracter<N,Pair<N,E>>followФункция извлечения исходящих/следующих верших из указанной вершиныprotected ListenersHelper<GraphIteratorListener<N,E>,GraphIteratorEvent<N,E>>listenersПодпискиprotected List<Path<N,E>>pathsТекущий список рабочих путейprotected GraphIteratorPoller<N,E>pollerФункция вытаскивания (выбор и удаление) пути из списка рабочих путейprotected GraphIteratorPusher<N,E>pusherФункция помещаюшая пути в список рабочихprotected Iterator<N>startIteratorИтератор верщин в графеprotected ObjectsyncОбъект для синхронизацииprotected Set<N>visitedНабор посещенных вершин
-
Constructor Summary
Constructors Constructor Description GraphIterator(Iterable<N> starts, NodesExtracter<N,Pair<N,E>> follow)Конструктор.GraphIterator(Iterable<N> starts, NodesExtracter<N,Pair<N,E>> follow, GraphIteratorPoller<N,E> poller, GraphIteratorPusher<N,E> pusher)КонструкторGraphIterator(Iterable<N> starts, NodesExtracter<N,Pair<N,E>> follow, GraphIteratorPusher<N,E> pusher)Конструктор.GraphIterator(GraphIterator.StoredState<N,E> sstate, Object sync)Конструктор восстановления
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddEvent(GraphIteratorEvent<N,E> event)Добавляет событие в очередьAutoCloseableaddListener(GraphIteratorListener listener)Добавление подписчика на событияAutoCloseableaddListener(GraphIteratorListener listener, boolean weakLink)Добавление подписчика на событияprotected List<Path<N,E>>fetchStartPaths()Извлечение начальных путей из списка вершинprotected voidfireEvent(GraphIteratorEvent<N,E> event)Уведомление о событии подписчиковprotected List<Path<N,E>>followPaths(Path<N,E> path)Извлечение полследующих путей из указанногоNodesExtracter<N,Pair<N,E>>getFollow()Функция извлечения исходящих/следующих верших из указанной вершиныSet<GraphIteratorListener<N,E>>getListeners()Возвращает подписчиковGraphIteratorPoller<N,E>getPoller()Функция выборки очередного пути из списка возможныхGraphIteratorPusher<N,E>getPusher()Функция добавления списка путей к существующему спискуIterator<N>getStartIterator()Возвращает итератор по вершинам с которых начинается обходSet<N>getVisited()Возвращает набор посещенных узлов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>
AutoCloseablelisten(Class<EventType> evType, Consumer<EventType> listener)Добавляет подписчика на событие определенного типаPath<N,E>next()Получение очередного путиprotected Path<N,E>poll(List<Path<N,E>> paths)Извлечение пути из списка.protected voidpush(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(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 Detail
-
sync
protected final Object sync
Объект для синхронизации
-
follow
protected final NodesExtracter<N,Pair<N,E>> follow
Функция извлечения исходящих/следующих верших из указанной вершины
-
pusher
protected final GraphIteratorPusher<N,E> pusher
Функция помещаюшая пути в список рабочих
-
poller
protected final GraphIteratorPoller<N,E> poller
Функция вытаскивания (выбор и удаление) пути из списка рабочих путей
-
listeners
protected final ListenersHelper<GraphIteratorListener<N,E>,GraphIteratorEvent<N,E>> listeners
Подписки
-
eventQueue
protected final ConcurrentLinkedQueue<GraphIteratorEvent<N,E>> eventQueue
Очередь сообщений
-
fetchFinishSended
protected boolean fetchFinishSended
-
-
Constructor Detail
-
GraphIterator
public GraphIterator(Iterable<N> starts, NodesExtracter<N,Pair<N,E>> follow)
Конструктор.
По умолчанию:- poller - FirstPoller
- pusher - PrependPusher
- Parameters:
starts- Список вершин с которых происходит обход графаfollow- Функция извлечения исходящих/следующих верших из указанной вершины
-
GraphIterator
public GraphIterator(Iterable<N> starts, NodesExtracter<N,Pair<N,E>> follow, GraphIteratorPusher<N,E> pusher)
Конструктор.
По умолчанию:- poller - FirstPoller
- Parameters:
starts- Список вершин с которых происходит обход графаfollow- Функция извлечения исходящих/следующих верших из указанной вершиныpusher- Функция добавления списка путей к существующему списку
-
GraphIterator
public GraphIterator(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, Object sync)
Конструктор восстановления- Parameters:
sstate- ранение сохраненноное состояниеsync- объект для синронизации графа
-
-
Method Detail
-
hasListener
public boolean hasListener(GraphIteratorListener listener)
Проверяет наличие подписчика на события- Parameters:
listener- подписчик- Returns:
- true - есть подписка
-
getListeners
public Set<GraphIteratorListener<N,E>> getListeners()
Возвращает подписчиков- Returns:
- подписчики
-
addListener
public AutoCloseable addListener(GraphIteratorListener listener)
Добавление подписчика на события- Parameters:
listener- подписчик- Returns:
- отписаться от событий
-
addListener
public 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> AutoCloseable listen(Class<EventType> evType, 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 List<Path<N,E>> getWorkPaths()
Возвращает рабочий набор путей- Returns:
- Рабочий набор путей
-
getStartIterator
public Iterator<N> getStartIterator()
Возвращает итератор по вершинам с которых начинается обход- Returns:
- итератор вершин
-
sync
public void sync(Consumer<GraphIterator<N,E>> syncCode)
Выполняет код синхронно (блокируя другие операции)- Parameters:
syncCode- код
-
fetchStartPaths
protected 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 List<Path<N,E>> followPaths(Path<N,E> path)
Извлечение полследующих путей из указанного- Parameters:
path- путь- Returns:
- следующие пути
-
sendFetchFinish
protected void sendFetchFinish()
Добавляет событие FetchFinish, если оно небыло еще добавлено
-
hasNext
public boolean hasNext()
Проверка наличия очередного пути в графе
-
poll
protected Path<N,E> poll(List<Path<N,E>> paths)
Извлечение пути из списка. Извлеченный путь удаляется из списка.- Parameters:
paths- список вариантов- Returns:
- путь
-
-