Class GraphIterator<N,​E>

  • Type Parameters:
    N - Тип вершины
    E - Тип ребра
    All Implemented Interfaces:
    Iterator<Path<N,​E>>

    public class GraphIterator<N,​E>
    extends Object
    implements Iterator<Path<N,​E>>
    Обход графа
    Author:
    Kamnev Georgiy
    • Field Detail

      • sync

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

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

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

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

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

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

        protected final Iterator<N> startIterator
        Итератор верщин в графе
      • 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 GraphIteratorEventAutoCloseable 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:
        Рабочий набор путей
      • getVisited

        public Set<N> getVisited()
        Возвращает набор посещенных узлов
        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()
        Проверка наличия очередного пути в графе
        Specified by:
        hasNext in interface Iterator<N>
        Returns:
        true - есть очередной путь, false - обход графа завершен
      • next

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

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

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

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