blob: 1c1099df1f6a432382277aeb8d361b371f17de0b [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2014-present Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
tome3489412014-08-29 02:30:38 -070016package org.onlab.graph;
17
18import java.util.Map;
19import java.util.Set;
20
21/**
22 * Representation of a graph path search algorithm.
23 *
24 * @param <V> vertex type
25 * @param <E> edge type
26 */
27public interface GraphPathSearch<V extends Vertex, E extends Edge<V>> {
28
Sho SHIMIZU3310a342015-05-13 12:14:05 -070029 static int ALL_PATHS = -1;
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080030
tome3489412014-08-29 02:30:38 -070031 /**
32 * Abstraction of a path search result.
33 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070034 interface Result<V extends Vertex, E extends Edge<V>> {
tome3489412014-08-29 02:30:38 -070035
36 /**
37 * Returns the search source.
38 *
39 * @return search source
40 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070041 V src();
tome3489412014-08-29 02:30:38 -070042
43 /**
44 * Returns the search destination, if was was given.
45 *
46 * @return optional search destination
47 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070048 V dst();
tome3489412014-08-29 02:30:38 -070049
50 /**
51 * Returns the set of paths produced as a result of the graph search.
52 *
53 * @return set of paths
54 */
55 Set<Path<V, E>> paths();
56
57 /**
58 * Returns bindings of each vertex to its parent edges in the path.
59 *
60 * @return map of vertex to its parent edge bindings
61 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070062 Map<V, Set<E>> parents();
tome3489412014-08-29 02:30:38 -070063
64 /**
65 * Return a bindings of each vertex to its cost in the path.
66 *
67 * @return map of vertex to path cost bindings
68 */
Andrey Komarov2398d962016-09-26 15:11:23 +030069 Map<V, Weight> costs();
tome3489412014-08-29 02:30:38 -070070 }
71
72 /**
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080073 * Searches the specified graph for paths between vertices.
tome3489412014-08-29 02:30:38 -070074 *
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080075 * @param graph graph to be searched
76 * @param src optional source vertex
77 * @param dst optional destination vertex; if null paths to all vertex
78 * destinations will be searched
Andrey Komarov2398d962016-09-26 15:11:23 +030079 * @param weigher optional edge-weigher; if null, {@link DefaultEdgeWeigher}
80 * will be used (assigns equal weights to all links)
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080081 * @param maxPaths limit on number of paths; {@link GraphPathSearch#ALL_PATHS} if no limit
tome3489412014-08-29 02:30:38 -070082 * @return search results
83 */
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080084 Result<V, E> search(Graph<V, E> graph, V src, V dst,
Andrey Komarov2398d962016-09-26 15:11:23 +030085 EdgeWeigher<V, E> weigher, int maxPaths);
tome3489412014-08-29 02:30:38 -070086
87}